データベース常駐接続プール(DRCP)は、多数のクライアント間で共有されるサーバーの接続プールです。アクティブな接続の数がオープン接続の数よりもかなり少ない接続プールにおいてDRCPを使用する必要があります。DRCPプールからの接続を共有できる接続プールのインスタンスの数が増加すると、DRCPを使用する利点も増加します。DRCPを使用すると、データベース・サーバーのスケーラビリティが向上し、中間層の接続プーリングに関連したリソースの消費の問題が解決されます。
この章の内容は次のとおりです。
中間層の接続プールでは、すべての接続キャッシュは、サーバーに対して最低限の数の接続を維持します。各接続は、サーバーの使用済リソースを示します。常に、すべてのオープン接続が使用されているわけではありません。つまり、これは、サーバーのリソースを無駄に消費する未使用のリソースがあるということです。複数の中間層のシナリオでは、これらの接続は他の中間層と共有されておらず、アイドルの接続があってもキャッシュにそのまま保持されています。ただし、すべての接続が同時にアクティブになるわけではないため、このような中間層の多数の接続プールによってデータベース・サーバーへの非アクティブな接続の数がかなり増加し、多くのデータベース・リソースが消費されています。
たとえば、中間層の接続プールで、最小のプール・サイズが200の場合、接続プールにはサーバーに対して200の接続があり、データベース・サーバーにはこれらの接続に関連付けられた200のサーバー・プロセスがあります。最小サイズ200の接続プールで30の中間層がある場合、このサーバーには、これに対応する実行中サーバー・プロセスが6000 (200 * 30)個あります。通常、サーバー・プロセスは平均5%の接続にしか使用されていません。したがって、常に、6,000個のサーバー・プロセスのうちアクティブな接続は300個のみです。これは、サーバー上で5,700個以上のサーバー・プロセスが使用されていないということです。このような使用されていないプロセスはサーバー上のリソースを無駄に消費しています。
データベース常駐接続プールを実装すると、サーバー側でプールが作成され、複数のクライアント・プール間でこれが共有されます。これによって、サーバー上でサーバー・プロセス数が減少するため、サーバーでのメモリーの消費がかなり抑えられ、データベース・サーバーのスケーラビリティが向上します。
関連項目:
|
この項では、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();
プールの終了
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を使用可能にするには、次の手順を実行します。
注意: 例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を使用すると、サーバーの接続プールに、サーバー・プロセスを特定のタグ名と関連付けるように要求できます。
関連項目: セッション・プーリングと接続のタグ付けの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。 |