ロックおよび並行性の制御

並行性制御を提供し、制御されていないデータへのアクセスを回避するために、データベース・マネージャーは、バッファー・プール、表、データ・パーティション、表ブロック、または表の行をロックします。

ロック は、 データベース・マネージャー・リソースを lock owner というアプリケーションに関連付け、 そのリソースへの他のアプリケーションからのアクセス方法を制御する手法です。

データベース・マネージャーは、以下に基づいて行レベルのロッキングおよび表レベルのロッキングを適宜使用します。
  • プリコンパイル時、またはアプリケーションがデータベースにバインドされるときに指定される分離レベル。 分離レベルは以下のいずれかです。
    • 非コミット読み取り (UR)
    • カーソル固定 (CS)
    • 読み取り固定 (RS)
    • 反復可能読み取り (RR)
    これらの異なる分離レベルは、非コミット・データへのアクセス、更新消失の防止、 データの反復不能読み取りの許可、および幻像読み取りの防止を制御するために使用されます。 パフォーマンスの影響を最小化するには、ご使用のアプリケーションが必要とする最低の分離レベルを使用してください。
  • オプティマイザーにより選択されるアクセス・プラン。 表スキャン、索引スキャン、および他のデータ・アクセス方式のそれぞれについて、 異なるタイプのデータ・アクセスが必要です。
  • 表の LOCKSIZE 属性。 ALTER TABLE ステートメントの LOCKSIZE 節で、表にアクセスする際に使用するロックの細分性を示します。 ROW (行ロックの場合)、TABLE (表ロックの場合)、または BLOCKINSERT (マルチディメンション・クラスタリング (MDC) 表のみのブロック・ロックの場合) を選択できます。 MDC 表で BLOCKINSERT 節が使用される場合、挿入操作中 (ブロック・レベルのロックが行われる) を除いて、行レベルのロックが実行されます。 ALTER TABLE...LOCKSIZE BLOCKINSERT ステートメントを使用するのは、トランザクションによって、MDC 表の結合されていないセルへの大規模な挿入を実行する場合です。 ALTER TABLE...LOCKSIZE TABLE ステートメントを使用するのは、読み取り専用表の場合です。 これにより、データベース・アクティビティーで必要なロックの数が減ります。 パーティション表では、表ロックがまず獲得され、次にアクセスされたデータの命令に従ってデータ・パーティション・ロックが獲得されます。
  • ロック専用のメモリーの量。locklist データベース構成パラメーターで制御します。 ロック・リストが満杯になると、ロック・エスカレーションが発生して、データベース内の共有オブジェクトの間の並行性が低くなるために、パフォーマンスが低下する可能性があります。 ロック・エスカレーションが頻発する場合は、locklistmaxlocks のいずれかまたは両方の値を増やしてください。 同時に保持されるロックの数を減らすには、頻繁にトランザクションがコミットされるようにします。

バッファー・プールの作成、変更、またはドロップ時には、バッファー・プールのロック (排他) が設定されます。 システムがモニターするデータの収集時にこのタイプのロックを検出することがあります。 ロックの名前は、バッファー・プールそのものの識別子 (ID) です。

通常、以下のいずれかに該当する場合以外は、行レベルのロッキングが使用されます。
  • 分離レベルが非コミット読み取りの場合
  • 分離レベルが反復可能読み取りで、アクセス・プランに、索引の範囲述部なしのスキャンが必要な場合
  • 表の LOCKSIZE 属性が TABLE である場合
  • ロック・リストが満杯で、ロック・エスカレーションが発生している場合
  • LOCK TABLE ステートメントを介して明示的な表ロックが獲得された場合。このステートメントを使用すると、同時アプリケーション・プロセスによる表の変更や使用ができなくなります。
MDC 表の場合には、以下のときは行レベルのロックの代わりにブロック・レベルのロックが使用されます。
  • 表の LOCKSIZE 属性が BLOCKINSERT である場合
  • 分離レベルが反復可能読み取りで、アクセス・プランに述部が関係する場合
  • 検索条件付き UPDATE または DELETE 操作にディメンション列の述部のみが関係する場合
行ロッキングの期間は、使用されている分離レベルによって異なります。
  • UR スキャン。 行データが変更されていない限り行ロックは保持されません。
  • CS スキャン。一般的にカーソルが行に位置している場合にのみ行ロックが保持されます。 ある場合には、CS スキャン中にロックが全く保持されない可能性があることに注意してください。
  • RS スキャン。トランザクション中、適格となる行ロックのみ保持されます。
  • RR スキャン。 トランザクションの間、すべての行ロックが保持されます。