最常执行的存储过程?

时间:2009-12-21 21:28:06

标签: sql sql-server database tsql stored-procedures

我们在应用程序中创建了许多低效的存储过程,我们总是推迟使其更高效,直到我们遇到数据库性能严重问题。

现在,我正在考虑通过最常执行的存储过程逐个修复它。

找出哪个存储过程执行得最多的最佳方法是什么?

是否有一个脚本可以显示哪个存储过程执行得最多?

5 个答案:

答案 0 :(得分:23)

使用:

SELECT TOP 10 
       qt.TEXT AS 'SP Name',
       SUBSTRING(qt.text, qs.statement_start_offset/2, CASE WHEN (qs.statement_end_offset = -1) THEN LEN(qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query,
       qs.execution_count AS 'Execution Count',
       qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime',
       qs.total_worker_time AS 'TotalWorkerTime',
       qs.total_physical_reads AS 'PhysicalReads',
       qs.creation_time 'CreationTime',
       qs.execution_count/DATEDIFF(Second, qs.creation_time, GETDATE()) AS 'Calls/Second'
  FROM sys.dm_exec_query_stats AS qs
  CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
 WHERE qt.dbid = (SELECT dbid
                    FROM sys.sysdatabases
                   WHERE name = '[your database name]')
ORDER BY qs.total_physical_reads DESC

参考:SQL SERVER – 2005 – Find Highest / Most Used Stored Procedure

答案 1 :(得分:1)

实现此目的的一种快速方法是运行SQL事件探查器,然后通过TextData对您的跟踪进行“分组”。

  • 进入跟踪属性
  • 在“事件选择”选项卡下,单击“确定” 在组织列...
  • 单击TextData,然后将其向上移动 “团体”区域。

您可能也只想观看特定事件,例如SQL Batch Completed。如果我记得,那将给你持续时间和其他方便的统计数据来分组/过滤。

答案 2 :(得分:1)

另一个出色的工具是微软的Performance Dashboard。 link text

答案 3 :(得分:0)

典型情况..

运行性能分析器 然后开始申请 设置一些过滤器来捕获大量的读/写/扫描等。

答案 4 :(得分:0)

使用SSMS可以找到大多数执行的对象。 Right click DB Name > Reports > Standard reports > Object Execution Statistics。下面的GIF图片enter image description here

中对此进行了详细说明