博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL SERVER查询优化工具:统计SQL语句执行时间
阅读量:5264 次
发布时间:2019-06-14

本文共 1782 字,大约阅读时间需要 5 分钟。

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查询的历史和他们分别花费的时间.这在历史分析非常有用.

转载于:https://www.cnblogs.com/tuyile006/archive/2012/12/07/2806765.html

你可能感兴趣的文章
Codeforces Round #155 (Div. 2)
查看>>
HDU 2852 KiKi's K-Number(离线+树状数组)
查看>>
Bicolorings - codeforce
查看>>
脚本和脚本包有什么区别?
查看>>
使用virtualbox 配置 linux host-only虚拟主机连接外网(转载)
查看>>
关于用 random 生成伪随机数的一个手笔
查看>>
bootstrap 菜单之手风琴效果
查看>>
Function-JS
查看>>
常用的SQL 语句
查看>>
Storm安装部署
查看>>
在PHP中读取二进制文件
查看>>
Linux CentOS6系统安装最新版本Node.js环境及相关文件配置
查看>>
编程常识科普
查看>>
线段树模板
查看>>
Listview滑动时不加载数据,停下来时加载数据,让App更优
查看>>
Java(异常、枚举)
查看>>
MySQL 数据库的备份和恢复
查看>>
简明Linux命令行笔记:whereis
查看>>
Android-WizardPager
查看>>
LGP4588[JSOI2018]扫地机器人
查看>>