• SQL SERVER查询优化工具:统计SQL语句执行时间


    1.使用SET STATISTICS TIME ON  
    -- 首先清除缓存   
    DBCC DROPCLEANBUFFERS;   
    DBCC FREEPROCCACHE;   
       
    -- 运行   
    SET STATISTICS TIME ON;   
       
    SELECT orderid, custid, empid, shipperid, orderdate, filler   
    FROM dbo.Orders   
    WHERE orderdate >= '20060101'   
      AND orderdate < '20060201';   
       
    SET STATISTICS TIME OFF;   
    GO   

    您将会得到类似的消息:  


    SQL Server 分析和编译时间:    
       CPU 时间 = 15 毫秒,占用时间 = 33 毫秒。   
       
    SQL Server 执行时间:   
       CPU 时间 = 0 毫秒,占用时间 = 6 毫秒。   

    输出显示了分析和编译该查询所花费的纯CPU时间和实耗时间,以及执行查询所花费的时间. 

    问题是:SET STATISTICS TIME ON;SET STATISTICS TIME OFF之间有多少条SQL语句,就输出多少次.阅读比较费尽. 


    2.使用getdate()  
    declare @d datetime   
       
    set @d=getdate()   
       
    --------------------------------------------------------   
    --/**   
    declare @year int   
       
    set @year = 2000   
       
     while @year<2065   
       
             begin   
       
                       exec sp_reset @year,1   
       
                       set @year = @year+1   
       
             end   
       
    --------------------------------------------------------   
       
    select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())   
    --*/   

    在执行查询前在变量中存储GETDATE的值,查询后提取变量中存储的值.两个日期的差值就是本次批处理运行的时间.  


    3.使用 SQL SERVER Profiler 

    SQL SERVER Profiler可以监测数据库正在运行的SQL查询.如果要得到查询运行,请监测SP:StmtCompleted和SQL:BatchCompleted事件.Duration列代表执行的时间.

    优点:是实时监测. 


    4.使用sys.dm_exec_query_stats和sys.dm_exec_sql_text. 

     sys.dm_exec_query_stats :返回缓存查询计划的聚合性能统计信息。缓存计划中的每个查询语句在该视图中对应一行,并且行的生存期与计划本身相关联。在从缓存删除计划时,也将从该视图中删除对应行。

    sys.dm_exec_sql_text :返回由指定的 sql_handle 标识的 SQL 批处理的文本。该表值函数将替换系统函数 fn_get_sql。 


     SELECT   total_worker_time/1000 N'所用的CPU总时间ms'     
            , total_elapsed_time/1000  N'总花费时间ms'     
            , (total_elapsed_time / execution_count)/1000  N'平均时间ms'     
            ,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'执行语句'     
    FROM sys.dm_exec_query_stats AS qs     
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st     

    优点:可以得到sql查询的历史和他们分别花费的时间.这在历史分析非常有用.

  • 相关阅读:
    阿里云服务器常见问题记录
    npm 常见错误记录
    C程序设计(第四版)课后习题完整版 谭浩强编著
    博客如何快速让百度谷歌等各大引擎收录
    python itertools 用法
    python中dict的fromkeys用法
    python解析XML
    flask+uwsgi+nginx+docker-compose部署
    python的构建工具setup.py
    python判断字符串类型
  • 原文地址:https://www.cnblogs.com/tuyile006/p/2806765.html
Copyright © 2020-2023  润新知