How to troubleshoot stored procedures

by JasonRShaver 2. March 2009 16:54

 This only works with SQL 2005 SP2 or greater, as the SP2 included the OBJECT_SCHEMA_NAME function.  This will tell you all of the performance metrics of every stored procedure run since the last SQL Server restart.

 

 

SELECT DB_NAME(st.dbid) DBName

      ,OBJECT_SCHEMA_NAME(objectid,st.dbid) SchemaName

      ,OBJECT_NAME(objectid,st.dbid) StoredProcedure

      ,max(cp.usecounts) execution_count

      ,sum(qs.total_elapsed_time) total_elapsed_time

      ,sum(qs.total_elapsed_time) / max(cp.usecounts) avg_elapsed_time

      ,sum(qs.total_worker_time) total_cpu_time

      ,sum(qs.total_worker_time) / (max(cp.usecounts) * 1.0)  avg_cpu_time

      ,sum(qs.total_physical_reads + qs.total_logical_reads + qs.total_logical_writes) total_IO

      ,sum(qs.total_physical_reads + qs.total_logical_reads + qs.total_logical_writes) / (max(cp.usecounts)) avg_total_IO

      ,sum(qs.total_physical_reads) total_physical_reads

      ,sum(qs.total_physical_reads) / (max(cp.usecounts) * 1.0) avg_physical_read   

      ,sum(qs.total_logical_reads) total_logical_reads

      ,sum(qs.total_logical_reads) / (max(cp.usecounts) * 1.0) avg_logical_read 

      ,sum(qs.total_logical_writes) total_logical_writes

      ,sum(qs.total_logical_writes) / (max(cp.usecounts) * 1.0) avg_logical_writes 

 FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st

   join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle

  where DB_NAME(st.dbid) is not null and cp.objtype = 'proc'

 group by DB_NAME(st.dbid),OBJECT_SCHEMA_NAME(objectid,st.dbid), OBJECT_NAME(objectid,st.dbid)

 order by max(cp.usecounts) desc

 

 

 

 

Tags:

Blog

About the author

I am a software developer working for Microsoft in Redmond, WA.  In addition, my wife and I own TTXOnline, what is likely the 3rd largest table tennis store in the US.

Month List

Page List