ロック待機の回避による並行性の改善
並行アクセス解決レゾリューション・オプションは、データベース・マネージャーに、特定の分離レベルでレコード・ロック競合の事例を処理する方法を指示します。
並行アクセス解決レゾリューションは、適用可能な場合に、以下のいずれかの値を持ちます。
- 結果を待つ (デフォルト)。 この値は、データベース・マネージャーに、更新または削除の処理中のロック・データを検出したとき、コミットまたはロールバックを待機するように指示します。 挿入処理中のロックされた行はスキップされません。 このオプションは、「なし」または「非コミット読み取り」の分離レベルで実行されている読み取り専用の照会には適用されません。
- 現在コミットされたものを使用する。 この値では、データベース・マネージャーは、更新中または削除中のロックされたデータを検出するとき、現在コミットされているバージョンのデータを読み取り専用の照会に使用できます。 挿入の処理中のロックされた行は、スキップできます。 このオプションは、有効な分離レベルがカーソル固定であるときに可能であれば適用され、その他の場合には無視されます。
- ロックされたデータをスキップする。 この値は、データベース・マネージャーに、レコード・ロックが競合する場合に行をスキップするように指示します。 このオプションを適用できるのは、照会が「カーソル固定」または「読み取り固定」の分離レベルで実行している場合、 および追加で分離レベルが「なし」または「非コミット読み取り」のときの UPDATE および DELETE 照会の場合だけです。
並行アクセス解決レゾリューション値の USE CURRENTLY COMMITTED および SKIP LOCKED DATA を使用して、ロック待機を回避することにより、並行性を改善できます。 ただし、これらのオプションを使用すると、アプリケーションの機能に影響を与えることがあるので注意が必要です。 USE CURRENTLY COMMITTED オプションについて詳しくは、『並行性』を参照してください。
WAIT FOR OUTCOME、USE CURRENTLY COMMITTED、および SKIP LOCKED DATA は、PREPARE ステートメントの属性ストリングに concurrent-access-resolution-clause として指定できます。
さらに、SELECT ステートメント、SELECT INTO、検索 UPDATE、または検索 DELETE ステートメントのステートメント・レベルで、concurrent-access-resolution-clause として指定できます。
並行アクセス解決レゾリューションは、CONACC パラメーターを CRTSQLxxx で使用することにより、プリコンパイラー・オプションとしても指定できます。CONACC パラメーターは、以下のいずれかの値を受け入れます。
- *DFT - 並行アクセス・オプションがこのプログラムに対して明示的に設定されていないことを示します。 プログラムの起動時に有効な値が使用されます。 値は、照会オプション・ファイル QAQQINI で SQL_CONCURRENT_ACCESS_RESOLUTION オプションを使用して設定できます。
- *CURCMT - 現在コミットされたものを使用します。
- *WAIT - 出力を待ちます。
これらの同じオプションを RUNSQLSTM コマンドおよび RUNSQL CL コマンドで、そして SET OPTION SQL ステートメントを使用して設定できます。SET OPTION ステートメントを使用して、SQL トリガー、関数、およびプロシージャーに対して並行アクセス・レゾリューションを指定できます。
並行アクセス解決レゾリューション・オプションがアプリケーションによって直接設定されないとき、それは照会オプション・ファイル QAQQINI 内の SQL_CONCURRENT_ACCESS_RESOLUTION オプションの値に設定されます。 このオプションは、以下のいずれかの値を受け入れます。
- *DEFAULT - デフォルト値は、*WAIT に設定されます。
- *CURCMT - 現在コミットされたものを使用します。
- *WAIT - 出力を待ちます。