10

以下は、SQL Server 2000 がサポートする予定のロックの一覧です。「インテント」ロックが実際に何を意味するのか、少し混乱しています。私は Web を見回しましたが、答えは少しわかりにくいようです。

私の特定の質問への回答を得ることに加えて、この質問を Wiki として使用して、各ロックが何を意味し、どのような状況でそのタイプのロックが取得されるかを調べたいと考えています。

  • 共有 (S)
    • 更新 (U)
    • 排他的 (X)
    • 意図
      • インテント シェアード (IS)
      • インテント エクスクルーシブ (IX)
      • 意図的排他的共有 (SIX)
      • インテント更新 (IU)
      • インテントの排他的更新 (UIX)
      • 共有意図更新 (SIU)
    • スキーマ
      • スキーマ変更 (Sch-M)
      • スキーマの安定性 (Sch-S)
    • 一括更新 (BU)
    • キー範囲
      • 共有キー範囲と共有リソース ロック (RangeS_S)
      • 共有キー範囲と更新リソース ロック (RangeS_U)
      • Key-Range と Null Resource ロックを挿入 (RangeI_N)
      • 排他的キー範囲と排他的リソース ロック (RangeX_X)
      • 変換ロック (RangeI_S、RangeI_U、RangeI_X、RangeX_S、RangeX_U)
4

3 に答える 3

12

SQL サーバーのMSDN ページには、合理的な説明があります。

インテント ロックは、SQL Server が共有 (S) ロックまたは排他 (X) ロックを階層内の下位のリソースの一部で取得しようとしていることを示します。たとえば、テーブル レベルで配置された共有インテント ロックは、トランザクションがそのテーブル内のページまたは行に共有 (S) ロックを配置しようとしていることを意味します。テーブル レベルでインテント ロックを設定すると、別のトランザクションが、そのページを含むテーブルで排他 (X) ロックを取得するのを防ぐことができます。SQL Server はテーブル レベルでのみインテント ロックを調べ、トランザクションがそのテーブルのロックを安全に取得できるかどうかを判断するため、インテント ロックによってパフォーマンスが向上します。これにより、トランザクションがテーブル全体をロックできるかどうかを判断するために、テーブルのすべての行ロックまたはページ ロックを調べる必要がなくなります。

于 2008-09-19T13:10:30.930 に答える
6

インテントロックはテーブルレベルに配置され、トランザクションがテーブルの一部の行に適切なロックを配置することを示します。

これにより、テーブルレベルでロックを設定する必要があるトランザクションの競合チェックが高速化されます。たとえば、テーブルの排他ロックを必要とするトランザクションは、共有ロックのすべての行(またはページ)を調べる代わりに、テーブルレベルで競合を検出できます(「インテント共有」ロックがあります)。

于 2008-09-19T10:49:53.240 に答える