JDBC ドライバーのタイムアウト プロパティについて

JDBC ドライバーのダウンロード

JDBC ドライバーのタイムアウト設定を使用して、アプリケーションの応答性に優先順位を設定できます。 ドライバーのタイムアウトの多くは、データの整合性を確保するために、既定で結果の待機を優先します。 必ず、アプリケーションのニーズに適したタイムアウトを選択してください。

最初の接続では、loginTimeout が使用されます。

  • loginTimeout は、サーバーへの接続が確立されるまでドライバーが待機する時間 (秒単位) です。 この時間を超えると、エラーが返され、開いた接続は確立されません。 値 0 は、タイムアウトが既定のシステム タイムアウト (バージョン 11.2 以上では 30 秒) であることを示します。 バージョン 10.2 以下の場合、既定のタイムアウトは 15 秒です。 0 以外の値は、失敗した接続をタイムアウトするまでにドライバーが待機する秒数を示します。 JDBC ドライバーとの接続の確立に常に問題がある場合は、このタイムアウトを 90 秒 (または 120 秒) に増やすことが必要な場合があります。

接続が確立されると、ステートメントの実行中に queryTimeoutcancelQueryTimeoutlockTimeout が使用されます。 socketTimeout は、ドライバーとサーバーの通信に使用されます。

  • queryTimeout は、サーバーに実行コマンドを送信してから、データを含む応答をサーバーから受信するまで、ドライバーが待機する時間 (秒単位) です。 この時間を経過すると、コマンドは取り消されます。 このタイムアウトを超えると、接続は閉じられません。 既定値は -1 です。これはタイムアウトが無期限であることを意味します。
  • cancelQueryTimeout は、接続を強制的に終了または閉じる前に、ドライバーがサーバーからの取り消しの queryTimeout 受信確認を待機する時間 (秒単位) です。 つまり、ドライバーは、cancelQueryTimeoutqueryTimeout の合計秒数の間待機した後、接続を閉じます。 このタイムアウトを 0 以外の値に設定すると、クエリがタイムアウトしたときに、サーバーとのネットワークまたは通信エラーが発生した場合でも、アプリケーションの応答性を確実に維持できます。このプロパティの既定値は -1 で、これは無期限の待機時間です。
  • lockTimeout は、ステートメントの実行をブロックする lock がある場合、ロックを解放するまでに待機する時間です。 このタイムアウトを超えると、接続は閉じられません。 このプロパティの既定値は -1 で、これは無期限の待機時間です。
  • socketTimeout は、サーバーとのすべてのソケット通信に適用されます。 データの応答確認またはデータに対する応答を行わないことによってサーバー側でドライバーとの通信が停止された場合、ドライバーは、socketTimeout の値の間待機した後、接続を閉じます。 このタイムアウトを 0 以外の値に設定すると、サーバーとのネットワークまたは通信エラーが発生しても、アプリケーションの応答性は確実に維持できます。 既定値は 0 です。これはタイムアウトが無期限であることを意味します。 queryTimeout ウィンドウでソケット タイムアウトの例外が発生しないように、socketTimeoutqueryTimeout より大きいことを確認します。 同様に、cancelQueryTimeout ウィンドウでソケット タイムアウトの例外が発生しないように、socketTimeoutcancelQueryTimeout より大きいことを確認します。

アプリケーションの適正なタイムアウト値は、アプリケーションの優先順位によって異なります。 小さいタイムアウト値を設定すると、アプリケーションの応答性がデータの整合性よりも優先されます。 タイムアウトに達した場合、アプリケーションで最適なアクションを決定する必要があります。 この決定は、実行されているデータベース アクションに基づきます。 たとえば、SELECT ステートメントの場合、この決定としては、ユーザーへのエラーの報告、または再接続と再試行が考えられます。 INSERT または UPDATE ステートメントの場合は、この決定が異なる可能性があります。

応答性の高いアプリケーションの場合、loginTimeoutqueryTimeout を比較的低い値に設定する必要があります。 同様に、queryTimeout を超えた場合にサーバーがクエリの取り消しを確認するまでドライバーが長時間待機することがないように、cancelQueryTimeout も低い値に設定する必要があります。 最後に、socketTimeout は、サーバーへの接続が切断されるシナリオ (ネットワークの中断、サーバーのクラッシュなど) でドライバーが長時間待機することがないように設定する必要があります。

プロパティの概要

プロパティ 説明 Default 接続結果
loginTimeout ドライバーがタイムアウトを通知して接続を失敗させるまでに待機する時間 (秒) です。 30 秒 [11.2 以上]、
それ以外の場合は 15 秒
閉じた接続
queryTimeout クエリを取り消すまでに待機する秒数。 -1 [無期限のタイムアウト] 開いた接続
cancelQueryTimeout QueryTimeout キャンセルの受信確認を待機する秒数。 -1 [無期限のタイムアウト] 閉じた接続
lockTimeout データベースによってロック タイムアウト エラーが返されるまでの待機ミリ秒数。 -1 [無期限のタイムアウト] 開いた接続
socketTimeout ソケットの読み取りまたは書き込みを待機するミリ秒数。 0 [無期限のタイムアウト] 閉じた接続

関連項目

接続プロパティの設定