ヘッダーをスキップ
Oracle® Database JDBC開発者ガイド
12cリリース1 (12.1)
B71308-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

23 データベース常駐接続プーリング

データベース常駐接続プール(DRCP)は、多数のクライアント間で共有されるサーバーの接続プールです。アクティブな接続の数がオープン接続の数よりもかなり少ない接続プールにおいてDRCPを使用する必要があります。DRCPプールからの接続を共有できる接続プールのインスタンスの数が増加すると、DRCPを使用する利点も増加します。DRCPを使用すると、データベース・サーバーのスケーラビリティが向上し、中間層の接続プーリングに関連したリソースの消費の問題が解決されます。

この章の内容は次のとおりです。

データベース常駐接続プーリングの概要

中間層の接続プールでは、すべての接続キャッシュは、サーバーに対して最低限の数の接続を維持します。各接続は、サーバーの使用済リソースを示します。常に、すべてのオープン接続が使用されているわけではありません。つまり、これは、サーバーのリソースを無駄に消費する未使用のリソースがあるということです。複数の中間層のシナリオでは、これらの接続は他の中間層と共有されておらず、アイドルの接続があってもキャッシュにそのまま保持されています。ただし、すべての接続が同時にアクティブになるわけではないため、このような中間層の多数の接続プールによってデータベース・サーバーへの非アクティブな接続の数がかなり増加し、多くのデータベース・リソースが消費されています。

たとえば、中間層の接続プールで、最小のプール・サイズが200の場合、接続プールにはサーバーに対して200の接続があり、データベース・サーバーにはこれらの接続に関連付けられた200のサーバー・プロセスがあります。最小サイズ200の接続プールで30の中間層がある場合、このサーバーには、これに対応する実行中サーバー・プロセスが6000 (200 * 30)個あります。通常、サーバー・プロセスは平均5%の接続にしか使用されていません。したがって、常に、6,000個のサーバー・プロセスのうちアクティブな接続は300個のみです。これは、サーバー上で5,700個以上のサーバー・プロセスが使用されていないということです。このような使用されていないプロセスはサーバー上のリソースを無駄に消費しています。

データベース常駐接続プールを実装すると、サーバー側でプールが作成され、複数のクライアント・プール間でこれが共有されます。これによって、サーバー上でサーバー・プロセス数が減少するため、サーバーでのメモリーの消費がかなり抑えられ、データベース・サーバーのスケーラビリティが向上します。


関連項目:

  • Oracle Databaseの概念

  • 『Oracle Database管理者ガイド』

  • 『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』


データベース常駐接続プーリングを使用可能にする方法

この項では、DRCPをサーバー側とクライアント側で使用可能にする方法について説明します。

サーバー側でDRCPを使用可能にする方法

プールを起動し終了するには、データベース管理者(DBA)がSYSDBAとしてログインする必要があります。この項の内容は次のとおりです。


注意:

JDBCにはデフォルトのプールがないので、DRCPの機能はクライアントの接続プールでのみ利用できます。クライアント接続プールがなく、自動コミットがfalseに設定されたデータベースになんらかの変更を加えた場合、接続を閉じる際にその変更はデータベースにコミットされません。

プールの起動

dbms_connection_pool.start_poolメソッドをデフォルト設定で実行し、デフォルトのプールSYS_DEFAULT_CONNECTION_POOLを起動します。たとえば、次のようになります。

sqlplus /nolog
connect / as sysdba
execute dbms_connection_pool.start_pool();

関連項目:

詳細は、『Oracle Database管理者ガイド』および文のキャッシュに関する項を参照してください。

プールの終了

dbms_connection_pool.stop_poolメソッドをデフォルト設定で実行し、プールを終了します。たとえば、次のようになります。

sqlplus /nolog
connect / as sysdba
execute dbms_connection_pool.stop_pool();

文のキャッシュ・サイズの設定

DRCPを使用する場合、キャッシュもサーバー側では行われません。したがって、次のように、サーバー側で文のキャッシュ・サイズを指定する必要があります。50が最適サイズです。

execute DBMS_CONNECTION_POOL.CONFIGURE_POOL (session_cached_cursors=>50);

クライアント側でDRCPを使用可能にする方法

クライアント側でDRCPを使用可能にするには、次の手順を実行します。


注意:

例23-1では、ユニバーサル接続プールをクライアント側の接続プールとして使用しています。他の接続プールの場合、次の2つの手順に従い、oracle.jdbc.pool.OracleConnectionPoolDataSourceをコネクション・ファクトリとして使用して、DRCPを使用可能にできます。

  • null以外で空でない文字列の値を接続プロパティoracle.jdbc.DRCPConnectionClassに渡します。

  • (SERVER=POOLED)をCONNECT_DATAに長い接続文字列で追加します。

次のように、短いURLで(SERVER=POOLED)を指定することもできます。

jdbc:oracle:thin:@//<host>:<port>/<service_name>[:POOLED]

たとえば、次のようになります。

jdbc:oracle:thin:@//localhost:5221/orcl:POOLED

例23-1に、クライアント側でDRCPを使用可能にする方法を示します。

例23-1 ユニバーサル接続プールを使用してクライアント側でDRCPを使用可能にする方法

String url = "jdbc:oracle:thin:@//localhost:5521/orcl:POOLED";
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
// Set DataSource Property
pds.setUser("HR");
pds.setPassword("hr");
System.out.println ("Connecting to " + url);
pds.setURL(url);
pds.setConnectionPoolName("HR-Pool1");
pds.setMinPoolSize(2);
pds.setMaxPoolSize(3);
pds.setInitialPoolSize(2);
Properties prop = new Properties();
prop.put("oracle.jdbc.DRCPConnectionClass", "HR-Pool1");
pds.setConnectionProperties(prop);

関連項目:

ユニバーサル接続プールの詳細は、『Oracle Universal Connection Pool for JDBC開発者ガイド』を参照してください。


注意:

UCPでは、接続クラスを指定しない場合、接続プール名がデフォルトで接続クラス名として使用されます。

複数の接続プール間でのプールされたサーバーの共有

複数の接続プール間でサーバー上にプールされたサーバー・プロセスを共有するには、同じDRCP接続クラス名をすべてのプールされたサーバー・プロセス用にサーバー上に設定します。クライアント側でDRCPを使用可能にする方法に関する項で説明されているように、接続プロパティoracle.jdbc.DRCPConnectionClassを使用して、DRCP接続クラス名を設定できます。

DRCPのタグ付け

DRCPを使用すると、サーバーの接続プールに、サーバー・プロセスを特定のタグ名と関連付けるように要求できます。


関連項目:

セッション・プーリングと接続のタグ付けの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

DRCPを使用するためのAPI

DRCPで、特定の接続にタグを適用し、後でそのタグ付けされた接続を取得できます。特定のセッションを簡単に取得できるので、接続のタグ付けによってセッション・プーリングが拡張されます。

カスタムの接続プールを実装するためにさらに詳細に制御してDRCPを利用する場合、oracle.jdbc.OracleConnectionインタフェースで宣言された次のAPIを使用する必要があります。

  • attachServerConnection

  • detachServerConnection

  • isDRCPEnabled

  • needToPurgeStatementCache


関連項目:

Oracle Database JDBC Java APIリファレンス