优先级 SQL 服务器 dm_exec_procedure_stats 的指标
Metric for prioritising SQL SERVER dm_exec_procedure_stats
这个查询提供了很多有用的信息,但我需要想出一个好的指标来确定数据的优先级。谁能为 ORDER BY 子句想出一个理想的顺序?
我猜计算优先顺序的关键字段是 [execution_count]、[total_worker_time]、[total_physical_reads] 和 [total_logical_writes]
SELECT
DB_NAME(database_id) databaes_name
,p.name proc_name
,p.type proc_type
,d.object_id
,d.type
,d.type_desc
--,d.sql_handle
--,d.plan_handle
,d.cached_time
,d.last_execution_time
,d.execution_count
,d.total_worker_time
,d.last_worker_time
,d.min_worker_time
,d.max_worker_time
,d.total_physical_reads
,d.last_physical_reads
,d.min_physical_reads
,d.max_physical_reads
,d.total_logical_writes
,d.last_logical_writes
,d.min_logical_writes
,d.max_logical_writes
,d.total_logical_reads
,d.last_logical_reads
,d.min_logical_reads
,d.max_logical_reads
,d.total_elapsed_time
,d.last_elapsed_time
,d.min_elapsed_time
,d.max_elapsed_time
FROM
sys.procedures p
JOIN sys.dm_exec_procedure_stats d
ON
p.object_id = d.object_id
WHERE
d.database_id = Db_id()
任何人都可以建议我应该查看的额外 DMV 以确定我最昂贵的存储过程是什么吗?
这篇文章是关于这个主题的好读物。 Simple-Talk
但是为了回答你的问题,我建议使用这个:
ORDER BY AVG_LOGICAL_READS DESC
通过这样做,您可以看到哪个过程在每次执行中完成了最合乎逻辑的 I/O。
您也应该看看这个,即使它特定于查询与过程。它有大量与该主题相关的信息。 SQL Authority Most Expensive Queries 它包括这个片段:
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads
-- ORDER BY qs.total_logical_writes DESC -- logical writes
-- ORDER BY qs.total_worker_time DESC -- CPU time
这个查询提供了很多有用的信息,但我需要想出一个好的指标来确定数据的优先级。谁能为 ORDER BY 子句想出一个理想的顺序?
我猜计算优先顺序的关键字段是 [execution_count]、[total_worker_time]、[total_physical_reads] 和 [total_logical_writes]
SELECT
DB_NAME(database_id) databaes_name
,p.name proc_name
,p.type proc_type
,d.object_id
,d.type
,d.type_desc
--,d.sql_handle
--,d.plan_handle
,d.cached_time
,d.last_execution_time
,d.execution_count
,d.total_worker_time
,d.last_worker_time
,d.min_worker_time
,d.max_worker_time
,d.total_physical_reads
,d.last_physical_reads
,d.min_physical_reads
,d.max_physical_reads
,d.total_logical_writes
,d.last_logical_writes
,d.min_logical_writes
,d.max_logical_writes
,d.total_logical_reads
,d.last_logical_reads
,d.min_logical_reads
,d.max_logical_reads
,d.total_elapsed_time
,d.last_elapsed_time
,d.min_elapsed_time
,d.max_elapsed_time
FROM
sys.procedures p
JOIN sys.dm_exec_procedure_stats d
ON
p.object_id = d.object_id
WHERE
d.database_id = Db_id()
任何人都可以建议我应该查看的额外 DMV 以确定我最昂贵的存储过程是什么吗?
这篇文章是关于这个主题的好读物。 Simple-Talk
但是为了回答你的问题,我建议使用这个:
ORDER BY AVG_LOGICAL_READS DESC
通过这样做,您可以看到哪个过程在每次执行中完成了最合乎逻辑的 I/O。
您也应该看看这个,即使它特定于查询与过程。它有大量与该主题相关的信息。 SQL Authority Most Expensive Queries 它包括这个片段:
SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(qt.TEXT) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1), qs.execution_count, qs.total_logical_reads, qs.last_logical_reads, qs.total_logical_writes, qs.last_logical_writes, qs.total_worker_time, qs.last_worker_time, qs.total_elapsed_time/1000000 total_elapsed_time_in_S, qs.last_elapsed_time/1000000 last_elapsed_time_in_S, qs.last_execution_time, qp.query_plan FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp ORDER BY qs.total_logical_reads DESC -- logical reads -- ORDER BY qs.total_logical_writes DESC -- logical writes -- ORDER BY qs.total_worker_time DESC -- CPU time