mssql 获取存储过程耗时最长、逻辑读取次数最多的存储过程—应用于存储过程日常维护


根据前文所讲述的系统表
sys.procedures
sys.dm_exec_procedure_stats
我们可以监控自sql重编译后的 执行情况 ,通过收集这些情况,我们可以对逻辑读取次数高,运行时间长的存储过程进行相关优化,
或对存储过程涉及的业务模式进行修正,下文将记载获取存储过程运行情况的sql脚本



一、获取平均运行时间最长的前100个存储过程

 SELECT TOP  100
      a.name as [存储过程名称],
      b.total_elapsed_time/b.execution_count as [单次运行时间 微秒],
      b.total_elapsed_time as [总运行时间 微秒],
      b.execution_count as [总运行次数]
FROM    sys.procedures AS a 
        INNER JOIN sys.dm_exec_procedure_stats AS b  ON a.[Object_id] = b.[Object_id]
WHERE   b.Database_id = DB_ID() ---当前DB
ORDER BY b.total_elapsed_time/b.execution_count desc    ---总运行时间/总运行次数 得到单次运行时间


二、获取平均逻辑读取最多的前100个存储过程

   SELECT TOP  100
      a.name as [存储过程名称],
      b.total_logical_reads/b.execution_count as [单次逻辑读次数],
      b.total_logical_reads as [总逻辑读次数],
      b.execution_count as [总运行次数]
FROM    sys.procedures AS a 
        INNER JOIN sys.dm_exec_procedure_stats AS b  ON a.[Object_id] = b.[Object_id]
WHERE   b.Database_id = DB_ID() ---当前DB
ORDER BY b.total_logical_reads/b.execution_count desc    ---总逻辑读次数/总运行次数 得到单次逻辑读次数

相关阅读:
sys.procedures简介
sys.dm_exec_procedure_stats简介