mssql sys.dm_exec_query_stats动态管理函数简介


sys.dm_exec_query_stats动态管理函数的功能简介

返回mssql server 中各种性能统计信息的缓存。该动态管理函数包含每一行sql语句,当缓存信息被移除时,动态函数中的信息也会被移除。
由于动态管理函数是动态变化的,所以需要进行多次采样和其它参数进行同时对比,才能找出系统的瓶颈,才能做出正确的优化。

执行动态函数,将返回以下信息:

sql_handle:关联sys.dm_exec_sql_text的键值,获取具体的sqltext
statement_start_offset:批处理开始位置
statement_end_offset:批处理结束为止
plan_generation_num:序列号
plan_handle:计划键值,可以通过此键值联接 sys.dm_exec_query_plan 动态管理函数
creation_time:计划创建执行
last_execution_time:计划最后执行时间
execution_count:此计划自编译后执行总次数
total_worker_time:cpu消耗时间(毫秒)
last_worker_time: 最后一次执行时间(毫秒)
min_worker_time: 最小一次执行时间(毫秒)
max_worker_time:最小一次执行时间(毫秒)
total_physical_reads:编译后,总的物理读取次数
last_physical_reads:最后一次物理读取次数
min_physical_reads:最小的物理读取次数
max_physical_reads:最大的物理读取次数
total_logical_writes last_logical_writes min_logical_writes max_logical_writes :
编译后,总的逻辑写(次数合计) 最后一次逻辑写(次数合计) 最小的逻辑写(次数合计) 最大的逻辑写(次数合计)
total_logical_reads last_logical_reads min_logical_reads max_logical_reads
编译后,总的逻辑读(次数合计) 最后一次逻辑读(次数合计) 最小的逻辑读(次数合计) 最大的逻辑读(次数合计)
total_clr_time last_clr_time min_clr_time max_clr_time :
编译后,总的clr(运行时间合计) 最后一次clr(运行时间) 最小一次clr(运行时间) 最大一次clr(运行时间)

total_elapsed_time last_elapsed_time min_elapsed_time max_elapsed_time
编译后,总的(运行时间合计) 最后一次(运行时间) 最小一次(运行时间) 最大一次(运行时间)

total_rows last_rows min_rows max_rows
编译后 返回总行数 最后一次运行返回的行数 最小行数 最大行数

例:
查询平均运行时间最长的前10个sql语句

SELECT top 10
total_elapsed_time as N'总运行时间',
execution_count as N'总运行个数' ,
(total_elapsed_time / execution_count)/1000 
as 
N'单个作业运行时间毫秒',
t2.text as N'sqltext'

FROM
sys.dm_exec_query_stats AS t1 CROSS APPLY sys.dm_exec_sql_text(t1.sql_handle) t2
order by (total_elapsed_time / execution_count)/1000  desc