views:

646

answers:

3

Using Sql Server 2005 Profiler, what events, columns, and filters do you trace to find your slowest queries and stored procedures?

Slow = greater than N seconds, 10 for sake of argument.

+2  A: 

The duration column does it for me, but sometimes I look at the reads and writes columns too.

I use the TSQL:StmtCompleted filter to get the raw queries. You may want to add others like stored procedures to that, but the tsql is the 'base' you need to view. As the MSDN article says

"The execution of a stored procedure can be monitored by the SP:Starting, SP:StmtStarting, SP:StmtCompleted, and SP:Completed event classes and all the TSQL event classes."

gbjbaanb
+4  A: 

In SQL 2005 you can use management views to find slow running queries. A good script i found a while ago on SQL server performance will help get you started; it lists data with the slowest performing first.

SELECT  creation_time 
        ,last_execution_time
        ,total_physical_reads
        ,total_logical_reads 
        ,total_logical_writes
        , execution_count
        , total_worker_time
        , total_elapsed_time
        , total_elapsed_time / execution_count avg_elapsed_time
        ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
         ((CASE 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) st
ORDER BY total_elapsed_time / execution_count DESC;
u07ch
do you know the unit of measure on the times: total_worker_time, total_elapsed_time, and avg_elapsed_time?
KM
The times are in microseconds; MSDN has a good breakdown on the management view http://msdn.microsoft.com/en-us/library/ms189741.aspx
u07ch
Yes, those DMV are great - but they are DYNAMIC, too - as their name implies, e.g. they get flushed each time the server starts up. If your server gets rebooted every night, these might not represent a very reliable sample on any given day. So treat those measurements with care - they're dynamic, and might be based on a fairly small sample...
marc_s
+4  A: 

Before I use the profiler, I check the built-in usage reports. Right click a database, Reports, Standard Reports, then Object Execution Statistics.

It lists the currently cached execution plans, along with the amount of resources and the number of times they've been run. This generally gives a very good idea about what's keeping the server busy.

Andomar
@Andomar, Is ok to run that report on a production server? I tried running that report on one of my production servers, and it still said "retreiving data" after one minute. I stopped it to be safe.
Bill Paetzke
@Bill Paetzke: The report should be safe for production even if it runs quite long. If you don't trust it, you can check the process list for blocking issues!
Andomar