我想使用以下查询:
SELECT
SUBSTRING(qt.TEXT, ( qs.statement_start_offset / 2 ) + 1,
( ( CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset ) / 2 ) + 1) AS [Text] ,
qs.execution_count ,
qs.total_logical_reads ,
qs.last_logical_reads ,
qs.total_logical_writes ,
qs.last_logical_writes ,
qs.total_worker_time ,
qs.last_worker_time ,
qs.total_elapsed_time / 1000000 total_elapsed_time_in_S ,
qs.last_elapsed_time / 1000000 last_elapsed_time_in_S ,
qs.last_execution_time ,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_worker_time DESC
我从如何查找 CPU 密集型查询中获取了代码片段?在 SQL Server Central 博客上。
我需要在其中的数据库上运行此查询,compatibility mode 80
并且 APPLY 在那里不可用。
该查询的结果不会局限于特定数据库。他们将显示整个实例的活动。
通常,很难提供这种粒度的信息,因为查询可以从多个数据库(除了 Azure SQL 数据库)访问数据。
在非平凡的查询中,在每个数据库的基础上计算成本(例如,在执行连接和聚合之后)几乎是不可能的。一些 DMV 确实在执行查询时提供有关上下文数据库的信息,但同样,查询可能访问了完全不同数据库中的对象。
因此,最简单的答案是简单地在设置为兼容级别 90 或更高的数据库上下文中运行查询,例如tempdb或master。它不会影响结果(除了不会产生错误)。
如果这不是合适的解决方案,请编辑您的问题以进行澄清。