2022年09月06日

[WebSphere][DB2] SQLのタイムアウトについて

せっかく調べたので、備忘録。

・接続時
 ConnectionPoolの接続タイムアウト(WAS)
 loginTimeout (JDBCプロパティ)

 両方設定されている場合、ConnectionPool設定 が上書きする。

・照会時
 
(1)Statement/PreparedStatement/CallableStatement に対する setQueryTimeout
(2)WebSphere データ・ソースの webSphereDefaultQueryTimeout カスタム・プロパティー
(3)Jcc ドライバーの commandTimeout カスタム・プロパティー

(1)>(2)>(3) の順番で上書きされる。(1)1,(2)2、(3)3の場合、1秒ということ。
ユーザーコードが一番つよい

(2)については、syncQueryTimeoutWithTransactionTimeoutがtrueの時は JTA トランザクションにおける残り時間
で上書きされる。(XAの時だけ、通常時は関係ない)

発砲時のSQLCODEはJDBCドライバのqueryTimeoutInterruptProcessingModeにて変わる。
zの場合は-30108
queryTimeoutInterruptProcessingMode 値が INTERRUPT_PROCESSING_MODE_STATEMENT_CANCEL (1) の場合、-952 が返されます。
queryTimeoutInterruptProcessingMode 値が INTERRUPT_PROCESSING_MODE_CLOSE_SOCKET (2) の場合、-30108 が返されます。

(参考)
https://www.ibm.com/docs/ja/db2-for-zos/11?topic=pdsdjs-common-data-server-driver-jdbc-sqlj-properties-all-database-products

 timerLevelForQueryTimeOut がQUERYTIMEOUT_DISABLED (-1) に設定されていると機能しない。
 タイマーがたくさん作られてしまい、JVMのパフォーマンス劣化したときの奥の手だが
 Connection.isValid とかも使えんくなる。ダメじゃん。

 参考
 https://www.ibm.com/support/pages/db2-jcc-%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%AE%E7%85%A7%E4%BC%9A%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E7%94%A8-timer-%E3%81%8C%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AB%E4%B8%8E%E3%81%88%E3%82%8B%E5%BD%B1%E9%9F%BF

・通信時

 (1)keepAliveTimeOut(TYPE4)
 (2)DB2TCP_CLIENT_KEEPALIVE_TIMEOUT/DB2TCP_SERVER_KEEPALIVE_TIMEOUT (DB2レジストリ変数)
 (3)tcp_keepidle/tcp_keepintvl/tcp_keepcnt(OSのTCPkeepalive、これはAIXのパラメータ)

これは(3)が(1)or(2)で上書きされる。しておかないとすっげぇ待つよ。(2時間とか)
 

・通信時(TCPは正常でDBがなかなか応答かえしてくれない時)

 blockingReadConnectionTimeout(TYPE4)
 DB2TCP_CLIENT_RCVTIMEOUT(TYPE2、DB2レジストリ変数)


困ったときはこのtechnote
https://www.ibm.com/support/pages/db2-jdbc%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC-%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E9%96%A2%E9%80%A3%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BFdm-14-004


posted by koteitan at 11:41| Comment(0) | TrackBack(0) | 情報処理 | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。