【发布时间】:2026-01-29 05:35:01
【问题描述】:
如何计算 SQL Server 中特定数据库最耗时的查询
例如: 时间在 30 到 45 分钟之间的查询计数, 时间在 45 到 60 分钟之间的查询计数, 时间超过 60 分钟的查询计数。
【问题讨论】:
标签: sql-server sql-server-2008
如何计算 SQL Server 中特定数据库最耗时的查询
例如: 时间在 30 到 45 分钟之间的查询计数, 时间在 45 到 60 分钟之间的查询计数, 时间超过 60 分钟的查询计数。
【问题讨论】:
标签: sql-server sql-server-2008
有一个 DMV,sys.dm_exec_query_stats (Transact-SQL)。例如:
查找前 N 个查询
以下示例返回有关按平均 CPU 时间排名的前五个查询的信息。此示例根据查询哈希聚合查询,以便逻辑上等效的查询按其累积资源消耗进行分组。
SELECT TOP 5 query_stats.query_hash AS "Query Hash",
SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",
MIN(query_stats.statement_text) AS "Statement Text"
FROM
(SELECT QS.*,
SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(ST.text)
ELSE QS.statement_end_offset END
- QS.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS QS
CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;
您的具体问题是关于execution_count 列,但如上所示,有很多有用的信息可供查找。
【讨论】: