10

下面是 SQL Server 2000 支持的锁列表。我对“意图”锁的实际含义有点困惑。我在网上四处张望,答案似乎有点神秘。

除了获得对我的具体问题的答案之外,我希望将此问题用作 Wiki,以了解每个锁的含义以及在什么情况下将获取该类型的锁。

  • 共享 (S)
    • 更新(U)
    • 独家 (X)
    • 意图
      • 意图共享 (IS)
      • 意向排他 (IX)
      • 与意图独占共享(六)
      • 意图更新 (IU)
      • 更新意图独占 (UIX)
      • 共享意图更新 (SIU)
    • 架构
      • 模式修改 (Sch-M)
      • 模式稳定性 (Sch-S)
    • 批量更新 (BU)
    • 键程
      • 共享密钥范围和共享资源锁 (RangeS_S)
      • 共享密钥范围和更新资源锁 (RangeS_U)
      • 插入键范围和空资源锁 (RangeI_N)
      • 独占键范围和独占资源锁 (RangeX_X)
      • 转换锁(RangeI_S、RangeI_U、RangeI_X、RangeX_S、RangeX_U)
4

3 回答 3

12

SQL server MSDN 页面有一个合理的解释:

意向锁表示 SQL Server 想要在层次结构中较低的某些资源上获取共享 (S) 锁或排他 (X) 锁。例如,放置在表级别的共享意图锁意味着事务打算在该表中的页或行上放置共享 (S) 锁。在表级别设置意向锁可防止另一个事务随后在包含该页的表上获取排他 (X) 锁。意向锁提高了性能,因为 SQL Server 仅在表级别检查意向锁以确定事务是否可以安全地获取该表上的锁。这消除了检查表上的每一行或每页锁定以确定事务是否可以锁定整个表的要求。

于 2008-09-19T13:10:30.930 回答
6

意向锁放置在表级别,并指示事务将在表中的某些行上放置适当的锁。

这加快了对需要在表级别放置锁的事务的冲突检查。例如,需要在表上独占锁的事务可以检测表级别的冲突(“意图共享”锁将在那里),而不必检查所有行(或页)的共享锁。

于 2008-09-19T10:49:53.240 回答
1

Intent 锁的另一个重要特性是您不会从代码中显式放置它们,当您放置非意图锁时会隐式请求它们。

于 2014-09-12T11:02:32.153 回答