SQL Server锁解释

Sim*_*son 10 sql-server locking

下面是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)

And*_*eld 12

SQL服务器MSDN页面有一个合理的解释:

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


Raf*_*ird 6

意图锁定放在表级别上,表明事务将在表中的某些行上放置适当的锁.

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