|
| 1 | +-- Set the transaction isolation level to READ UNCOMMITTED |
| 2 | +SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
| 3 | + |
| 4 | +-- Common Table Expression to calculate the maximum execution count for each plan handle |
| 5 | +WITH ExecutionCounts AS ( |
| 6 | + SELECT plan_handle, MAX(usecounts) AS execution_count |
| 7 | + FROM sys.dm_exec_cached_plans |
| 8 | + GROUP BY plan_handle |
| 9 | +) |
| 10 | + |
| 11 | +-- Retrieve session and performance details |
| 12 | +SELECT |
| 13 | + er.session_id AS SPID, -- Session ID |
| 14 | + CASE WHEN EXISTS ( |
| 15 | + SELECT 1 |
| 16 | + FROM master.dbo.sysprocesses sp |
| 17 | + WHERE sp.blocked = er.session_id |
| 18 | + ) THEN -1 ELSE er.blocking_session_id END AS BlkBy, -- Blocking Session ID (if exists), otherwise Blocking Session ID |
| 19 | + er.total_elapsed_time AS ElapsedMS, -- Total elapsed time |
| 20 | + er.cpu_time AS CPU, -- CPU time |
| 21 | + er.logical_reads + er.reads AS IOReads, -- I/O reads |
| 22 | + er.writes AS IOWrites, -- I/O writes |
| 23 | + ec.execution_count AS Executions, -- Execution count |
| 24 | + er.command AS CommandType, -- Command type |
| 25 | + er.last_wait_type AS LastWaitType, -- Last wait type |
| 26 | + OBJECT_SCHEMA_NAME(qt.objectid, dbid) + '.' + OBJECT_NAME(qt.objectid, qt.dbid) AS ObjectName, -- Object name |
| 27 | + er.wait_resource AS waitresource, -- Wait resource |
| 28 | + SUBSTRING(qt.text, (er.statement_start_offset + 2) / 2, |
| 29 | + (CASE WHEN er.statement_end_offset = -1 |
| 30 | + THEN LEN(CONVERT(nvarchar(MAX), qt.text)) * 2 |
| 31 | + ELSE (er.statement_end_offset - er.statement_start_offset + 2) / 2 |
| 32 | + END)) AS SQLStatement, -- SQL statement |
| 33 | + ses.STATUS AS [STATUS], -- Session status |
| 34 | + ses.login_name AS [Login], -- Login name |
| 35 | + ses.host_name AS Host, -- Host name |
| 36 | + DB_Name(er.database_id) AS DBName, -- Database name |
| 37 | + er.start_time AS StartTime, -- Start time |
| 38 | + con.net_transport AS Protocol, -- Network protocol |
| 39 | + CASE ses.transaction_isolation_level |
| 40 | + WHEN 0 THEN 'Unspecified' |
| 41 | + WHEN 1 THEN 'Read Uncommitted' |
| 42 | + WHEN 2 THEN 'Read Committed' |
| 43 | + WHEN 3 THEN 'Repeatable' |
| 44 | + WHEN 4 THEN 'Serializable' |
| 45 | + WHEN 5 THEN 'Snapshot' |
| 46 | + END AS transaction_isolation, -- Transaction isolation level |
| 47 | + con.num_writes AS ConnectionWrites, -- Connection writes |
| 48 | + con.num_reads AS ConnectionReads, -- Connection reads |
| 49 | + con.client_net_address AS ClientAddress, -- Client address |
| 50 | + con.auth_scheme AS Authentication, -- Authentication scheme |
| 51 | + GETDATE() AS DatetimeSnapshot -- Current datetime |
| 52 | +FROM sys.dm_exec_requests er |
| 53 | +LEFT JOIN sys.dm_exec_sessions ses ON ses.session_id = er.session_id |
| 54 | +LEFT JOIN sys.dm_exec_connections con ON con.session_id = ses.session_id |
| 55 | +OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt |
| 56 | +OUTER APPLY ( |
| 57 | + SELECT MAX(execution_count) AS execution_count |
| 58 | + FROM ExecutionCounts |
| 59 | + WHERE plan_handle = er.plan_handle |
| 60 | +) ec |
| 61 | +WHERE er.session_id <> @@SPID -- Exclude the current session |
| 62 | +AND ses.status = 'running' -- Show only running status |
| 63 | +ORDER BY |
| 64 | + er.blocking_session_id DESC, -- Sort by blocking session ID (descending) |
| 65 | + IOReads DESC, -- Sort by I/O reads (descending) |
| 66 | + er.session_id; -- Sort by session ID |
0 commit comments