小编Joe*_*ney的帖子

SQL Server 如何知道锁定视图对象?

不确定这是否或多或少适合提出这个问题,最初是在Stack Overflow 上提出的。


在SQL Server 2008中我有一个观点V在表AB看起来大致是

create view V as
    select * from A
    union all
    select * from B
Run Code Online (Sandbox Code Playgroud)

读取V导致查询在基表上获取意图共享锁,但也会在视图对象本身获取意图共享锁

很明显为什么我们需要表上的 IS 锁,并且我们可以看到视图上的 IS 锁阻止了对视图底层表的并发修改。没关系。

查询计划没有提及视图。它是完全编译出来的,在这种情况下生成的计划是来自两个基表的行的简单串联。实际上,查询计划 XML 中唯一提到的视图是在语句文本中。

如果您U在表上添加第二个视图,则读取V不会导致任何锁定U。这排除了引擎只对A和上的所有视图进行 IS 锁定B

数据库引擎如何知道锁定视图?

  • 语句文本是否再次解析?
  • 查询规划器和底层执行之间是否有其他一些信息通道来传递这些信息?如果是这样,是什么?

如果是后者,存储引擎知道锁定视图的机制的细节可以被认为是内部的。然而,它这样做的事实是用户可见的,我希望它在某处被记录下来。

sql-server-2008 sql-server view locking

6
推荐指数
2
解决办法
5318
查看次数

标签 统计

locking ×1

sql-server ×1

sql-server-2008 ×1

view ×1