zoukankan      html  css  js  c++  java
  • (转)查看SQLServer最耗资源时间的SQL语句

              原文地址:https://www.cnblogs.com/My-Dream/p/6270308.html

    1.找出执行时间最长的10条SQL(适用于SQL SERVER 2005及其以上版本)

    复制代码
    SELECT top 10  
        (total_elapsed_time / execution_count)/1000 N'平均时间ms'  
        ,total_elapsed_time/1000 N'总花费时间ms'  
        ,total_worker_time/1000 N'所用的CPU总时间ms'  
        ,total_physical_reads N'物理读取总次数'  
        ,total_logical_reads/execution_count N'每次逻辑读次数'  
        ,total_logical_reads N'逻辑读取总次数'  
        ,total_logical_writes N'逻辑写入总次数'  
        ,execution_count N'执行次数'  
        ,creation_time N'语句编译时间'  
        ,last_execution_time N'上次执行时间'  
        ,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  
        ) N'执行语句'  
        ,qp.query_plan  
    FROM  sys.dm_exec_query_stats AS qs 
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st 
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp  
    WHERE  
        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  
        ) not like '%fetch%'  
    ORDER BY  total_elapsed_time / execution_count DESC;  
    
    
    如果想对SQL作筛选,可将
    not like '%fetch%'  换成  like '%user%'就可以找出SQL语句中含有user关键字的SQL
    复制代码

    2 找出执行最慢的SQL语句(适用于SQL SERVER 2005及其以上版本)

    复制代码
    SELECT
        (total_elapsed_time / execution_count)/1000 N'平均时间ms'
        ,total_elapsed_time/1000 N'总花费时间ms'
        ,total_worker_time/1000 N'所用的CPU总时间ms'
        ,total_physical_reads N'物理读取总次数'
        ,total_logical_reads/execution_count N'每次逻辑读次数'
        ,total_logical_reads N'逻辑读取总次数'
        ,total_logical_writes N'逻辑写入总次数'
        ,execution_count N'执行次数'
        ,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) N'执行语句'
        ,creation_time N'语句编译时间'
        ,last_execution_time N'上次执行时间'
        FROM
        sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
    WHERE
    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) not like '�tch%'
    ORDER BY
    total_elapsed_time / execution_count DESC;
    复制代码

     3 找出最耗时的前N条T-SQL语句  (适用于SQL SERVER 2005及其以上版本)

    复制代码
    --给N赋初值为30  
    declare @n int set @n=30   
      
    ;with maco as   
    (     
        select top (@n)  
            plan_handle,  
            sum(total_worker_time) as total_worker_time ,  
            sum(execution_count) as execution_count ,  
            count(1) as sql_count  
        from sys.dm_exec_query_stats group by plan_handle  
        order by sum(total_worker_time) desc  
    )  
    select  t.text ,  
            a.total_worker_time ,  
            a.execution_count ,  
            a.sql_count  
    from    maco a  
            cross apply sys.dm_exec_sql_text(plan_handle) t  
              
    /* 结果格式如下  
    text     total_worker_time  execution_count   sql_count  
    -------- ------------------ ----------------- ---------  
    内容略  
    */  
    复制代码

     4 平均耗CPU最多的前个SQL (SQL SERVER 2005以上版本)

    复制代码
    SELECT TOP 5 total_worker_time / execution_count AS [Avg CPU Time],  
        SUBSTRING(st.text, (qs.statement_start_offset/2)+1,   
            ((CASE qs.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   
     ORDER BY total_worker_time/execution_count DESC  
    复制代码

      

    5 平均耗CPU最多的前个SQL  (SQL SERVER 2008或以上版本)

    复制代码
    SELECT TOP 20
        total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
        qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
        last_execution_time AS [最后一次执行时间],min_worker_time /1000 AS [最小执行时间(ms)],
        max_worker_time /1000 AS [最大执行时间(ms)],
        SUBSTRING(qt.text,qs.statement_start_offset/2+1, 
            (CASE WHEN qs.statement_end_offset = -1 
            THEN DATALENGTH(qt.text) 
            ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) 
        AS [使用CPU的语法], qt.text [完整语法],
        qt.dbid, dbname=db_name(qt.dbid),
        qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
    FROM sys.dm_exec_query_stats qs WITH(nolock)
    CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
    WHERE  execution_count>1
    ORDER BY (qs.total_worker_time/qs.execution_count/1000) DESC
    复制代码

    6 总耗CPU最多的前个SQL (SQL SERVER 2008以上版本)

    复制代码
    SELECT TOP 20
        total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
        qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
        last_execution_time AS [最后一次执行时间],max_worker_time /1000 AS [最大执行时间(ms)],
        SUBSTRING(qt.text,qs.statement_start_offset/2+1, 
            (CASE WHEN qs.statement_end_offset = -1 
            THEN DATALENGTH(qt.text) 
            ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) 
        AS [使用CPU的语法], qt.text [完整语法],
        qt.dbid, dbname=db_name(qt.dbid),
        qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
    FROM sys.dm_exec_query_stats qs WITH(nolock)
    CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
    WHERE execution_count>1
    ORDER BY  total_worker_time DESC
    复制代码
  • 相关阅读:
    Windows Azure Cloud Service (14) 使用Windows Azure诊断收集日志记录数据
    Windows Azure Cloud Service (13) 用Visual Studio 2010 将应用程序部署到Windows Azure平台
    Windows Azure Cloud Service (15) 多个VM Instance场景下如何处理ASP.NET Session
    Windows Azure Storage (5) Windows Azure Drive
    Windows Azure Storage (7) 使用工具管理Windows Azure Storage
    SQL Azure(二) SQL Azure vs SQL Server
    webbrowser的自动提交
    提取视频的背景声音的软件
    Listview列排序的bug原因
    两个奇怪的问题
  • 原文地址:https://www.cnblogs.com/hhhh2010/p/9860543.html
Copyright © 2011-2022 走看看