我听说在 Microsoft SQL Server 中有多种方法可以找到“最差”的存储过程:按执行次数、CPU 工作时间、队列等待时间等。
我正在寻找一种方法来找到最差(最慢/最常用)的 UDF - 是否有 DMV 查询?
例如,五个 DMV 查询将使您成为超级英雄的查询返回按总工作时间计算的前 25 个缓存 SP,这实际上意味着 CPU 压力最昂贵的存储过程。
我如何为 UDF 写这样的东西?
SELECT TOP(25) p.name AS [SP Name], qs.total_worker_time AS [TotalWorkerTime],
qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.execution_count,
ISNULL(qs.execution_count/DATEDIFF(Second, qs.cached_time, GETDATE()), 0) AS [Calls/Second],
qs.total_elapsed_time, qs.total_elapsed_time/qs.execution_count
AS [avg_elapsed_time], qs.cached_time
FROM sys.procedures AS p
INNER JOIN sys.dm_exec_procedure_stats AS qs
ON p.[object_id] = qs.[object_id]
WHERE qs.database_id = DB_ID()
ORDER BY qs.total_worker_time DESC OPTION (RECOMPILE);