• SQL查询运行时间,IO,CPU 前几位的语句


    ;with long_queries as
    (
        select top 20 
            query_hash, 
            sum(total_elapsed_time) elapsed_time
        from sys.dm_exec_query_stats 
        where query_hash <> 0x0
        group by query_hash
        order by sum(total_elapsed_time) desc
    )
    select @@servername as server_name,
        db_name(st.dbid) as database_name,
        object_name(ST.objectid, ST.dbid) as [object_name],
        qs.query_hash,
        qs.total_elapsed_time AS 总运行时间,
        qs.execution_count AS 执行计算,
        cast(total_elapsed_time / (execution_count + 0.0) as money) as 平均持续时间毫秒,
        elapsed_time as 查询的总运行时间,
        SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
            (CASE 
                WHEN QS.statement_end_offset = -1  THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
                ELSE QS.statement_end_offset
                END - QS.statement_start_offset) / 2) as sql_text,
        qp.query_plan
    from sys.dm_exec_query_stats qs
    join long_queries lq
        on lq.query_hash = qs.query_hash
    cross apply sys.dm_exec_sql_text(qs.sql_handle) st
    cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
    order by lq.elapsed_time desc,
        lq.query_hash,
        qs.total_elapsed_time desc
    option (recompile)
    ;with high_cpu_queries as
    (
        select top 20 
            query_hash, 
            sum(total_worker_time) cpuTime
        from sys.dm_exec_query_stats 
        where query_hash <> 0x0
        group by query_hash
        order by sum(total_worker_time) desc
    )
    select @@servername as server_name,
        db_name(st.dbid) as database_name,
        object_name(ST.objectid, ST.dbid) as [object_name],
        qs.query_hash,
        qs.total_worker_time as cpu_time,
        qs.execution_count,
        cast(total_worker_time / (execution_count + 0.0) as money) as average_CPU_in_microseconds,
        cpuTime as total_cpu_for_query,
        SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
            (CASE 
                WHEN QS.statement_end_offset = -1  THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
                ELSE QS.statement_end_offset
                END - QS.statement_start_offset) / 2) as sql_text,
        qp.query_plan
    from sys.dm_exec_query_stats qs
    join high_cpu_queries hcq
        on hcq.query_hash = qs.query_hash
    cross apply sys.dm_exec_sql_text(qs.sql_handle) st
    cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
    order by hcq.cpuTime desc,
        hcq.query_hash,
        qs.total_worker_time desc
    option (recompile)
    ;with frequent_queries as
    (
        select top 20 
            query_hash, 
            sum(execution_count) executions
        from sys.dm_exec_query_stats 
        where query_hash <> 0x0
        group by query_hash
        order by sum(execution_count) desc
    )
    select @@servername as server_name,
        db_name(st.dbid) as database_name,
        object_name(ST.objectid, ST.dbid) as [object_name],
        qs.query_hash,
        qs.execution_count,
        executions as total_executions_for_query,
        SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
            (CASE 
                WHEN QS.statement_end_offset = -1  THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
                ELSE QS.statement_end_offset
                END - QS.statement_start_offset) / 2) as sql_text,
        qp.query_plan
    from sys.dm_exec_query_stats qs
    join frequent_queries fq
        on fq.query_hash = qs.query_hash
    cross apply sys.dm_exec_sql_text(qs.sql_handle) st
    cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
    order by fq.executions desc,
        fq.query_hash,
        qs.execution_count desc
    option (recompile)
    ;with high_io_queries as
    (
        select top 20 
            query_hash, 
            sum(total_logical_reads + total_logical_writes) io
        from sys.dm_exec_query_stats 
        where query_hash <> 0x0
        group by query_hash
        order by sum(total_logical_reads + total_logical_writes) desc
    )
    select @@servername as servername,
        db_name(st.dbid) as database_name,
        object_name(ST.objectid, ST.dbid) as [object_name],
        qs.query_hash,
        qs.total_logical_reads + total_logical_writes as total_io,
        qs.execution_count,
        cast((total_logical_reads + total_logical_writes) / (execution_count + 0.0) as money) as average_io,
        io as total_io_for_query,
        SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
            (CASE 
                WHEN QS.statement_end_offset = -1  THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
                ELSE QS.statement_end_offset
                END - QS.statement_start_offset) / 2) as sql_text,
        qp.query_plan
    from sys.dm_exec_query_stats qs
    join high_io_queries fq
        on fq.query_hash = qs.query_hash
    cross apply sys.dm_exec_sql_text(qs.sql_handle) st
    cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
    order by fq.io desc,
        fq.query_hash,
        qs.total_logical_reads + total_logical_writes desc
    option (recompile)
  • 相关阅读:
    cookie加载不正确的问题
    android多图选择器 图片/视频 单选or多选,以及视频录制。
    Android开发之高仿微信图片选择器
    Glide升级到4.x版本遇到的问题
    v关于使用Glide加载图片失败时显示自己特定的图片
    Java的方法类型
    Java二维数组的应用
    Java中字符串操作的基本方法总结:
    Java冒泡排序
    报错:flutter: Another exception was thrown: Could not find a generator for route RouteSettings
  • 原文地址:https://www.cnblogs.com/weifeng123/p/15571164.html
Copyright © 2020-2023  润新知