不完全な結果を許容するアプリケーションの並行性の改善
SKIP LOCKED DATA オプションを使用すると、ロックされている行をスキップして、 不完全な結果も許容できるアプリケーションおよびトランザクションの並行性を向上させることができます。
始める前に
- カーソル固定 (CS)
- 読み取り固定 (RS)
非コミット読み取り (UR) 分離レベルまたは反復可能読み取り (RR) 分離レベルを使用するアプリケーションでは、SKIP LOCKED DATA 節は無視されます。
このタスクについて
SKIP LOCKED DATA オプションを使用すると、他のトランザクションの非互換のロックによりトランザクションの進行が妨げられる場合、それらのロックが行われている行をスキップできます。SKIP LOCKED DATA オプションはこのような行をスキップするので、ロック待ち時間が解消され、パフォーマンスが向上するアプリケーションもあります。 ただし、SKIP LOCKED DATA オプションの使用は、戻されるデータにスキップした行が含まれていなくても許容できる妥当な根拠を持つアプリケーションに限る必要があります。トランザクションに SKIP LOCKED DATA オプションを使用すると、 トランザクションはロックによって保持されているデータを、読み取ったり変更したりしません。
ただし、アプリケーションで、ロックされているすべてのデータをスキップする必要がある場合、DB2® に依存することはできません。DB2 は、ロックされているデータのうち、SKIP LOCKED DATA オプションを使用するトランザクションの進行をブロックするデータのみスキップします。DB2 が、ロック回避を通じて、ロックされているデータが既にコミット済みであることを確認した場合、ロックされているデータはスキップされません。代わりに、ロックを待つことなく、データは返されます。
手順
結果を早急に必要とし、不完全な結果を許容できるアプリケーションの並行性を改善するには
- SELECT
- SELECT INTO
- PREPARE
- Searched-UPDATE
- Searched-DELETE
例
行レベルのロッキングが設定された表スペースに表 WORKQUEUE が存在し、その定義の一部として ELEMENT 列、PRIORITY 列、および STATUS 列に以下の値が含まれているとします。
ELEMENT PRIORITY STATUS
1 1 OPEN
2 1 OPEN
3 3 OPEN
4 1 IN-ANALYSIS
トランザクションが ELEMENT 1 に対して UPDATE を発行して、その STATUS を OPEN から IN-ANALYSIS に変更し、UPDATE がまだコミットされていないとします。
UPDATE WORKQUEUE
SET STATUS = 'IN-ANALYSIS'
WHERE ELEMENT = 1;
2 番目のトランザクションが、以下の SELECT ステートメントを発行して、最も高い優先順位の作業項目を検索するとします。
SELECT ELEMENT FROM WORKQUEUE
WHERE PRIORITY = '1' AND STATUS='OPEN'
SKIP LOCKED DATA;
この照会では、ELEMENT=1 の値を格納する行に対するロックを保持するトランザクションがその操作をコミットまたはロールバックするのを待たずに、ELEMENT=2 の値を格納する行を見つけます。
ただし、DB2 がこのデータを常にスキップすると予期することはできません。例えば、DB2 は、ロック回避またはその他の手法を使用して、特定のロックを取得するのを回避する場合があります。