在 SQL Server 2008 中使用 DMV 查询 DM 对象对性能有什么影响?

Rob*_*Rob 5 performance sql-server-2008-r2 dmv

最近,我一直在 DMV 上针对我们的生产系统运行查询,以查询计划缓存。特别是,这里是查询的 from 子句:

FROM sys.dm_exec_cached_plans AS cp 
CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS qp 
CROSS APPLY query_plan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple') AS batch(stmt) 
CROSS APPLY stmt.nodes('.//IndexScan/Object[@Index=sql:variable("@IndexName")]') AS idx(obj) 
Run Code Online (Sandbox Code Playgroud)

dm_exec_cached_plans 中大约有 28k 行。

当我这样做时,它会触发 PLE 降低非常低和非常高的磁盘 IO 和延迟(读/写停顿)的警报。

这令人惊讶,因为我从未阅读或经历过与针对 DMV 运行即席查询的性能问题相关的任何内容。该服务器具有 24 个内核、64GB RAM 和 SSD。我知道总有比这更多的东西,但我很难相信这些查询会导致这样的问题。

谁能解释一下为什么会发生这种情况?我很高兴提供有关我们配置的更多信息,但我也希望有一个简单的解释。

Mic*_*een 1

还有其他 DMV 可以帮助您量化这一点。 sys.dm_exec_sessions有列cpu_timememory_usage等等total_scheduled_time。当您在一个会话中运行计划获取查询时,您可以在第二个会话中查询此 DMV 以了解第一个会话的成本。

令人高兴的是,您还可以同时量化第二次会议的费用!