【发布时间】:2021-01-22 22:10:23
【问题描述】:
我们在 SQL Server (2016) DB 中有一个视图,它对它选择的所有表使用 NOLOCK 提示。我们发现当这个视图被消费时,它实际上是在阻塞读写。
根据this,NOLOCK 查询会发出 Sch-S 锁,因此只会阻止诸如 DDL 和重新索引作业之类的事情。但是,我们看到 DML 读/写也被阻止,导致我们的整个应用程序出现故障。为什么?
注意:从视图查询中选择不使用 NOLOCK 提示,但如果视图本身使用 NOLOCK,则不确定这是否重要。
注意 2:对事实问题的轻描淡写表示歉意——我在环境中的权限有限,并且很难使用需要提升权限的查询进行调查,因此希望进行纯理论分析。
谢谢!
【问题讨论】:
-
你如何证明这个视图确实是阻塞的?你有阻塞和阻塞查询的例子吗?被阻止查询的隔离级别是多少?
-
我还建议拥有适当权限的人下载 sp_whoisactive 并在发生阻塞情况时使用 @get_locks = 1 运行它。它将显示阻塞的查询以及阻塞的对象
标签: sql-server tsql