Λοιπόν μιας και απέκτησα και εδω ένα blog είπα να κάνω σεφτέ με κάτι που λίγο ή πολύ όσοι ασχολούμαστε με SQL Server αντιμετωπίζουμε.
Πως θα βρω τα queries που κάνουν υψηλή χρήση της CPU;
H απάντηση στο ερώτημα αυτό είναι η παρακάτω custom stored procedure η οποία δουλεύει σε SQL Server 2005 & 2008
SQL Script
create procedure spFindQueriesThatUseHighCPU
as
Set NOCOUNT ON
SELECT TOP 100
(a.total_worker_time/a.execution_count) as [Avg_CPU_Time], -- the time is in ms
Convert(Varchar,Last_Execution_Time) as 'Last_execution_Time',
Total_Physical_Reads,
SUBSTRING(b.text,a.statement_start_offset/2,
(case
when a.statement_end_offset = -1 then len(convert(nvarchar(max), b.text)) * 2
else
a.statement_end_offset end - a.statement_start_offset)/2) as Query_Text,
dbname=Upper(db_name(b.dbid)),
b.objectid as 'Object_ID'
FROM sys.dm_exec_query_stats a
cross apply sys.dm_exec_sql_text(a.sql_handle) as b
ORDER BY [Avg_CPU_Time] DESC
go