【问题标题】:SQL Server locks explainedSQL Server 锁解释
【发布时间】:2008-09-19 09:43:11
【问题描述】:

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

【问题讨论】:

  • 这类问题不应该由社区拥有吗?我的意思是,因为看起来需要做很多工作才能回答。但这只是一个建议。
  • 同意 Sergio,但如果有足够多的重磅成员编辑它,它将成为社区帖子。如果 OP 使其基于社区,更多人将能够做出贡献。

标签: sql-server locking


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        相关资源
        最近更新 更多