用于UDF性能统计的MS SQL DMV - 如何查找前10个最差的UDF

zvo*_*kov 5 sql-server performance user-defined-functions dmv

我听说在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);
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 2

尝试这个。

上面的代码仅限于存储过程

注意:没有“sys.functions”