我正在尝试对服务器上丢失的索引进行一些分析(我以前从未在此服务器上做过)。我正在运行 sp_blitzindex,它会在“将数据插入#MissingIndexes”时挂起。我深入研究了查询并找到了它命中 sys.dm_db_missing_index_details 的位置。
尝试从 sys.dm_db_missing_index_details 中选择将返回大约 300 条记录,然后它会坐下来旋转。我不想让它继续看它需要多长时间才能完成,但我让它运行了两分钟多,但它没有完成。
为什么这需要很长时间才能返回?什么会导致这个?
这听起来像是其他会话正在阻止动态管理视图。
CREATE TABLE
并DROP TABLE
强制更新为sys.dm_db_missing_index_details
.我能够重新创建一个阻塞场景,其中一个打开的事务阻止读取
sys.dm_db_missing_index_details
. 在开发机器上的 SSMS 窗口中运行:现在,在另一个 SSMS 窗口中,运行以下命令(您可能需要运行几次,具体取决于您的速度!)
对我来说,上面的查询会阻塞,直到我提交或回滚在第一个查询窗口中启动的事务,其中:
或者
不幸的是,
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
在查询之前运行sys.dm_db_missing_index_details
并没有帮助;它仍然阻塞,直到打开的事务提交或回滚。