Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 4edfcc3

Browse files
Adds Expert Mode
Closes BrentOzarULTD#1188 Closes BrentOzarULTD#1255 Closes BrentOzarULTD#1203
1 parent fdf5251 commit 4edfcc3

File tree

1 file changed

+102
-73
lines changed

1 file changed

+102
-73
lines changed

‎sp_BlitzWho.sql‎

Lines changed: 102 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ GO
55
ALTER PROCEDURE dbo.sp_BlitzWho
66
@Help TINYINT = 0 ,
77
@ShowSleepingSPIDs TINYINT = 0,
8+
@ExpertMode BIT = 0,
89
@Debug BIT = 0,
910
@VersionDate DATETIME = NULL OUTPUT
1011
AS
@@ -146,8 +147,6 @@ SET @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
146147
) AS [elapsed_time] ,
147148
s.session_id ,
148149
COALESCE(DB_NAME(r.database_id), DB_NAME(blocked.dbid), ''N/A'') AS database_name,
149-
COALESCE(wt.wait_info, RTRIM(blocked.lastwaittype) + '' ('' + CONVERT(VARCHAR(10), blocked.waittime) + '')'' ) AS wait_info ,
150-
s.status ,
151150
ISNULL(SUBSTRING(dest.text,
152151
( query_stats.statement_start_offset / 2 ) + 1,
153152
( ( CASE query_stats.statement_end_offset
@@ -156,22 +155,44 @@ SET @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
156155
END - query_stats.statement_start_offset )
157156
/ 2 ) + 1), dest.text) AS query_text ,
158157
derp.query_plan ,
159-
qmg.query_cost ,
160-
CASE WHEN r.blocking_session_id <> 0 AND blocked.session_id IS NULL THEN r.blocking_session_id
161-
WHEN r.blocking_session_id <> 0 AND s.session_id <> blocked.blocking_session_id THEN blocked.blocking_session_id
162-
ELSE NULL END
163-
AS blocking_session_id,
164-
COALESCE(r.cpu_time, s.cpu_time) AS request_cpu_time,
158+
qmg.query_cost ,
159+
s.status ,
160+
COALESCE(wt.wait_info, RTRIM(blocked.lastwaittype) + '' ('' + CONVERT(VARCHAR(10),
161+
blocked.waittime) + '')'' ) AS wait_info ,
162+
CASE WHEN r.blocking_session_id <> 0 AND blocked.session_id IS NULL
163+
THEN r.blocking_session_id
164+
WHEN r.blocking_session_id <> 0 AND s.session_id <> blocked.blocking_session_id
165+
THEN blocked.blocking_session_id
166+
ELSE NULL
167+
END AS blocking_session_id,
168+
COALESCE(r.open_transaction_count, blocked.open_tran) AS open_transaction_count ,
169+
s.nt_domain ,
170+
s.host_name ,
171+
s.login_name ,
172+
s.nt_user_name ,
173+
s.program_name
174+
'
175+
176+
IF @ExpertMode = 1
177+
BEGIN
178+
SET @StringToExecute +=
179+
N',
180+
s.client_interface_name ,
181+
s.login_time ,
182+
r.start_time ,
183+
qmg.request_time ,
184+
COALESCE(r.cpu_time, s.cpu_time) AS request_cpu_time,
165185
COALESCE(r.logical_reads, s.logical_reads) AS request_logical_reads,
166186
COALESCE(r.writes, s.writes) AS request_writes,
167187
COALESCE(r.reads, s.reads) AS request_physical_reads ,
168188
s.cpu_time AS session_cpu,
169-
tempdb_allocations.tempdb_allocations_mb,
170189
s.logical_reads AS session_logical_reads,
171190
s.reads AS session_physical_reads ,
172-
s.writes AS session_writes,
191+
s.writes AS session_writes,
192+
tempdb_allocations.tempdb_allocations_mb,
173193
s.memory_usage ,
174-
r.estimated_completion_time ,
194+
r.estimated_completion_time ,
195+
r.percent_complete ,
175196
r.deadlock_priority ,
176197
CASE
177198
WHEN s.transaction_isolation_level = 0 THEN ''Unspecified''
@@ -182,10 +203,8 @@ SET @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
182203
WHEN s.transaction_isolation_level = 4 THEN ''Serializable''
183204
WHEN s.transaction_isolation_level = 5 THEN ''Snapshot''
184205
ELSE ''WHAT HAVE YOU DONE?''
185-
END AS transaction_isolation_level ,
186-
COALESCE(r.open_transaction_count, blocked.open_tran) AS open_transaction_count ,
187-
qmg.dop AS degree_of_parallelism ,
188-
qmg.request_time ,
206+
END AS transaction_isolation_level ,
207+
qmg.dop AS degree_of_parallelism ,
189208
COALESCE(CAST(qmg.grant_time AS VARCHAR(20)), ''N/A'') AS grant_time ,
190209
qmg.requested_memory_kb ,
191210
qmg.granted_memory_kb AS grant_memory_kb,
@@ -195,7 +214,7 @@ SET @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
195214
ELSE ''Memory Request Granted''
196215
END AS is_request_granted ,
197216
qmg.required_memory_kb ,
198-
qmg.used_memory_kb ,
217+
qmg.used_memory_kb AS query_memory_grant_used_memory_kb,
199218
qmg.ideal_memory_kb ,
200219
qmg.is_small ,
201220
qmg.timeout_sec ,
@@ -214,24 +233,20 @@ SET @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
214233
qrs.total_memory_kb ,
215234
qrs.available_memory_kb ,
216235
qrs.granted_memory_kb ,
217-
qrs.used_memory_kb ,
236+
qrs.used_memory_kb AS query_resource_semaphore_used_memory_kb,
218237
qrs.grantee_count ,
219238
qrs.waiter_count ,
220239
qrs.timeout_error_count ,
221240
COALESCE(CAST(qrs.forced_grant_count AS VARCHAR(20)),
222241
''Small Query Resource Semaphore'') AS forced_grant_count,
223-
s.nt_domain ,
224-
s.host_name ,
225-
s.login_name ,
226-
s.nt_user_name ,
227-
s.program_name ,
228-
s.client_interface_name ,
229-
s.login_time ,
230-
r.start_time ,
231-
r.percent_complete ,
232242
wg.name AS workload_group_name ,
233-
rp.name AS resource_pool_name
234-
FROM sys.dm_exec_sessions AS s
243+
rp.name AS resource_pool_name,
244+
CONVERT(VARCHAR(128), r.context_info) AS context_info
245+
'
246+
END
247+
248+
SET @StringToExecute +=
249+
N'FROM sys.dm_exec_sessions AS s
235250
LEFT JOIN sys.dm_exec_requests AS r
236251
ON r.session_id = s.session_id
237252
LEFT JOIN ( SELECT DISTINCT
@@ -341,51 +356,64 @@ SELECT @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
341356
) AS [elapsed_time] ,
342357
s.session_id ,
343358
COALESCE(DB_NAME(r.database_id), DB_NAME(blocked.dbid), ''N/A'') AS database_name,
344-
COALESCE(wt.wait_info, RTRIM(blocked.lastwaittype) + '' ('' + CONVERT(VARCHAR(10), blocked.waittime) + '')'' ) AS wait_info ,
345-
'+
346-
CASE @SessionWaits
347-
WHEN 1 THEN + N'SUBSTRING(wt2.session_wait_info, 0, LEN(wt2.session_wait_info) ) AS top_session_waits ,'
348-
ELSE N''
349-
END
350-
+
351-
CASE @QueryStatsXML
352-
WHEN 1 THEN + @QueryStatsXMLselect
353-
ELSE N''
354-
END
355-
+'
356-
s.status ,
357359
ISNULL(SUBSTRING(dest.text,
358360
( query_stats.statement_start_offset / 2 ) + 1,
359361
( ( CASE query_stats.statement_end_offset
360362
WHEN -1 THEN DATALENGTH(dest.text)
361363
ELSE query_stats.statement_end_offset
362364
END - query_stats.statement_start_offset )
363365
/ 2 ) + 1), dest.text) AS query_text ,
364-
derp.query_plan ,
365-
qmg.query_cost ,
366-
CASE WHEN r.blocking_session_id <> 0 AND blocked.session_id IS NULL THEN r.blocking_session_id
367-
WHEN r.blocking_session_id <> 0 AND s.session_id <> blocked.blocking_session_id THEN blocked.blocking_session_id
368-
ELSE NULL END
369-
AS blocking_session_id,
370-
COALESCE(r.cpu_time, s.cpu_time) AS request_cpu_time,
366+
derp.query_plan ,'
367+
+
368+
CASE @QueryStatsXML
369+
WHEN 1 THEN + @QueryStatsXMLselect
370+
ELSE N''
371+
END
372+
+'
373+
qmg.query_cost ,
374+
s.status ,
375+
COALESCE(wt.wait_info, RTRIM(blocked.lastwaittype) + '' ('' + CONVERT(VARCHAR(10), blocked.waittime) + '')'' ) AS wait_info ,'
376+
+
377+
CASE @SessionWaits
378+
WHEN 1 THEN + N'SUBSTRING(wt2.session_wait_info, 0, LEN(wt2.session_wait_info) ) AS top_session_waits ,'
379+
ELSE N''
380+
END
381+
+
382+
N'CASE WHEN r.blocking_session_id <> 0 AND blocked.session_id IS NULL
383+
THEN r.blocking_session_id
384+
WHEN r.blocking_session_id <> 0 AND s.session_id <> blocked.blocking_session_id
385+
THEN blocked.blocking_session_id
386+
ELSE NULL
387+
END AS blocking_session_id,
388+
COALESCE(r.open_transaction_count, blocked.open_tran) AS open_transaction_count ,
389+
s.nt_domain ,
390+
s.host_name ,
391+
s.login_name ,
392+
s.nt_user_name ,
393+
s.program_name
394+
'
395+
IF @ExpertMode = 1
396+
BEGIN
397+
SET @StringToExecute +=
398+
N',
399+
s.client_interface_name ,
400+
s.login_time ,
401+
r.start_time ,
402+
qmg.request_time ,
403+
COALESCE(r.cpu_time, s.cpu_time) AS request_cpu_time,
371404
COALESCE(r.logical_reads, s.logical_reads) AS request_logical_reads,
372405
COALESCE(r.writes, s.writes) AS request_writes,
373406
COALESCE(r.reads, s.reads) AS request_physical_reads ,
374407
s.cpu_time AS session_cpu,
375-
tempdb_allocations.tempdb_allocations_mb,
376408
s.logical_reads AS session_logical_reads,
377409
s.reads AS session_physical_reads ,
378410
s.writes AS session_writes,
411+
tempdb_allocations.tempdb_allocations_mb,
379412
s.memory_usage ,
380413
r.estimated_completion_time ,
381-
r.deadlock_priority ,'
382-
+
383-
CASE @EnhanceFlag
384-
WHEN 1 THEN @EnhanceSQL
385-
ELSE N''
386-
END
387-
+
388-
N'CASE
414+
r.percent_complete ,
415+
r.deadlock_priority ,
416+
CASE
389417
WHEN s.transaction_isolation_level = 0 THEN ''Unspecified''
390418
WHEN s.transaction_isolation_level = 1 THEN ''Read Uncommitted''
391419
WHEN s.transaction_isolation_level = 2 AND EXISTS (SELECT 1 FROM sys.dm_tran_active_snapshot_database_transactions AS trn WHERE s.session_id = trn.session_id AND is_snapshot = 0 ) THEN ''Read Committed Snapshot Isolation''
@@ -395,9 +423,14 @@ SELECT @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
395423
WHEN s.transaction_isolation_level = 5 THEN ''Snapshot''
396424
ELSE ''WHAT HAVE YOU DONE?''
397425
END AS transaction_isolation_level ,
398-
COALESCE(r.open_transaction_count, blocked.open_tran) AS open_transaction_count ,
399-
qmg.dop AS degree_of_parallelism ,
400-
qmg.request_time ,
426+
qmg.dop AS degree_of_parallelism , '
427+
+
428+
CASE @EnhanceFlag
429+
WHEN 1 THEN @EnhanceSQL
430+
ELSE N''
431+
END
432+
+
433+
N'
401434
COALESCE(CAST(qmg.grant_time AS VARCHAR(20)), ''Memory Not Granted'') AS grant_time ,
402435
qmg.requested_memory_kb ,
403436
qmg.granted_memory_kb AS grant_memory_kb,
@@ -407,7 +440,7 @@ SELECT @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
407440
ELSE ''Memory Request Granted''
408441
END AS is_request_granted ,
409442
qmg.required_memory_kb ,
410-
qmg.used_memory_kb ,
443+
qmg.used_memory_kb AS query_memory_grant_used_memory_kb,
411444
qmg.ideal_memory_kb ,
412445
qmg.is_small ,
413446
qmg.timeout_sec ,
@@ -426,24 +459,20 @@ SELECT @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
426459
qrs.total_memory_kb ,
427460
qrs.available_memory_kb ,
428461
qrs.granted_memory_kb ,
429-
qrs.used_memory_kb ,
462+
qrs.used_memory_kb AS query_resource_semaphore_used_memory_kb,
430463
qrs.grantee_count ,
431464
qrs.waiter_count ,
432465
qrs.timeout_error_count ,
433466
COALESCE(CAST(qrs.forced_grant_count AS VARCHAR(20)),
434467
''Small Query Resource Semaphore'') AS forced_grant_count,
435-
s.nt_domain ,
436-
s.host_name ,
437-
s.login_name ,
438-
s.nt_user_name ,
439-
s.program_name ,
440-
s.client_interface_name ,
441-
s.login_time ,
442-
r.start_time ,
443-
r.percent_complete ,
444468
wg.name AS workload_group_name,
445-
rp.name AS resource_pool_name
446-
FROM sys.dm_exec_sessions AS s
469+
rp.name AS resource_pool_name,
470+
CONVERT(VARCHAR(128), r.context_info) AS context_info
471+
'
472+
END
473+
474+
SET @StringToExecute +=
475+
N'FROM sys.dm_exec_sessions AS s
447476
LEFT JOIN sys.dm_exec_requests AS r
448477
ON r.session_id = s.session_id
449478
LEFT JOIN ( SELECT DISTINCT

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /