SQL Server 锁定解释

11

以下是 SQL Server 2000 所支持的锁列表。我有点不明白“意向”锁实际上是什么意思。我在网上搜了一下,答案似乎有点晦涩难懂。

除了得到我特定问题的答案外,我希望将这个问题用作 Wiki,记录每种锁的含义和获得该类型锁的情况。

  • 共享锁(S)
    • 更新锁(U)
    • 排它锁(X)
    • 意向锁
      • 意向共享锁(IS)
      • 意向排它锁(IX)
      • 共享-意向排它锁(SIX)
      • 意向更新锁(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)

这种类型的问题不应该是社区所有吗?我的意思是,因为回答起来需要很多工作。但这只是一个建议。 - Sergio Acosta
同意Sergio的观点,如果有足够多声望高的成员进行编辑,这篇帖子就会变成一个社区帖子。如果楼主将其设为社区共享,更多人将能够参与贡献。 - cori
3个回答

12
SQL Server MSDN页面 对这个问题有一个合理的解释:

意向锁表示 SQL Server 希望在层次结构下面获取一些共享 (S) 锁或排他 (X) 锁。例如,在表级别放置共享意向锁表示事务打算在该表中的页面或行上放置共享 (S) 锁。在表级别设置意向锁可以防止其他事务随后在包含该页的表上获取独占 (X) 锁。意向锁可以提高性能,因为 SQL Server 仅在表级别检查意向锁以确定事务是否可以安全地在该表上获取锁。这样可以避免检查表上的每一个行或页锁以确定事务是否可以锁定整个表。


6

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

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


1
另一个Intent锁的重要特征是您不需要在代码中显式地放置它们,它们在您放置非Intent锁时隐式请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接