QueryTimeout の構成
アプリケーションのデータ・ソースに照会タイムアウトを構成することで、 Structured Query Language (SQL) ステートメントの実行が指定秒数内に完了しなかった場合 にステートメントが中断されるようにできます。
始める前に
このタスクについて
- webSphereDefaultQueryTimeout はデフォルトの照会タイムアウトを設定します。これは、タイムアウトになる前に SQL ステートメントの実行にかかり得る秒数です。syncQueryTimeoutWithTransactionTimeout カスタム・プロパティーが有効に設定されると、このデフォルト値は Java™ Transaction API (JTA) トランザクション中にオーバーライドされます。
- syncQueryTimeoutWithTransactionTimeout は、JTA トランザクションの残り時間があれば、それを SQL ステートメントのデフォルト照会タイムアウトとして使用します。
- トランザクション・マネージャー (TM) タイムアウト設定に基づく、現行 JTA トランザクションにおける残り時間 - syncQueryTimeoutWithTransactionTimeout
- 構成により指定された絶対秒数 - webSphereDefaultQueryTimeout
手順
タスクの結果
例
statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // query timeout of 20 seconds is used
statement.executeUpdate(sqlcommand2); // query timeout of 20 seconds is used
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // query timeout of 30 seconds is used
// assume the above operation took 5 seconds, remaining time = 30 - 5 seconds
statement.executeUpdate(sqlcommand4); // query timeout of 25 seconds is used
// assume the above operation took 10 seconds, , remaining time = 25 - 10 seconds
statement.executeUpdate(sqlcommand5); // query timeout of 15 seconds is used
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // query timeout of 20 seconds is used
以下の
例は、データ・ソースの
カスタム・プロパティー webSphereDefaultQueryTimeout = 20 および syncQueryTimeoutWithTransactionTimeout
= false が設定された場合の影響を示します。webSphereDefaultQueryTimeout のみが
設定されている場合、ステートメントが JTA トランザクション内で実行されるかどうかに関係なく、すべてのステートメントで
デフォルトのタイムアウト値が使用されます。statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // query timeout of 20 seconds is used
statement.executeUpdate(sqlcommand2); // query timeout of 20 seconds is used
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // query timeout of 20 seconds is used
// assume the above operation took 5 seconds
statement.executeUpdate(sqlcommand4); // query timeout of 20 seconds is used
// assume the above operation took 10 seconds
statement.executeUpdate(sqlcommand5); // query timeout of 20 seconds is used
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // query timeout of 20 seconds is used
ご使用のアプリケーション・コードから java.sql.Statement.setQueryTimeout インターフェースを呼び出すことで、ステートメントの照会タイムアウトはいつでもオーバーライドすることができます。