gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:38:36 25 4
gpt4 key购买 nike

我听说 Microsoft SQL Server 中有多种方法可以查找“最差”存储过程:按执行次数、按 CPU 工作时间、按队列等待时间等。

我正在寻找一种方法来查找最差(最慢/最常用)的 UDF - 是否有 DMV 查询?

例如,来自 Five DMV Queries That Will Make You a Superhero 的查询按总工作时间返回前 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);

最佳答案

试试这个。

  • 将 sys.procedures 更改为 sys.sql_modules
  • 添加进一步连接到 sys.objects
  • sys.objects.type IN ('IF', 'TF', 'FN') 过滤

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

注意:没有“sys.functions”

关于sql-server - 用于 UDF 性能统计的 MS SQL DMV - 如何查找前 10 个最差的 UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5704885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com