当前位置: 代码迷 >> 综合 >> sqlserver查询执行过的SQL记录
  详细解决方案

sqlserver查询执行过的SQL记录

热度:79   发布时间:2024-02-28 09:02:17.0

说明:仅支持sql server2008及以上版本

declare @startTime datetime,@endTime datetime;
set @startTime='2020-10-14 00:00:00';
set @endTime='2020-10-15 00:00:00';SELECT TOP 1000 QS.creation_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,ST.text,QS.total_worker_time,QS.last_worker_time,QS.max_worker_time,QS.min_worker_time
FROM sys.dm_exec_query_stats QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST WHERE QS.creation_time BETWEEN @startTime AND @endTime
--AND ST.text LIKE '%%'
ORDER BY QS.creation_time DESCSELECT TOP 1000 QS.creation_time,ST.text FROM
sys.dm_exec_query_stats QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) ST WHERE QS.creation_time BETWEEN @startTime AND @endTime
AND ST.text NOT LIKE 'select%' 
ORDER BY QS.creation_time DESC

该视图sys.dm_exec_query_stats存放的就是当前所有执行计划的详细信息,比如某条执行计划共占CPU多少等等。因为该视图对编译次数、占用CPU资源总量、执行次数等都进行了详细的记录,所以,可以说是优化DB服务器CPU的一大利器。

关于CPU时间的单位,说明如下:

字段名 数据类型 描述 备注
total_worker_time bigint 此计划自编译以来执行所用的 CPU 时间总量(以微秒为单位报告,但仅精确到毫秒)。
对于本机编译的存储过程,如果许多执行所用的时间都不到 1 毫秒,则 total_worker_time 可能不精确。
对于启用统计信息收集时的本机编译的存储过程, 以毫秒为单位收集工作线程时间。
如果查询执行的时间不到1毫秒, 则该值将为0。
last_worker_time bigint 上次执行计划所用的 CPU 时间(以微秒为单位报告,但仅精确到毫秒)。 
min_worker_time bigint 此计划在单次执行期间所用的最小 CPU 时间(以微秒为单位报告,但仅精确到毫秒)。
max_worker_time bigint 此计划在单次执行期间所用的最大 CPU 时间(以微秒为单位报告,但仅精确到毫秒)。

 

  相关解决方案