並行性制御によるパフォーマンスの向上
並行性制御は、アプリケーションの分離レベル と現行データ のオプションに従って、相互に同じデータにアクセスする異なるアプリケーションをどれほど分離させるかを決定します。 分離が大きすぎると、競合が発生する場合があります。一方、分離が小さすぎると、現行ではないデータがアプリケーションに返される場合があります。
アプリケーションの ISOLATION オプション は、並行的に実行される他処理による考え得る影響から、自処理をどの程度分離するかを指定します。 ISOLATIONオプションは、 Db2 が行またはページのSロックおよびUロックをいつ解放できるかを指定します。 指定した分離レベルに関わらず、 Db2 オブジェクトに対する未解決のクレームは、 Db2 ユーティリティまたはコマンドの実行を妨げる可能性があります。
アプリケーションの CURRENTDATA オプションでは、ISOLATION(CS) オプションの使用時に、データの現行性が読み取り専用と未確定のどちらのカーソルに必要かを指定します。 このオプションは、複数のアプリケーションが同じデータに並行してアクセスする機能を向上させるトレードオフとして、最新でないデータがアプリケーションに返される可能性があるというリスクがあります。
基本的には、ほとんどのアプリケーションは、ISOLATION(CS) および CURRENTDATA(NO) オプションを指定してバインドすることが推奨されています。 ISOLATION(CS) は通常、 Db2 が取得したロックをできるだけ早く解放できるようにします。 CURRENTDATA(NO) を指定すると、通常、 Db2 がロックを最も少なく取得できるようになり、 ロックの回避が改善されます。
Db2 は以下の分離レベルを提供します:
- カーソル固定(CS)
- ISOLATION (CS) またはカーソル安定性オプションは、データ整合性を維持しながら最大限の同時実行を可能にします。 ISOLATION (CS) オプションの下では、トランザクションは、コミットされていない変更と、そのカーソルのそれぞれの現在行に対するロックのみを保持します。
- 非コミット読み取り(UR)
- ISOLATION (UR) または非コミット読み取りオプションは、ロックをほとんど取得せずにアプリケーションが読み取りを行うことを可能にしますが、コミットされていないデータを読み取るリスクがあります。 UR 分離は、読み取り専用の結果表からの SELECT、SELECT INTO、または FETCH に対してのみ適用されます。
- 読み取り固定(RS)
- ISOLATION (RS) または読み取り安定性のオプションにより、アプリケーションは同じページまたは行を複数回読み取ることができ、他のプロセスによる該当する行の更新や削除を防止することができます。 ただし、他のアプリケーションは、元のアプリケーションの検索条件を満たしていない行を挿入または更新することができます。
- 反復可能読み取り(RR)
- ISOLATION (RR) または繰り返し読み取りオプションにより、他のプロセスによる更新、挿入、削除操作を許可することなく、アプリケーションが同じページまたは行を複数回読み取ることが可能になります。 つまり、述部でそう指定されていない場合であっても、アクセスされた行やページはすべて ロックされます。 ISOLATION (RR) オプションでは、あるアプリケーションが参照するデータは、そのアプリケーションがコミット・ポイントに到達するまでは他のどのアプリケーションからも更新できません。
Db2 は、データ保全性の要件があるため、ロックに依存しています。 ただし、ロックは競合に関する問題 (デッドロック、タイムアウト、および処理中断) の原因となることがあります。 このような問題の最小化と処理並行性の促進のために、データベース設計者とアプリケーション設計者は種々のアクションを取ることができます。