gpt4 book ai didi

sql-server - 存储过程 xyz 或表值函数的使用频率 - SQL Server 2008 R2

转载 作者:行者123 更新时间:2023-12-03 09:40:19 25 4
gpt4 key购买 nike

我们有许多 View 、存储过程、表值和标量函数。

我们如何查看从 SQL Server 中调用它们的频率甚至多少次?

我们是否需要编辑每一个以在每次调用时更新一个表以获得此信息,或者 SQL Server 是否将此信息保存在某处?

最佳答案

这是 Glenn Berry 的 DMV 查询之一。它计算缓存存储过程执行了多少次(由当前数据库过滤):

SELECT TOP(25) p.name AS [SP Name], qs.execution_count,
ISNULL(qs.execution_count/DATEDIFF(Second, qs.cached_time, GETDATE()), 0) AS [Calls/Second],
qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], qs.total_worker_time AS [TotalWorkerTime],
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.execution_count DESC OPTION (RECOMPILE);

注意:SQL Server 仅保留上次服务重启后的信息,并且在内存压力下也可能丢弃信息。

还请注意,仅执行计数并不能说明全部情况。识别成本最高的查询并改进它们通常会更好。我通常从最高的逻辑读取开始(这是 Glenn 的另一个):

SELECT TOP(25) p.name AS [SP Name], qs.total_logical_reads AS [TotalLogicalReads], 
qs.total_logical_reads/qs.execution_count AS [AvgLogicalReads],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_logical_reads DESC OPTION (RECOMPILE);

[另外,请注意:您可能有定期安排的流程(例如每月一次)。因此,并非 100% 可以识别出使用这些调用的存储过程。]

关于sql-server - 存储过程 xyz 或表值函数的使用频率 - SQL Server 2008 R2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4827058/

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