【问题标题】:Count of most time consuming queries in SQL ServerSQL Server 中最耗时的查询计数
【发布时间】:2026-01-29 05:35:01
【问题描述】:

如何计算 SQL Server 中特定数据库最耗时的查询

例如: 时间在 30 到 45 分钟之间的查询计数, 时间在 45 到 60 分钟之间的查询计数, 时间超过 60 分钟的查询计数。

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    有一个 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 列,但如上所示,有很多有用的信息可供查找。

    【讨论】:

      最近更新 更多