【问题标题】:SQL Server partitioned views and lockingSQL Server 分区视图和锁定
【发布时间】:2012-06-22 12:38:28
【问题描述】:

我们正在使用分区视图(SQL Server 2008 Standard,分区表不是一个选项),如果我们考虑分区消除目标,它们可以正常工作:如果我们在分区视图中运行查询,指定列上的子句,选择作为鉴别器,我们可以从实际执行计划中看到,只有与指定鉴别器值相关的表被命中。但是,如果有并发的 INSERT 或 UPDATE 语句,即使这些语句没有命中鉴别器选择的表,我们也会遇到锁定问题。

分析锁我可以看到,即使执行计划显示只读取了正确的一个表,IS锁仍然会放在分区视图中的所有表上,当然如果其他人已经放了一个X 锁定其中一个,在分区视图上运行的整个查询被锁定在那个上,即使带有 X 的表根本没有被读取。

这是分区视图的一般限制,还是有办法在坚持分区视图的同时避免它?我们按照 SQL Server 联机丛书的建议创建了分区视图和相关内容。

谢谢

黄蜂

【问题讨论】:

    标签: sql-server partitioning


    【解决方案1】:

    这是设计使然。不要锁定 X 整个表。

    【讨论】:

    • 我们没有明确地对整个表进行 X 锁定,这发生在没有明确锁定提示的事务中的 MERGE 语句期间。
    • 不幸的是,除了在视图中添加 NOLOCK 提示之外,您无能为力。
    • 顺便说一句,分区 tablesAUTO 锁定升级模式将解决这种情况......只是说......
    猜你喜欢
    • 2012-05-04
    • 2013-09-23
    • 2019-07-29
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多