Skip to content

Instantly share code, notes, and snippets.

@JohnLBevan
Created March 14, 2014 11:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JohnLBevan/4ba29212155ed6576c8a to your computer and use it in GitHub Desktop.
Save JohnLBevan/4ba29212155ed6576c8a to your computer and use it in GitHub Desktop.
use EnergyLive
go
SELECT REQ.SESSION_ID,
RTRIM(convert(varchar(128),REQ.context_info)) AS BATCH_INFO,
SQL = SQL.text,
QUERYPLAN.query_plan AS EXEC_PLAN,
CPU_TIME,
TOTAL_ELAPSED_TIME,
READS,
WRITES,
LOGICAL_READS,
WAIT_TIME,
WAIT_TYPE,
WAIT_RESOURCE
INTO #REQUESTS
FROM sys.dm_exec_requests AS REQ
OUTER APPLY sys.dm_exec_sql_text(REQ.sql_handle) AS SQL
OUTER APPLY sys.dm_exec_query_plan(REQ.plan_handle) AS QUERYPLAN
WHERE DATABASE_ID = DB_ID()
AND REQ.SESSION_ID <> @@SPID
AND REQ.SESSION_ID > 50
SELECT
GETDATE() AS CURRENT_DATETIME,
REQ.SESSION_ID,
BATCH_INFO,
SQL = CASE
WHEN REQ.SQL LIKE 'FETCH API_CURSOR%' THEN CURSORSQL.text
ELSE REQ.SQL
END,
REQ.TOTAL_ELAPSED_TIME,
EXEC_PLAN = CASE
WHEN REQ.SQL LIKE 'FETCH API_CURSOR%' THEN CURSORPLAN.query_plan
ELSE EXEC_PLAN
END ,
CURSOR_PROPERTIES = CASE
WHEN CURSORS.PROPERTIES IS NOT NULL THEN CURSORS.PROPERTIES
ELSE 'N/A'
END,
CPU_TIME = CASE
WHEN CURSORS.worker_time IS NOT NULL THEN CURSORS.worker_time
ELSE REQ.CPU_TIME
END,
READS = CASE
WHEN CURSORS.READS IS NOT NULL THEN CURSORS.READS
ELSE REQ.READS
END,
WRITES = CASE
WHEN CURSORS.WRITES IS NOT NULL THEN CURSORS.WRITES
ELSE REQ.WRITES
END,
REQ.LOGICAL_READS,
CURSORS.DORMANT_DURATION,
REQ.WAIT_TIME,
REQ.WAIT_TYPE,
REQ.WAIT_RESOURCE
FROM #REQUESTS AS REQ
--– ————————————————————————————-
--– Special Handling for Cursors
--– If the blocking process is a cursor, get SQL text via sys.dm_exec_cursors.sql_handle
--– and the query plan via sys.dm_exec_query_stats.plan_handle
--– ————————————————————————————-
OUTER APPLY sys.dm_exec_cursors(REQ.SESSION_ID) AS CURSORS
OUTER APPLY sys.dm_exec_sql_text(CURSORS.sql_handle) AS CURSORSQL
LEFT JOIN sys.dm_exec_query_stats AS CURSORSTATS ON CURSORSTATS.sql_handle = CURSORS.sql_handle
OUTER APPLY sys.dm_exec_query_plan(CURSORSTATS.plan_handle) AS CURSORPLAN
ORDER BY req.session_id
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment