8.6.6 データベースでのタイムアウトを設定する
ここでは,次に示すデータベースでのタイムアウトの設定について説明します。
-
HiRDB
-
MySQL
-
Oracle
-
PostgreSQL
-
SQL Server
-
XDM/RD E2
なお,Oracleの場合は,グローバルトランザクションとローカルトランザクションのどちらを使用しているかによって,設定できる項目が異なります。
- 〈この項の構成〉
(1) HiRDBのタイムアウト
HiRDBでは,次の3種類のタイムアウトを設定できます。
-
ロック解放待ちタイムアウト
デッドロックやリソースの長時間占有を防止するために設定するタイムアウトです。HiRDBサーバのシステム共通定義のpd_lck_wait_timeoutパラメタに設定します。ここで設定するタイムアウト時間は,排他待ち時間を監視する最大時間です。排他待ち時間とは,排他要求が待ち状態になってから解除されるまでの時間です。
このタイムアウトが発生した場合にアプリケーションサーバおよびHiRDBによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すHiRDBのメッセージKFPA11770-Iが出力されます。または,デッドロックが発生したことを示すHiRDBのメッセージKFPA11911-Eが出力されます。
-
実行中のトランザクションはロールバックされます。
-
ユーザアプリケーションのビジネスメソッド終了後に,コネクションはクローズされ,コネクションプールから削除されます。
-
-
レスポンスタイムアウト
データベースシステムのサーバ側の障害を検知するためのタイムアウトです。
HiRDBのクライアント環境変数のPDCWAITTIMEに設定します。ここで設定するタイムアウト時間は,HiRDBクライアントからHiRDBサーバに要求をしてから,応答が戻ってくるまでのHiRDBクライアントの最大待ち時間です。長時間SQLの時間を監視する場合などに指定します。
このタイムアウトが発生した場合にアプリケーションサーバおよびHiRDBによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すHiRDBのメッセージKFPA11732-Eが出力されます。
-
実行中のトランザクションはロールバックされます。
-
コネクションはクローズされて,コネクションプールから削除されます。
-
-
リクエスト間隔タイムアウト
データベースシステムのクライアント側の障害を検知するためのタイムアウトです。
HiRDBのクライアント環境変数のPDSWAITTIMEに設定します。ここで設定するタイムアウトは,HiRDBサーバがHiRDBクライアントからの要求に対する応答を返してから,次にHiRDBクライアントから要求が送信されるまでのHiRDBサーバの最大待ち時間です。時間監視は,トランザクションの処理中(SQL実行開始からコミットまたはロールバックまでの間)が対象になります。HiRDBクライアントからの要求がHiRDBサーバに到着した段階でリセットされます。
このタイムアウトが発生した場合にアプリケーションサーバおよびHiRDBによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すHiRDBのメッセージKFPA11723-Eが出力されます。
-
実行中のトランザクションはロールバックされます。
-
コネクションはクローズされて,コネクションプールから削除されます。
-
-
ノンブロックモードでのコネクション確立タイムアウト
LAN障害を早く検知するためのタイムアウトです。
HiRDBのクライアント環境変数のPDNBLOCKWAITTIMEに設定します。ここで設定するタイムアウトは,HiRDBサーバとHiRDBクライアントの間のコネクション確立を監視する時間です。
このタイムアウトが発生した場合にアプリケーションサーバおよびHiRDBによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
(2) MySQLのタイムアウト
MySQLのタイムアウトについてはMySQLのマニュアルを参照してください。
(3) Oracleのタイムアウト(ローカルトランザクションの場合)
Oracleでローカルトランザクションを使用している場合は,次のタイムアウトを設定できます。
-
クエリータイムアウトは,JDBCドライバとしてOracle JDBC Thin Driverを使用する場合だけ設定できるタイムアウトです。java.sql.StatementインタフェースのsetQueryTimeoutメソッドを利用してタイムアウトを設定します。Oracle JDBC Thin Driverを使用してOracleに接続する場合の注意事項は,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.6.7 Oracleと接続する場合の前提条件と注意事項」を参照してください。
なお,デッドロックが発生した場合は,OracleのメッセージORA-00060が出力されます。また,アプリケーションサーバによってユーザアプリケーションのビジネスメソッド終了後にコネクションがクローズされ,コネクションプールから削除されます。
(4) Oracleのタイムアウト(グローバルトランザクションの場合)
Oracleでグローバルトランザクションを使用している場合は,次のタイムアウトを設定できます。
-
クエリータイムアウト
クエリータイムアウトについては,「8.6.6(3) Oracleのタイムアウト(ローカルトランザクションの場合)」のクエリータイムアウトの説明を参照してください。
-
ロック解放待ちタイムアウト
デッドロックやリソースの長時間占有を防止するために設定するタイムアウトです。Oracleのサーバ定義のDISTRIBUTED_LOCK_TIMEOUTパラメタに設定します。このタイムアウトが発生した場合にアプリケーションサーバおよびOracleによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すOracleのメッセージORA-02049が出力されます。または,デッドロックが発生したことを示すOracleのメッセージORA-00060が出力されます。
-
ユーザアプリケーションのビジネスメソッド終了後に,コネクションはクローズされ,コネクションプールから削除されます。
なお,実行中のトランザクションはロールバックされません。
-
(5) PostgreSQLのタイムアウト
PostgreSQLのタイムアウトについてはPostgreSQLのマニュアルを参照してください。
(6) SQL Serverのタイムアウト
SQL Serverでは,次の2種類のタイムアウトを設定できます。
-
メモリ取得待ちタイムアウト
SQL実行時のメモリ取得待ち時間を監視するために設定するタイムアウトです。SQL Serverの環境設定オプションのquery waitパラメタに設定します。ここで設定するタイムアウト時間は,SQLの実行に必要なメモリが得られなかったときのメモリ取得待ち時間です。
このタイムアウトが発生した場合にアプリケーションサーバおよびSQL Serverによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すSQL Serverのメッセージ8645が出力されます。
-
実行中のトランザクションはロールバックされます。
-
ユーザアプリケーションプログラムのビジネスメソッドの終了後に,コネクションはクローズされ,コネクションプールから削除されます。
-
-
ロック解放待ちタイムアウト
デッドロックやリソースの長時間占有を防止するために設定するタイムアウトです。SQL ServerのSET LOCK_TIMEOUTステートメントを実行することで設定します。ここで設定するタイムアウト時間は,ロックが解除されるまでの待ち時間です。
このタイムアウトが発生した場合にアプリケーションサーバおよびSQL Serverによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すSQL Serverのメッセージ1222が出力されます。
-
ユーザアプリケーションプログラムのビジネスメソッドの終了後に,コネクションはクローズされ,コネクションプールから削除されます。
また,SQL Serverでデッドロックが発生した場合にアプリケーションサーバおよびSQL Serverによって実行される動作は次のとおりです。
-
ユーザアプリケーションに例外(java.sql.SQLException)が通知されます。
-
デッドロックが発生したことを示すSQL Serverのメッセージ1205が出力されます。
-
実行中のトランザクションはロールバックされます。
-
ユーザアプリケーションプログラムのビジネスメソッドの終了後に,コネクションはクローズされ,コネクションプールから削除されます。
-
(7) XDM/RD E2のタイムアウト
XDM/RD E2では,次の5種類のタイムアウトを設定できます。
-
ロック解放待ちタイムアウト
デッドロックやリソースの長時間占有を防止するために設定するタイムアウトです。XDM/BASEのシステムオプション定義のTIMERパラメタに設定します。ここで設定するタイムアウト時間は,排他待ち時間を監視する最大時間です。排他待ち時間とは,排他要求が待ち状態になってから解除されるまでの時間です。
このタイムアウトが発生した場合に,アプリケーションサーバおよびXDM/RD E2によって実行される動作は次のとおりです。
-
J2EEアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトまたはデッドロックが発生したことを示すXDM/RD E2のメッセージJXZ1911Iが出力されます。
-
実行中のトランザクションはロールバックされます。
-
J2EEアプリケーションのビジネスメソッドの終了後に,コネクションはクローズされ,コネクションプールから削除されます。
また,XDM/RD E2でデッドロックが発生したときの動作は,ロック解放待ちタイムアウトが発生したときと同じになります。
-
-
SQL実行CPU時間タイムアウト
SQL実行時のCPU処理時間を監視するために設定するタイムアウトです。DBコネクションサーバのコントロール空間起動制御文またはサーバ空間起動制御文のSQLCTIMEパラメタに設定します。ここで設定するタイムアウト時間は,一つのSQLを実行したときのCPU処理時間を監視する最大時間です。長時間SQLの時間を監視する場合などに指定します。
このタイムアウトが発生した場合にアプリケーションサーバおよびXDM/RD E2によって実行される動作は次のとおりです。
-
J2EEアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すメッセージが出力されます。メッセージは,DBコネクションサーバのコントロール空間起動制御文に指定したVPARTOPTIONパラメタの指定値によって変わります。指定を省略するかERROR NORMALを指定した場合には,HiRDBクライアントのメッセージKFPA11723-Eが出力されます。それ以外の値を指定した場合には,XDM/RD E2のメッセージJXZ1874Iが出力されます。
-
実行中のトランザクションはロールバックされます。
-
VPARTOPTIONパラメタの指定を省略するかERROR NORMALを指定した場合には,コネクションはクローズされ,コネクションプールから削除されます。それ以外の値を指定した場合には,タイムアウト発生後の初回のデータベースアクセス時,またはJ2EEアプリケーションのビジネスメソッドの終了後に,コネクションはクローズされ,コネクションプールから削除されます。
-
-
SQL実行経過時間タイムアウト
SQL実行時の経過時間を監視するために設定するタイムアウトです。DBコネクションサーバのコントロール空間起動制御文またはサーバ空間起動制御文のSQLETIMEパラメタに設定します。ここで設定するタイムアウト時間は,一つのSQLを実行したときの経過時間を監視する最大時間です。長時間SQLの時間を監視する場合などに指定します。
このタイムアウトが発生した場合にアプリケーションサーバおよびXDM/RD E2によって実行される動作は次のとおりです。
-
J2EEアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すメッセージが出力されます。メッセージは,DBコネクションサーバのコントロール空間起動制御文に指定したVPARTOPTIONパラメタの指定値によって変わります。指定を省略するか,ERROR NORMALまたはERROR SQLCTIMEを指定した場合には,HiRDBクライアントのメッセージKFPA11723-Eが出力されます。それ以外の値を指定した場合には,XDM/RD E2のメッセージJXZ1874Iが出力されます。
-
実行中のトランザクションはロールバックされます。
-
VPARTOPTIONパラメタの指定を省略するか,ERROR NORMALまたはERROR SQLCTIMEを指定した場合には,コネクションはクローズされ,コネクションプールから削除されます。それ以外の値を指定した場合には,タイムアウト発生後の初回のデータベースアクセス時,またはJ2EEアプリケーションのビジネスメソッドの終了後に,コネクションはクローズされ,コネクションプールから削除されます。
-
-
トランザクション経過時間タイムアウト
トランザクションの開始時点からの経過時間を監視するために設定するタイムアウトです。DBコネクションサーバのコントロール空間起動制御文またはサーバ空間起動制御文のSVETIMEパラメタに設定します。ここで設定するタイムアウト時間は,トランザクションの経過時間を監視する最大時間です。
このタイムアウトが発生した場合にアプリケーションサーバおよびXDM/RD E2によって実行される動作は次のとおりです。なお,タイムアウトが発生したときにSQLを実行していた場合には,その時点で実行されます。SQLを実行していなかった場合には,タイムアウト発生後のSQL実行時に実行されます。
-
J2EEアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すメッセージが出力されます。メッセージは,DBコネクションサーバのコントロール空間起動制御文に指定したVPARTOPTIONパラメタの指定値によって変わります。指定を省略するか,ERROR NORMALまたはERROR SQLCTIMEを指定した場合には,HiRDBクライアントのメッセージKFPA11723-Eが出力されます。それ以外の値を指定した場合には,XDM/RD E2のメッセージJXZ1874Iが出力されます。
-
実行中のトランザクションはロールバックされます。
-
VPARTOPTIONパラメタの指定を省略するか,ERROR NORMALまたはERROR SQLCTIMEを指定した場合には,コネクションはクローズされ,コネクションプールから削除されます。それ以外の値を指定した場合には,タイムアウト発生後の初回のデータベースアクセス時,またはJ2EEアプリケーションのビジネスメソッドの終了後に,コネクションはクローズされ,コネクションプールから削除されます。
-
-
レスポンスタイムアウト
データベースシステムのサーバ側の障害を検知するためのタイムアウトです。
HiRDBのクライアント環境変数のPDCWAITTIMEに設定します。ここで設定するタイムアウト時間は,HiRDBクライアントからXDM/RD E2サーバに要求をしてから,応答が戻ってくるまでのHiRDBクライアントの最大待ち時間です。長時間SQLの時間を監視する場合などに指定します。
このタイムアウトが発生した場合にアプリケーションサーバおよびHiRDBによって実行される動作は次のとおりです。
-
J2EEアプリケーションに例外(java.sql.SQLException)が通知されます。
-
タイムアウトが発生したことを示すHiRDBクライアントのメッセージKFPA11732-Eが出力されます。
-
実行中のトランザクションはロールバックされます。
-
コネクションはクローズされて,コネクションプールから削除されます。
-
(8) データベースへのアクセスでタイムアウトまたはデッドロックが発生した場合のユーザアプリケーションの処理
ユーザアプリケーションでデータベースのタイムアウトまたはデッドロックによる例外が発生した場合には,実行中のトランザクションをロールバックして,ビジネスメソッドの処理を中止してください。また,必要に応じてこの項で説明したタイムアウトパラメタを見直してください。