;with long_queries as
(
select top 20
query_hash,
sum(total_elapsed_time) elapsed_time
from sys.dm_exec_query_stats
where query_hash <> 0x0
group by query_hash
order by sum(total_elapsed_time) desc
)
select @@servername as server_name,
db_name(st.dbid) as database_name,
object_name(ST.objectid, ST.dbid) as [object_name],
qs.query_hash,
qs.total_elapsed_time AS 总运行时间,
qs.execution_count AS 执行计算,
cast(total_elapsed_time / (execution_count + 0.0) as money) as 平均持续时间毫秒,
elapsed_time as 查询的总运行时间,
SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
(CASE
WHEN QS.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
ELSE QS.statement_end_offset
END - QS.statement_start_offset) / 2) as sql_text,
qp.query_plan
from sys.dm_exec_query_stats qs
join long_queries lq
on lq.query_hash = qs.query_hash
cross apply sys.dm_exec_sql_text(qs.sql_handle) st
cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
order by lq.elapsed_time desc,
lq.query_hash,
qs.total_elapsed_time desc
option (recompile)
;with high_cpu_queries as
(
select top 20
query_hash,
sum(total_worker_time) cpuTime
from sys.dm_exec_query_stats
where query_hash <> 0x0
group by query_hash
order by sum(total_worker_time) desc
)
select @@servername as server_name,
db_name(st.dbid) as database_name,
object_name(ST.objectid, ST.dbid) as [object_name],
qs.query_hash,
qs.total_worker_time as cpu_time,
qs.execution_count,
cast(total_worker_time / (execution_count + 0.0) as money) as average_CPU_in_microseconds,
cpuTime as total_cpu_for_query,
SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
(CASE
WHEN QS.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
ELSE QS.statement_end_offset
END - QS.statement_start_offset) / 2) as sql_text,
qp.query_plan
from sys.dm_exec_query_stats qs
join high_cpu_queries hcq
on hcq.query_hash = qs.query_hash
cross apply sys.dm_exec_sql_text(qs.sql_handle) st
cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
order by hcq.cpuTime desc,
hcq.query_hash,
qs.total_worker_time desc
option (recompile)
;with frequent_queries as
(
select top 20
query_hash,
sum(execution_count) executions
from sys.dm_exec_query_stats
where query_hash <> 0x0
group by query_hash
order by sum(execution_count) desc
)
select @@servername as server_name,
db_name(st.dbid) as database_name,
object_name(ST.objectid, ST.dbid) as [object_name],
qs.query_hash,
qs.execution_count,
executions as total_executions_for_query,
SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
(CASE
WHEN QS.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
ELSE QS.statement_end_offset
END - QS.statement_start_offset) / 2) as sql_text,
qp.query_plan
from sys.dm_exec_query_stats qs
join frequent_queries fq
on fq.query_hash = qs.query_hash
cross apply sys.dm_exec_sql_text(qs.sql_handle) st
cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
order by fq.executions desc,
fq.query_hash,
qs.execution_count desc
option (recompile)
;with high_io_queries as
(
select top 20
query_hash,
sum(total_logical_reads + total_logical_writes) io
from sys.dm_exec_query_stats
where query_hash <> 0x0
group by query_hash
order by sum(total_logical_reads + total_logical_writes) desc
)
select @@servername as servername,
db_name(st.dbid) as database_name,
object_name(ST.objectid, ST.dbid) as [object_name],
qs.query_hash,
qs.total_logical_reads + total_logical_writes as total_io,
qs.execution_count,
cast((total_logical_reads + total_logical_writes) / (execution_count + 0.0) as money) as average_io,
io as total_io_for_query,
SUBSTRING(ST.TEXT,(QS.statement_start_offset + 2) / 2,
(CASE
WHEN QS.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX),ST.text)) * 2
ELSE QS.statement_end_offset
END - QS.statement_start_offset) / 2) as sql_text,
qp.query_plan
from sys.dm_exec_query_stats qs
join high_io_queries fq
on fq.query_hash = qs.query_hash
cross apply sys.dm_exec_sql_text(qs.sql_handle) st
cross apply sys.dm_exec_query_plan (qs.plan_handle) qp
order by fq.io desc,
fq.query_hash,
qs.total_logical_reads + total_logical_writes desc
option (recompile)