SELECT TOP 20 d.object_id, d.database_id, s.name, --s.type_desc, d.cached_time,-- d.last_execution_time, d.total_worker_time, d.total_worker_time/d.execution_count AS [avg_cpu], d.total_elapsed_time, d.total_elapsed_time/d.execution_count AS [avg_dur], d.last_elapsed_time, d.execution_count FROM sys.procedures s INNER JOIN sys.dm_exec_procedure_stats d ON s.object_id = d.object_id where d.database_id > 5 --ORDER BY [avg_dur] DESC; --ORDER BY [total_elapsed_time] DESC; ORDER BY [total_worker_time] DESC; use master go declare @total bigint, @total_ms_per_sec bigint, @minutes_since_last int, @db varchar(20) select @total = sum(total_worker_time) from sys.dm_exec_query_stats qs where total_worker_time > 0 -- and st.dbid is not null select @total_ms_per_sec = sum( total_worker_time / (datediff(s,creation_time,last_execution_time) + .001)) from sys.dm_exec_query_stats qs where total_worker_time > 0 and datediff(mi,last_execution_time,getdate()) < @minutes_since_last and datediff(s,creation_time,last_execution_time) > 1 select top 100 --object_name(st.objectid) case when db_name(st.dbid) = @db then object_name(st.objectid) else '???' end 'proc' , cast(sum(total_worker_time) / (@total * 0.01) as decimal(6,2)) 'percent' , sum(total_worker_time)/1000 'worker_time ms' --, sum(total_elapsed_time)/1000 'elapsed time' , cast(sum( total_worker_time / (datediff(s,creation_time,last_execution_time) + 1)) / (@total_ms_per_sec * 0.01) as decimal(6,2)) 'percent' , sum( total_worker_time / (datediff(s,creation_time,last_execution_time) + 1) / 1000) 'cpu/sec' , avg(execution_count) 'execs' , avg(execution_count / (datediff(s,creation_time,last_execution_time) + 1)) as 'execs/sec' , cast(sum(total_worker_time)/avg(execution_count)/1000.0 as decimal(10,2)) 'avg cpu ms' , cast(sum(total_elapsed_time)/avg(execution_count)/1000.0 as decimal(10,2)) 'avg ms' , sum(total_logical_reads)/avg(execution_count) 'avg reads' , sum(total_logical_reads) 'reads' , db_name(st.dbid) as database_name , st.objectid , avg(total_physical_reads) 'avg p reads' , avg(datediff(mi,creation_time,last_execution_time)) 'mins' , max(last_execution_time) 'last time' , sum(last_worker_time) 'last cpu' , sum(last_elapsed_time) 'last dur' from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(sql_handle) st where total_worker_time > 0 and st.dbid is not null --and execution_count > 10 and datediff(mi,last_execution_time,getdate()) < @minutes_since_last --and st.dbid = 5 --REZFRAC01 group by st.objectid, st.dbid --order by 3 desc --worker_time order by 5 desc --cpu per sec --order by 7 desc --execs per min --order by 8 desc --avg cpu --order by 10 desc --avg reads