2008-09-19 84 views
9

下面是SQL Server 2000旨在支持的锁的列表。对于“意图”锁实际上意味着什么,我有点困惑。我在网上看了一下,答案似乎有点神秘。解释SQL Server锁

除了获得我的具体问题的答案,我希望将这个问题用作维基,以了解每个锁的含义,以及在什么情况下会获得这种类型的锁。

  • 共享(S)
    • 更新(U)
    • 互斥(X)
    • 意图
      • 意向共享(IS)
      • 意向排(IX)
      • 与intent exclusive共享(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)
+0

此类问题不应该由社区拥有吗?我的意思是,因为它看起来有很多工作要回答。但这只是一个建议。 – 2008-09-19 10:18:09

回答

6

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

这加快了对需要在表级锁定的事务的冲突检查。例如,需要对表进行排它锁定的事务可以检测表级别的冲突(“意向共享”锁定将在那里),而不必检查共享锁的所有行(或页面)。

11

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

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

1

的意向锁的另一个重要特点是,你不要” t明确地将它们放在代码中,当您放置非意图锁时,它们会被隐式请求。