【问题标题】:Most Executed Stored Procedure?执行次数最多的存储过程?
【发布时间】:2010-12-28 21:38:30
【问题描述】:

我们在应用程序中创建了如此多低效的存储过程,我们总是推迟以提高效率,直到数据库性能出现严重问题。

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

确定执行次数最多的存储过程的最佳方法是什么?

是否有脚本可以显示执行次数最多的存储过程?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        用途:

        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

        【讨论】:

        • 您还可以提取SUBSTRING(Text, statement_start_offset/2, case when (statement_end_offset = -1) then len(Text) else (statement_end_offset-statement_start_offset)/2 end) 用于SP 内部的实际查询
        • 它应该是 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) 作为实际查询,
        【解决方案4】:

        实现此目的的一种快速方法是运行 SQL Profiler,然后按 TextData 将跟踪“分组”。

        • 进入您的跟踪属性
        • 在“事件选择”选项卡下,单击 关于组织列...
        • 单击 TextData,然后将其向上移动到 “群组”区域。

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

        【讨论】:

          【解决方案5】:

          典型情况..

          运行性能分析器 然后启动您的应用程序 设置一些过滤器来捕获大量的读取/写入/扫描等。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-15
            • 1970-01-01
            相关资源
            最近更新 更多