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

it2022-05-09  30

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


最新回复(0)