Wednesday, June 30, 2010

Obtaining information about the queries by average CPU time.

1. SQL Exection CUP Times

It’s very use full one for optimizing and fine turning the SQL, and also to compare the SQL

CREATE PROC mySqlTime as

SELECT total_worker_time/execution_count AS [Avg CPU Time],

SUBSTRING(st.text, (qs.statement_start_offset/2)+1,

((CASE qs.statement_end_offset

WHEN -1 THEN DATALENGTH(st.text)

ELSE qs.statement_end_offset

END - qs.statement_start_offset)/2) + 1) AS statement_text

FROM sys.dm_exec_query_stats AS qs

CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st

ORDER BY total_worker_time/execution_count DESC;

exec mySqlTime

2. SQL Time with details (mySqlTimeDetails)

The text of SQL queries that are being executed in batches and provides statistical information about them.

CREATE PROC mySqlTimeDetails as

SELECT s2.dbid,

s1.sql_handle,

(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 ,

( (CASE WHEN statement_end_offset = -1

THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2)

ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,

execution_count,

plan_generation_num,

last_execution_time,

total_worker_time,

last_worker_time,

min_worker_time,

max_worker_time,

total_physical_reads,

last_physical_reads,

min_physical_reads,

max_physical_reads,

total_logical_writes,

last_logical_writes,

min_logical_writes,

max_logical_writes

FROM sys.dm_exec_query_stats AS s1

CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2

WHERE s2.objectid is null

ORDER BY s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;

--Run The SQL

exec mySqlTimeDetails

Ref :MSDN

No comments:

Post a Comment