为什么我不能对 dm_db_missing_index_details 进行脏读

pac*_*ely 2 sql-server sql-server-2019

我们的第 3 方生产系统之一经历了重大升级,通过 sp_whoisactive,我现在看到很多查询(1 个事务深度),这些查询阻止了我读取 dm_db_missing_index_details 的任何尝试。

我尝试过设置事务隔离级别并使用 NOLOCK,但 SQL 只是当着我的面笑。

汉娜·弗农 (Hannah Vernon) 能够在这里复制这种行为。

有谁知道如何解决这个问题?

上周我们的系统遇到了一些奇怪的阻塞,Redgate Intellisense 是阻塞链的一部分,是否有其他DMV也有同样的问题?

Dav*_*oft 5

系统表和 DMV 始终在 READ COMMITTED 隔离级别进行访问。

在 Hannah Vernon 的示例中,阻塞会话在事务中运行 DDL,预计会阻塞 dm_db_missing_index_details,因为已创建但未提交的索引无法被其他会话读取。

因此,请检查您的阻塞会话是否还创建/删除/更改了表或索引。可能它们也被阻止了,这才是真正的问题。