不完全な結果を許容するアプリケーションの並行性の改善

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 が、ロック回避を通じて、ロックされているデータが既にコミット済みであることを確認した場合、ロックされているデータはスキップされません。代わりに、ロックを待つことなく、データは返されます。

重要: DB2 が SKIP LOCKED DATA オプションによってデータをスキップした場合、警告は発行されません。 本来ならスキップせずに照会を満たすデータ全体に対して、戻されたり変更されたのがそのほんの一部だけでも、トランザクションはデータのスキップがなかったように終了します。 アプリケーションの要件および要望がこの動作に一致する場合に限り、SKIP LOCKED データ・オプションを使用してください。

手順

結果を早急に必要とし、不完全な結果を許容できるアプリケーションの並行性を改善するには

次のいずれかの SQL ステートメントに SKIP LOCKED DATA 文節を指定します。
  • SELECT
  • SELECT INTO
  • PREPARE
  • Searched-UPDATE
  • Searched-DELETE
SKIP LOCKED DATA オプションは UNLOAD ユーティリティーでも使用できます。 SKIP LOCKED DATA オプションを使用するトランザクションのロック・モードの互換性は、SKIP LOCKED DATA オプションを使用するトランザクションが、ロックが解放されるのを待たず、代わりにロックされているデータをスキップすることを除いて、その他のページ・レベルのロックおよび行レベル・ロックのロック・モードの互換性と同じです。

行レベルのロッキングが設定された表スペースに表 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 は、ロック回避またはその他の手法を使用して、特定のロックを取得するのを回避する場合があります。

プログラム固有のプログラミング・インターフェース情報の終了