Question & Answer
Question
アプリケーションから SQL ステートメントを実行すると、SQL0952N で失敗することがあります。 原因と対処方法を教えてください。
Answer
多くの場合、SQL0952N はアプリケーションが設定した照会タイムアウトを超過したために、アプリケーションがキャンセル要求を発行した結果です。
このため、SQL0952N を回避するには、次の 2 つのアプローチがあります。
この文書では、双方のアプローチの具体的な手法を案内します。
a) 照会タイムアウトの延長もしくは無効化
照会タイムアウトは各アプリケーション・インターフェースによって設定方法が異なります。
お使いのアプリケーションのインターフェースに応じて設定を変更もしくは無効化してください。
設定方法が複数記述されているものは、上位のものほど優先されます。
a-1) Java
a-2) CLI
a-3) 組み込み SQL (*.sqc/*.sqb)
a-4) ADO
a-5) .NET (IBM.Data.DB2 を使用)
注: 他のデータ・プロバイダーを使う .NET アプリケーションは、そのプロバイダーの動作に準拠します。
注: ADO などを含め、CLI インターフェースを利用したアプリケーションの場合、CLI 構成ファイルの QueryTimeoutInterval で照会タイムアウトの検出間隔を調整できます。
QueryTimeoutInterval を 0 にすると、タイムアウトを検出しなくなり、アプリケーションの設定は無視されます。
なお、QueryTimeoutInterval のデフォルトは以下の通りです。
V9.5、V9.7 FP5 以前、V10.1 FP0: 5 秒
V9.7 FP6 以降、V10.1 FP1 以降: 1 秒
b) SQL ステートメントのパフォーマンスを調整
SQL ステートメントが照会タイムアウトまでに完了しない原因として、以下のケースが考えられます。
b-1) SQL 自体が遅い
b-2) ロック待機
運用上の考慮点
パスポート・アドバンテージによく寄せられる質問
SQL0952N
QueryTimeout IBM Data Server Driver 構成キーワード
QueryTimeoutInterval CLI/ODBC 構成キーワード
db2cli.ini 初期設定ファイル
ステートメント属性 (CLI) のリスト
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
このため、SQL0952N を回避するには、次の 2 つのアプローチがあります。
- 照会タイムアウトを延長する、もしくは無効化する
- 照会タイムアウトを超過するステートメントのパフォーマンスを調整する
この文書では、双方のアプローチの具体的な手法を案内します。
a) 照会タイムアウトの延長もしくは無効化
照会タイムアウトは各アプリケーション・インターフェースによって設定方法が異なります。
お使いのアプリケーションのインターフェースに応じて設定を変更もしくは無効化してください。
設定方法が複数記述されているものは、上位のものほど優先されます。
a-1) Java
- java.sql.Statement の setQueryTimeout メソッド
デフォルト 0 (タイムアウトなし)
- 例
String sql = "SELECT C2 FROM T1 WHERE C1=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setQueryTimeout(10); - Jcc ドライバーの commandTimeout プロパティ
- (WebSphere Application Server を使っている場合)
WAS データソースの webSphereDefaultQueryTimeout
a-2) CLI
- ステートメントの SQL_ATTR_QUERY_TIMEOUT 属性
デフォルト 0 (タイムアウトなし) - db2dsdriver.cfg の QueryTimeout (v9.7fp6 以降)
a-3) 組み込み SQL (*.sqc/*.sqb)
- db2dsdriver.cfg の QueryTimeout (v10.1fp2 以降)
a-4) ADO
- Connection または Command オブジェクトの CommandTimeout プロパティ
デフォルト 30 秒 - 例
Set Cmd = CreateObject("ADODB.Command")
Cmd.CommandTimeout = 10
a-5) .NET (IBM.Data.DB2 を使用)
注: 他のデータ・プロバイダーを使う .NET アプリケーションは、そのプロバイダーの動作に準拠します。
- DB2Command の CommandTimeout プロパティ
デフォルト 30 秒 - DB2ConnectionStringBuilder クラスの QueryTimeout プロパティ (v9.7fp2 以降)
- DB2Connection.ConnectionString プロパティに含まれる QueryTimeout
- db2dsdriver.cfg の QueryTimeout (v9.7fp2 以降)
注: ADO などを含め、CLI インターフェースを利用したアプリケーションの場合、CLI 構成ファイルの QueryTimeoutInterval で照会タイムアウトの検出間隔を調整できます。
QueryTimeoutInterval を 0 にすると、タイムアウトを検出しなくなり、アプリケーションの設定は無視されます。
なお、QueryTimeoutInterval のデフォルトは以下の通りです。
V9.5、V9.7 FP5 以前、V10.1 FP0: 5 秒
V9.7 FP6 以降、V10.1 FP1 以降: 1 秒
b) SQL ステートメントのパフォーマンスを調整
SQL ステートメントが照会タイムアウトまでに完了しない原因として、以下のケースが考えられます。
b-1) SQL 自体が遅い
- SQL0952N で失敗する SQL を特定し、RUNSTATS コマンドで SQL が参照している表の統計情報を更新します。
統計を更新しても SQL が期待通りの時間で完了しない場合、マニュアルを参照してパフォーマンスを調整してください。
パフォーマンスの概要
b-2) ロック待機
- ロック・タイムアウト (LOCKTIMEOUT) が照会タイムアウトより長く設定されている場合、ロック待機の結果として照会タイムアウトが返ることがあります。
ロック待機が発生しているかどうかは、ロック・イベントモニターを利用して判別できます。
[Db2] ロック・イベント・モニターの設定方法
[Db2] ロック・イベント・モニターで取得した情報のフォーマット方法
[Db2] ロック・イベント・モニターで取得した情報の見方 (ロック待機イベント)
運用上の考慮点
- 照会タイムアウトの有効範囲
照会タイムアウトは、SELECT ステートメントだけでなく、UPDATE/INSERT/DELETE ステートメントなどにも有効です。
SELECT の場合、カーソルのオープンでは照会タイムアウトが有効ですが、個々のレコードのフェッチでは必ずしも照会タイムアウトは有効になりません。 - 組み込み SQL アプリケーション
V10.1 FP1 以前のクライアントでは組み込み SQL には照会タイムアウトを設定できません。
このケースで組み込み SQL から SQL0952N が返った場合は、SQL 実行中に Ctrl+C などによって割り込みが送られた可能性があります。
例えば、組み込み SQL アプリケーションであるコマンド行プロセッサー (CLP) で、ロック待機中に Ctrl+C を入力すると、ロック待機しているステートメントは SQL0952N で終了します。
パスポート・アドバンテージによく寄せられる質問
SQL0952N
QueryTimeout IBM Data Server Driver 構成キーワード
QueryTimeoutInterval CLI/ODBC 構成キーワード
db2cli.ini 初期設定ファイル
ステートメント属性 (CLI) のリスト
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PkdAAE","label":"Connectivity"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"10.1.0;10.5.0;11.1.0;11.5.0;9.7.0","Line of Business":{"code":"LOB10","label":"Data and AI"}}]
Was this topic helpful?
Document Information
Modified date:
23 August 2023
UID
swg21632578