sql server性能优化之查询耗时最长的语句

2024-10-09  本文已影响0人  吉凶以情迁
SELECT TOP 10
    qs.total_elapsed_time / qs.execution_count / 1000/1000 AS 平均执行时间_秒,  
    qs.execution_count AS 执行次数,                                         
    qs.total_elapsed_time / 1000/1000 AS 总执行时间_秒,                   
    qs.total_logical_reads AS 总逻辑读取次数,                        
    qs.total_physical_reads AS 总物理读取次数,                      
    qs.total_worker_time / 1000/1000 AS 总CPU时间_秒,                     
    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 查询语句文本,            -- 查询的实际语句
    qt.dbid AS 数据库ID,                                                     -- 数据库ID
    qt.objectid AS 对象ID                                                    -- 对象ID
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY
    sys.dm_exec_sql_text(qs.sql_handle) AS qt
ORDER BY
    平均执行时间_秒 DESC;  -- 根据平均执行时间降序排列
image.png

但是这样还不够,需要知道是什么程序执行的,是哪台电脑

SELECT TOP 10
    qs.total_elapsed_time / qs.execution_count / 1000.0 / 1000.0 AS 平均执行时间_秒,  -- 平均执行时间(秒)
    qs.execution_count AS 执行次数,                                                  -- 查询被执行的次数
    qs.total_elapsed_time / 1000.0 / 1000 AS 总执行时间_秒,                        -- 总执行时间(秒)
    qs.total_logical_reads AS 总逻辑读取次数,                                         -- 总逻辑读取次数
    qs.total_physical_reads AS 总物理读取次数,                                        -- 总物理读取次数
    qs.total_worker_time / 1000.0 / 1000 AS 总CPU时间_秒,                          -- 总CPU时间(秒)
    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 查询语句文本,                    -- 查询的实际语句
    s.host_name AS 主机名,                                                           -- 执行查询的主机名
    s.program_name AS 程序名,                                                        -- 执行查询的程序名
    s.login_name AS 登录名                                                           -- 执行查询的登录名
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY
    sys.dm_exec_sql_text(qs.sql_handle) AS qt
JOIN
    sys.dm_exec_requests AS r ON qs.sql_handle = r.sql_handle
JOIN
    sys.dm_exec_sessions AS s ON r.session_id = s.session_id
ORDER BY
    平均执行时间_秒 DESC;  -- 根据平均执行时间降序排列
上一篇 下一篇

猜你喜欢

热点阅读