Skip to content

Commit c475b84

Browse files
authored
Merge pull request #2838 from gdoddsy/dev-2591
Add a column for Parameters to BlitzWho
2 parents 884d25a + 17080c4 commit c475b84

File tree

1 file changed

+51
-20
lines changed

1 file changed

+51
-20
lines changed

sp_BlitzWho.sql

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ ALTER PROCEDURE dbo.sp_BlitzWho
2020
@MinRequestedMemoryKB INT = 0 ,
2121
@MinBlockingSeconds INT = 0 ,
2222
@CheckDateOverride DATETIMEOFFSET = NULL,
23+
@ShowActualParameters BIT = 0,
2324
@Version VARCHAR(30) = NULL OUTPUT,
2425
@VersionDate DATETIME = NULL OUTPUT,
2526
@VersionCheckMode BIT = 0,
@@ -111,8 +112,6 @@ DECLARE @ProductVersion NVARCHAR(128)
111112
AND r.plan_handle = session_stats.plan_handle
112113
AND r.statement_start_offset = session_stats.statement_start_offset
113114
AND r.statement_end_offset = session_stats.statement_end_offset'
114-
,@QueryStatsXMLselect NVARCHAR(MAX) = N' CAST(COALESCE(qs_live.query_plan, ''<?No live query plan available. To turn on live plans, see https://www.BrentOzar.com/go/liveplans ?>'') AS XML) AS live_query_plan , '
115-
,@QueryStatsXMLSQL NVARCHAR(MAX) = N'OUTER APPLY sys.dm_exec_query_statistics_xml(s.session_id) qs_live'
116115
,@ObjectFullName NVARCHAR(2000)
117116
,@OutputTableNameQueryStats_View NVARCHAR(256)
118117
,@LineFeed NVARCHAR(MAX) /* Had to set as MAX up from 10 as it was truncating the view creation*/;
@@ -123,16 +122,6 @@ SET @SortOrder = REPLACE(LOWER(@SortOrder), N' ', N'_');
123122
SET @ProductVersion = CAST(SERVERPROPERTY('ProductVersion') AS NVARCHAR(128));
124123
SELECT @ProductVersionMajor = SUBSTRING(@ProductVersion, 1,CHARINDEX('.', @ProductVersion) + 1 ),
125124
@ProductVersionMinor = PARSENAME(CONVERT(VARCHAR(32), @ProductVersion), 2)
126-
IF EXISTS (SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('sys.dm_exec_query_statistics_xml') AND name = 'query_plan')
127-
BEGIN
128-
SET @QueryStatsXMLselect = N' CAST(COALESCE(qs_live.query_plan, ''<?No live query plan available. To turn on live plans, see https://www.BrentOzar.com/go/liveplans ?>'') AS XML) AS live_query_plan , ';
129-
SET @QueryStatsXMLSQL = N'OUTER APPLY sys.dm_exec_query_statistics_xml(s.session_id) qs_live';
130-
END
131-
ELSE
132-
BEGIN
133-
SET @QueryStatsXMLselect = N' NULL AS live_query_plan , ';
134-
SET @QueryStatsXMLSQL = N' ';
135-
END
136125

137126
SELECT
138127
@OutputTableNameQueryStats_View = QUOTENAME(@OutputTableName + '_Deltas'),
@@ -173,6 +162,8 @@ IF @OutputDatabaseName IS NOT NULL AND @OutputSchemaName IS NOT NULL AND @Output
173162
[query_text] [nvarchar](max) NULL,
174163
[query_plan] [xml] NULL,
175164
[live_query_plan] [xml] NULL,
165+
[cached_parameter_info] [nvarchar](max) NULL,
166+
[live_parameter_info] [nvarchar](max) NULL,
176167
[query_cost] [float] NULL,
177168
[status] [nvarchar](30) NOT NULL,
178169
[wait_info] [nvarchar](max) NULL,
@@ -566,7 +557,27 @@ SELECT @BlockingCheck = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
566557
sys2.spid AS session_id, sys2.blocked AS blocking_session_id, sys2.lastwaittype, sys2.waittime, sys2.cpu, sys2.physical_io, sys2.memusage
567558
FROM sys.sysprocesses AS sys1
568559
JOIN sys.sysprocesses AS sys2
569-
ON sys1.spid = sys2.blocked;';
560+
ON sys1.spid = sys2.blocked;
561+
562+
563+
DECLARE @LiveQueryPlans TABLE
564+
(
565+
Session_Id INT NOT NULL,
566+
Query_Plan XML NOT NULL
567+
);
568+
569+
'
570+
571+
IF EXISTS (SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('sys.dm_exec_query_statistics_xml') AND name = 'query_plan')
572+
BEGIN
573+
SET @BlockingCheck = @BlockingCheck + N'
574+
INSERT INTO @LiveQueryPlans
575+
SELECT s.session_id, query_plan
576+
FROM sys.dm_exec_sessions AS s
577+
CROSS APPLY sys.dm_exec_query_statistics_xml(s.session_id)
578+
WHERE s.session_id <> @@SPID;';
579+
END
580+
570581

571582
IF @ProductVersionMajor > 9 and @ProductVersionMajor < 11
572583
BEGIN
@@ -788,9 +799,19 @@ IF @ProductVersionMajor >= 11
788799
ELSE query_stats.statement_end_offset
789800
END - query_stats.statement_start_offset )
790801
/ 2 ) + 1), dest.text) AS query_text ,
791-
derp.query_plan ,'
792-
+ @QueryStatsXMLselect
793-
+'
802+
derp.query_plan ,
803+
CAST(COALESCE(qs_live.query_plan, ''<?No live query plan available. To turn on live plans, see https://www.BrentOzar.com/go/liveplans ?>'') AS XML) AS live_query_plan ,
804+
STUFF((SELECT DISTINCT N'', '' + Node.Data.value(''(@Column)[1]'', ''NVARCHAR(4000)'') + N'' {'' + Node.Data.value(''(@ParameterDataType)[1]'', ''NVARCHAR(4000)'') + N''}: '' + Node.Data.value(''(@ParameterCompiledValue)[1]'', ''NVARCHAR(4000)'')
805+
FROM derp.query_plan.nodes(''/*:ShowPlanXML/*:BatchSequence/*:Batch/*:Statements/*:StmtSimple/*:QueryPlan/*:ParameterList/*:ColumnReference'') AS Node(Data)
806+
FOR XML PATH('''')), 1,2,'''')
807+
AS Cached_Parameter_Info,
808+
'
809+
IF @ShowActualParameters = 1
810+
BEGIN
811+
SELECT @StringToExecute = @StringToExecute + N'qs_live.Live_Parameter_Info as Live_Parameter_Info,'
812+
END
813+
814+
SELECT @StringToExecute = @StringToExecute + N'
794815
qmg.query_cost ,
795816
s.status ,
796817
CASE
@@ -1011,10 +1032,18 @@ IF @ProductVersionMajor >= 11
10111032
AND tsu.session_id = r.session_id
10121033
AND tsu.session_id = s.session_id
10131034
) as tempdb_allocations
1014-
'
1015-
+ @QueryStatsXMLSQL
1016-
+
1017-
N'
1035+
1036+
OUTER APPLY (
1037+
SELECT TOP 1 query_plan,
1038+
STUFF((SELECT DISTINCT N'', '' + Node.Data.value(''(@Column)[1]'', ''NVARCHAR(4000)'') + N'' {'' + Node.Data.value(''(@ParameterDataType)[1]'', ''NVARCHAR(4000)'') + N''}: '' + Node.Data.value(''(@ParameterCompiledValue)[1]'', ''NVARCHAR(4000)'') + N'' (Actual: '' + Node.Data.value(''(@ParameterRuntimeValue)[1]'', ''NVARCHAR(4000)'') + N'')''
1039+
FROM q.query_plan.nodes(''/*:ShowPlanXML/*:BatchSequence/*:Batch/*:Statements/*:StmtSimple/*:QueryPlan/*:ParameterList/*:ColumnReference'') AS Node(Data)
1040+
FOR XML PATH('''')), 1,2,'''')
1041+
AS Live_Parameter_Info
1042+
FROM @LiveQueryPlans q
1043+
WHERE (s.session_id = q.session_id)
1044+
1045+
) AS qs_live
1046+
10181047
WHERE s.session_id <> @@SPID
10191048
AND s.host_name IS NOT NULL
10201049
AND r.database_id NOT IN (SELECT database_id FROM #WhoReadableDBs)
@@ -1104,6 +1133,8 @@ IF @OutputDatabaseName IS NOT NULL AND @OutputSchemaName IS NOT NULL AND @Output
11041133
,[query_text]
11051134
,[query_plan]'
11061135
+ CASE WHEN @ProductVersionMajor >= 11 THEN N',[live_query_plan]' ELSE N'' END + N'
1136+
,[Cached_Parameter_Info]'
1137+
+ CASE WHEN @ProductVersionMajor >= 11 AND @ShowActualParameters = 1 THEN N',[Live_Parameter_Info]' ELSE N'' END + N'
11071138
,[query_cost]
11081139
,[status]
11091140
,[wait_info]'

0 commit comments

Comments
 (0)