Cosminexus 機能解説
Cosminexus DABroker Libraryを使用する場合,実行したSQLに対して返却される実行結果を格納する領域をプールして再利用できます。この領域を受信バッファといいます。また,受信バッファをプールするための領域を受信バッファプールといいます。受信バッファをプールすることによって,SQL実行時に受信バッファが頻繁に作成,破棄されることで発生する負荷を削減できます。
また,プールする受信バッファの数を指定できるため,ステートメントプーリング使用時のメモリ占有量を抑制できます。
ここでは,受信バッファの管理と,受信バッファプール数の指定について説明します。
受信バッファの管理では,プールする受信バッファ数を指定する場合と指定しない場合とで,受信バッファの再利用のしかたが異なります。ここでは,プールする受信バッファ数を指定しない,デフォルトの場合について説明します。受信バッファ数を指定する場合については,「(2) 受信バッファプール数の指定」を参照してください。
受信バッファは,Statementごとに受信バッファプールに生成されます。生成された受信バッファはセクションIDで管理され,同一のStatementで再利用されます。なお,ここでは,Statement,PreparedStatement,およびCallableStatementをStatementと総称します。
受信バッファプールの管理の概要を次の図に示します。
図9-19 受信バッファプールの管理の概要(受信バッファプール数を指定しない場合)
表9-34 SQLを実行するメソッド
クラス | メソッド |
---|---|
Connection | prepareCall(String sql) |
prepareCall(String sql, int resultSetType, int resultSetConcurrency) | |
prepareStatement(String sql) | |
prepareStatement(String sql, int resultSetType, int resultSetConcurrency) | |
DatabaseMetaData | getProcedures(String catalog, String schemaPattern, String procedureNamePattern) |
getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) | |
getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) | |
getSchemas() | |
getTableTypes() | |
getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) | |
getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) | |
getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) | |
getPrimaryKeys(String catalog, String schema, String table) | |
getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) | |
Statement | executeBatch() |
execute(String sql) | |
executeQuery(String sql) | |
executeUpdate(String sql) | |
PreparedStatement | execute() |
executeQuery() | |
executeUpdate() |
受信バッファプールに登録してプールする受信バッファの数を指定できます。この数のことを受信バッファプール数といいます。受信バッファプール数を指定することによってSQL実行時の性能を向上でき,メモリ占有量を軽減できます。
受信バッファプール数は,1〜1,024個の範囲で指定できます。受信バッファプール数を指定すると,同一コネクション内で受信バッファが再利用されます。そのため,セッションIDが異なるStatementでも,同一コネクションであれば受信バッファを再利用できます。受信バッファが,指定した受信バッファプール数よりも多く必要になった場合は,一時的に受信バッファを生成し,Cosminexus DABroker Libraryから実行結果のデータを受信したあとに破棄します。このような一時的に生成した受信バッファは,受信バッファプールには登録されません。
受信バッファプール数を指定した場合の,受信バッファプールの管理の概要を次の図に示します。
図9-20 受信バッファプールの管理の概要(受信バッファプール数を指定した場合)
表9-35 メソッドの動作の分類
動作 | 説明 |
---|---|
1 | メソッド実行時に受信バッファを受信バッファプールから取得する。メソッド終了後,受信バッファを受信バッファプールに戻す。 |
2 | 動作2に分類されるメソッドのうち,最初に実行するメソッドで受信バッファを受信バッファプールから取得する。メソッドが終了しても,受信バッファは受信バッファプールに戻さない。 |
3 | 動作2に分類されるメソッドで取得した受信バッファを受信バッファプールに戻す。新たな受信バッファは取得しない。 |
表9-36 SQLを実行するメソッド,およびメソッドの動作
クラス | メソッド | 動作 |
---|---|---|
Connection | prepareCall(String sql) | 1 |
prepareCall(String sql, int resultSetType, int resultSetConcurrency) | 1 | |
prepareStatement(String sql) | 1 | |
prepareStatement(String sql, int resultSetType, int resultSetConcurrency) | 1 | |
DatabaseMetaData | getProcedures(String catalog, String schemaPattern, String procedureNamePattern) | 1 |
getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) | 1 | |
getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) | 1 | |
getSchemas() | 1 | |
getTableTypes() | 1 | |
getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) | 1 | |
getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) | 1 | |
getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) | 1 | |
getPrimaryKeys(String catalog, String schema, String table) | 1 | |
getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) | 1 | |
Statement | executeBatch() | 1 |
execute(String sql) | 1 | |
executeQuery(String sql) | 1 | |
executeUpdate(String sql) | 1 | |
close()※ | 3 | |
PreparedStatement | execute() | 1 |
executeQuery() | 1 | |
executeUpdate() | 1 | |
ResultSet | absolute(int row) | 2 |
afterLast() | 2 | |
first() | 2 | |
next() | 2 | |
close() | 3 |
注※ ResultSet#close()メソッドを実行していない場合だけ使用できます。
受信バッファプール数は,次のどれかの方法で指定します。また,これらを同時に指定した場合,1,2,3の優先度順に決定されます。
指定方法の詳細については,「付録I.4 データベース接続の設定」を参照してください。
受信バッファプール数は,次の式で求められる数以上の数を目安に設定します。
検索処理に必要な受信バッファ数+更新処理に必要な受信バッファ数
図9-21 アプリケーション中で同時に使用するResultSetの数
実際に必要な受信バッファ数が,この式を基に設定した受信バッファ数を超えた場合,受信バッファを新たに生成し,使用後に破棄します。このとき,生成した受信バッファは受信バッファプールに登録されません。この場合,オブジェクトの作成,破棄が頻発するため,性能が劣化することがあります。ただし,設定した受信バッファ数を超えた分の受信バッファは使用後に破棄するため,式を基に設定した場合よりメモリ占有量は軽減します。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.