ロックの粒度と階層

Microsoft SQL Server データベース エンジン では、複数粒度のロックがサポートされており、種類の異なるリソースをトランザクションでロックできます。データベース エンジン により、タスクに適したレベルでリソースが自動的にロックされるので、最小限のコストでロックされます。ロックの粒度を細かくすると (行単位など)、同時実行性が高くなります。ただし、多くの行をロックすると、ロック数が増えるのでオーバーヘッドが増大します。ロックの粒度を粗くすると (テーブル単位など)、テーブル全体がロックされるので、他のトランザクションがそのテーブルにアクセスできなくなります。このため、同時実行性が低下します。ただし、ロック数が減るので、オーバーヘッドは減少します。

データベース エンジン ではリソースを完全に保護するために、多くの場合、レベルの異なる粒度でロックを取得する必要が生じます。この複数レベルの粒度でのロックのグループを、ロック階層と呼びます。たとえば、データベース エンジン のインスタンスは、インデックスの読み取りを完全に保護するために、行の共有ロックと、ページやテーブルのインテント共有ロックを取得しなければならない場合があります。

次の表に、データベース エンジン がロックできるリソースを示します。

リソース 説明

RID

ヒープ内の 1 行をロックするのに使用される行識別子。

KEY

シリアル化可能なトランザクションのキー範囲の保護に使用されるインデックス内の行ロック。

PAGE

データ ページやインデックス ページなど、データベース内の 8 KB のページ。

EXTENT

データ ページやインデックス ページなど、連続した 8 ページのグループ。

HOBT

ヒープまたは B ツリー。インデックス、またはクラスタ化インデックスのないテーブルのデータ ページのヒープを保護するロックです。

TABLE

すべてのデータとインデックスを含むテーブル全体。

FILE

データベース ファイル。

APPLICATION

アプリケーションにより指定されたリソース。

METADATA

メタデータのロック。

ALLOCATION_UNIT

アロケーション ユニット。

DATABASE

データベース全体。

参照

概念

ロック モード
ロックの互換性 (データベース エンジン)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手