・接続時
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