Performance tuning is one of the common operations in database world and is always done for optimizing queries. When performing Performance Tuning first thing we generally do is, checking tasks that are waiting for a long time period. A question was asked on it, and as usual thought to make a post on it, how can I see whose tasks are waiting longer than expected time?
There are couple ways of seeing it. Activity monitor can be easily used for this but if it needs to be done using TSQL, using Dynamic Management Views and Dynamic Management Functions are the best. Here is a simple script for finding tasks that are waiting........
/* Execute this in a new window Note that it updates a record within an explicit transaction */ USE AdventureWorks2014; GO BEGIN TRAN UPDATE Production.Product SET Color = 'Black' WHERE ProductID = 1; -- ROLLBACK TRAN /* Execute this in a new window This tries to retrieve the same */ USE AdventureWorks2014; GO SELECT * FROM Production.Product WHERE ProductID = 1; /* Execute this in a new window This looks for queries waiting longer than 20 seconds */ SELECT s.original_login_name , t.wait_type , t.wait_duration_ms, q.text FROM sys.dm_os_waiting_tasks AS t INNER JOIN sys.dm_exec_sessions AS s ON t.session_id = s.session_id INNER JOIN sys.dm_exec_requests r ON s.session_id = r.session_id CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) q WHERE s.is_user_process = 1 AND t.wait_duration_ms > 20000; -- waiting more than 20 seconds
No comments:
Post a Comment