8.3.37 setHADBSQLMaxRthdNum(int rthdNum)
(1) 機能
このConnectionオブジェクトに対して最大SQL処理リアルスレッド数を設定します。
このメソッドで設定する内容は,クライアント定義のadb_sql_exe_max_rthd_numオペランドに対応しています。
- 重要
-
このメソッドを指定したConnectionオブジェクトから生成されたStatementオブジェクトまたはPreparedStatementオブジェクトは,Connectionオブジェクトがクローズされるまでは,このメソッドで指定した最大SQL処理リアルスレッド数が適用されます。
(2) 形式
public void setHADBSQLMaxRthdNum(int rthdNum) throws SQLException
(3) 引数
- int rthdNum:
-
設定する最大SQL処理リアルスレッド数を指定します。
(4) 戻り値
なし。
(5) 発生する例外
次に示す場合にSQLExceptionが投入されます。
-
Connectionオブジェクトがクローズされている場合
-
rthdNumに不正な値を指定した場合
(6) 留意事項
-
このメソッドは,AdbConnectionインタフェースで提供されるHADB独自のメソッドです。実行方法については,「12.2 Wrapperインタフェース」を参照してください。
-
setHADBSQLMaxRthdNumメソッドで指定した最大SQL処理リアルスレッド数は,Connectionオブジェクトをいったんプールしたあとに再度使用した場合,前回の最大SQL処理リアルスレッド数を引き継ぎません。setHADBSQLMaxRthdNumメソッドを実行していない状態と同じになります。
-
setHADBSQLMaxRthdNumメソッドで最大SQL処理リアルスレッド数を再設定しても,生成済みのStatementオブジェクトまたはPreparedStatementオブジェクトには,再設定後の最大SQL処理リアルスレッド数は適用されません。
-
最大SQL処理リアルスレッド数の決定方法については,「2.2.3 性能に関するオペランド」のadb_sql_exe_max_rthd_numオペランドの説明を参照してください。
(7) 使用例
setHADBSQLMaxRthdNumおよびgetHADBSQLMaxRthdNumメソッドを使用して,実行するSQL文ごとに最大SQL処理リアルスレッド数を変更する例を次に示します。
- (例1)
-
: : Connection cnct = ds.getConnection(); AdbConnection con = cnct.unwrap(com.hitachi.hadb.jdbc.AdbConnection.class); // 最大SQL処理リアルスレッド数のデフォルト値を退避しておく int default_sql_exe_rthd_num = con.getHADBSQLMaxRthdNum(); // 最大SQL処理リアルスレッド数を0に変更する con.setHADBSQLMaxRthdNum(0); // PreparedStatementオブジェクトを生成する // このPreparedStatementオブジェクトで実行するすべてのSQL文は, // 最大SQL処理リアルスレッド数が0で動作する PreparedStatement pstmt = con.prepareStatement("SELECT * FROM MASTER.SQL_USERS WHERE USER_NAME=?"); // 最大SQL処理リアルスレッド数をデフォルト値に戻す con.setHADBSQLMaxRthdNum(default_sql_exe_rthd_num); // この操作は上記のpstmtに影響を与えない pstmt.setString(1, "HOGE"); ResultSet rs = pstmt.executeQuery(); // 最大SQL処理リアルスレッド数が0でSQL文を実行する while (rs.next()) { : : } rs.close(); pstmt.close(); : :
- (例2)
-
ステートメントごとに異なる最大SQL処理リアルスレッド数で,SQL文を実行する例を次に示します。
: : Connection cnct = ds.getConnection(); AdbConnection con = cnct.unwrap(com.hitachi.hadb.jdbc.AdbConnection.class); // 最大SQL処理リアルスレッド数のデフォルト値を退避しておく int default_sql_exe_rthd_num = con.getHADBSQLMaxRthdNum(); // 最大SQL処理リアルスレッド数を0に変更する con.setHADBSQLMaxRthdNum(0); // PreparedStatementオブジェクトを生成する // pstmt1で実行するすべてのSQL文は,最大SQL処理リアルスレッド数が0で動作する PreparedStatement pstmt1 = con.prepareStatement("SELECT * FROM MASTER.SQL_USERS WHERE USER_NAME=?"); // 最大SQL処理リアルスレッド数を4に変更する con.setHADBSQLMaxRthdNum(4); // この操作は上記の pstmt1 に影響を与えない // PreparedStatementオブジェクトを生成する // pstmt2で実行するすべてのSQL文は,最大SQL処理リアルスレッド数が4で動作する PreparedStatement pstmt2 = con.prepareStatement("SELECT * FROM MASTER.SQL_TABLE_PRIVILEGES WHERE GRANTOR=?"); // 最大SQL処理リアルスレッド数をデフォルト値に戻す con.setHADBSQLMaxRthdNum(default_sql_exe_rthd_num); // この操作は上記のpstmt1およびpstmt2に影響を与えない pstmt1.setString(1, "HOGE"); ResultSet rs1 = pstmt1.executeQuery(); // 最大SQL処理リアルスレッド数が0でSQL文を実行する while (rs1.next()) { : : } rs1.close(); pstmt1.close(); pstmt2.setString(1, "FOO"); ResultSet rs2 = pstmt2.executeQuery(); // 最大SQL処理リアルスレッド数が4でSQL文を実行する while (rs2.next()) { : : } rs2.close(); pstmt2.close(); : :
- メモ
-
-
上記の例では,例外処理などのエラー処理は省いています。
-
setHADBSQLHashTblSizeおよびgetHADBSQLHashTblSizeメソッドを使用して,実行するSQL文ごとにハッシュテーブル領域サイズを変更する場合も,上記の例を参考にしてください。
-
setHADBSQLHashFltSizeおよびgetHADBSQLHashFltSizeメソッドを使用して,実行するSQL文ごとにハッシュフィルタ領域サイズを変更する場合も,上記の例を参考にしてください。
-