Advertisement
Lars-UT

SQL Server: Find long running requests before completion

May 24th, 2013
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 1.37 KB | None | 0 0
  1. -- Find long running requests while they're still running
  2. DECLARE @intTooLong INT = 10000
  3.  --(in ms) longer than 10 secs
  4. SELECT   D.text SQLStatement,
  5.          A.Session_ID SPID,
  6.          ISNULL(B.status, A.status) Status,
  7.          DATEDIFF(minute, A.last_request_start_time, getdate()) AS RunningMinutes,
  8.          A.login_name Login,
  9.          A.host_name HostName,
  10.          C.BlkBy,
  11.          DB_NAME(B.Database_ID) DBName,
  12.          B.command,
  13.          ISNULL(B.cpu_time, A.cpu_time) CPUTime,
  14.          ISNULL(( B.reads + B.writes ), ( A.reads + A.writes )) DiskIO,
  15.          A.last_request_start_time LastBatch,
  16.          A.program_name
  17. FROM     sys.dm_exec_sessions A
  18.          LEFT JOIN sys.dm_exec_requests B
  19.             ON A.session_id = B.session_id
  20.                AND B.total_elapsed_time > @intTooLong
  21.          LEFT JOIN (
  22.                      SELECT   A.request_session_id SPID,
  23.                               B.blocking_session_id BlkBy
  24.                      FROM     sys.dm_tran_locks AS A
  25.                               INNER JOIN sys.dm_os_waiting_tasks AS B
  26.                                  ON A.lock_owner_address = B.resource_address
  27.                    ) C
  28.             ON A.Session_ID = C.SPID
  29.          CROSS APPLY sys.dm_exec_sql_text(sql_handle) D
  30. WHERE    A.is_user_process = 1
  31.          AND A.Session_ID != @@SPID
  32.          AND ISNULL(B.status, A.status) != 'sleeping';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement