Skip to content

Commit 8a98a3c

Browse files
authored
Merge pull request BrentOzarULTD#1317 from BrentOzarULTD/Issue_1316
Issue 1316
2 parents d8b53fc + cdbc2cd commit 8a98a3c

File tree

2 files changed

+72
-32
lines changed

2 files changed

+72
-32
lines changed

sp_BlitzCache.sql

+35-15
Original file line numberDiff line numberDiff line change
@@ -1147,9 +1147,7 @@ CREATE TABLE #stored_proc_info
11471147
compile_time_value NVARCHAR(128),
11481148
proc_name NVARCHAR(300),
11491149
column_name NVARCHAR(128),
1150-
converted_to NVARCHAR(128),
1151-
parameterization_type INT,
1152-
optimization_level VARCHAR(100)
1150+
converted_to NVARCHAR(128)
11531151
);
11541152

11551153
CREATE TABLE #plan_creation
@@ -3086,7 +3084,7 @@ OPTION (RECOMPILE);
30863084
IF EXISTS ( SELECT 1
30873085
FROM ##bou_BlitzCacheProcs AS bbcp
30883086
WHERE bbcp.implicit_conversions = 1
3089-
OR bbcp.QueryType LIKE 'Procedure or Function:%')
3087+
OR bbcp.QueryType LIKE '%Procedure or Function: %')
30903088
BEGIN
30913089

30923090
RAISERROR(N'Getting information about implicit conversions and stored proc parameters', 0, 1) WITH NOWAIT;
@@ -3105,7 +3103,8 @@ SELECT DISTINCT @@SPID,
31053103
q.n.value('@ParameterCompiledValue', 'NVARCHAR(1000)') AS compile_time_value
31063104
FROM #query_plan AS qp
31073105
JOIN ##bou_BlitzCacheProcs AS b
3108-
ON b.QueryHash = qp.QueryHash
3106+
ON (b.QueryType = 'adhoc' AND b.QueryHash = qp.QueryHash)
3107+
OR (b.QueryType <> 'adhoc' AND b.SqlHandle = qp.SqlHandle)
31093108
CROSS APPLY qp.query_plan.nodes('//p:QueryPlan/p:ParameterList/p:ColumnReference') AS q(n)
31103109
WHERE b.SPID = @@SPID
31113110
OPTION ( RECOMPILE );
@@ -3122,7 +3121,8 @@ SELECT DISTINCT @@SPID,
31223121
qq.c.value('@Expression', 'NVARCHAR(128)') AS expression
31233122
FROM #query_plan AS qp
31243123
JOIN ##bou_BlitzCacheProcs AS b
3125-
ON b.QueryHash = qp.QueryHash
3124+
ON (b.QueryType = 'adhoc' AND b.QueryHash = qp.QueryHash)
3125+
OR (b.QueryType <> 'adhoc' AND b.SqlHandle = qp.SqlHandle)
31263126
CROSS APPLY qp.query_plan.nodes('//p:QueryPlan/p:Warnings/p:PlanAffectingConvert') AS qq(c)
31273127
WHERE qq.c.exist('@ConvertIssue[.="Seek Plan"]') = 1
31283128
AND qp.QueryHash IS NOT NULL
@@ -3175,15 +3175,32 @@ SELECT @@SPID AS SPID,
31753175
FROM #conversion_info AS ci
31763176
OPTION ( RECOMPILE );
31773177

3178-
RAISERROR(N'Updating variables', 0, 1) WITH NOWAIT;
3179-
UPDATE sp
3180-
SET sp.variable_datatype = vi.variable_datatype,
3181-
sp.compile_time_value = vi.compile_time_value
3182-
FROM #stored_proc_info AS sp
3183-
JOIN #variable_info AS vi
3184-
ON sp.QueryHash = vi.QueryHash
3185-
AND sp.variable_name = vi.variable_name
3186-
OPTION ( RECOMPILE );
3178+
IF EXISTS ( SELECT *
3179+
FROM #stored_proc_info AS sp
3180+
JOIN #variable_info AS vi
3181+
ON (sp.proc_name = 'adhoc' AND sp.QueryHash = vi.QueryHash)
3182+
OR (sp.proc_name <> 'adhoc' AND sp.SqlHandle = vi.SqlHandle)
3183+
AND sp.variable_name = vi.variable_name )
3184+
BEGIN
3185+
RAISERROR(N'Updating variables', 0, 1) WITH NOWAIT;
3186+
UPDATE sp
3187+
SET sp.variable_datatype = vi.variable_datatype,
3188+
sp.compile_time_value = vi.compile_time_value
3189+
FROM #stored_proc_info AS sp
3190+
JOIN #variable_info AS vi
3191+
ON (sp.proc_name = 'adhoc' AND sp.QueryHash = vi.QueryHash)
3192+
OR (sp.proc_name <> 'adhoc' AND sp.SqlHandle = vi.SqlHandle)
3193+
AND sp.variable_name = vi.variable_name
3194+
OPTION ( RECOMPILE );
3195+
END
3196+
ELSE
3197+
BEGIN
3198+
RAISERROR(N'Inserting variables', 0, 1) WITH NOWAIT;
3199+
INSERT #stored_proc_info ( SPID, SqlHandle, QueryHash, variable_name, variable_datatype, compile_time_value, proc_name )
3200+
SELECT vi.SPID, vi.SqlHandle, vi.QueryHash, vi.variable_name, vi.variable_datatype, vi.compile_time_value, vi.proc_name
3201+
FROM #variable_info AS vi
3202+
OPTION ( RECOMPILE );
3203+
END
31873204

31883205
RAISERROR(N'Updating procs', 0, 1) WITH NOWAIT;
31893206
UPDATE s
@@ -3201,6 +3218,9 @@ SET s.variable_datatype = CASE WHEN s.variable_datatype LIKE '%(%)%' THEN
32013218
CHARINDEX(')', s.compile_time_value) - 1
32023219
- CHARINDEX('(', s.compile_time_value)
32033220
)
3221+
WHEN variable_datatype NOT IN ('bit', 'tinyint', 'smallint', 'int', 'bigint')
3222+
AND s.variable_datatype NOT LIKE '%binary%' THEN
3223+
QUOTENAME(compile_time_value, '''')
32043224
ELSE s.compile_time_value
32053225
END
32063226
FROM #stored_proc_info AS s

sp_BlitzQueryStore.sql

+37-17
Original file line numberDiff line numberDiff line change
@@ -778,9 +778,7 @@ CREATE TABLE #stored_proc_info
778778
compile_time_value NVARCHAR(128),
779779
proc_name NVARCHAR(300),
780780
column_name NVARCHAR(128),
781-
converted_to NVARCHAR(128),
782-
parameterization_type INT,
783-
optimization_level VARCHAR(100),
781+
converted_to NVARCHAR(128)
784782
INDEX tf_ix_ids CLUSTERED (sql_handle, query_hash)
785783
);
786784

@@ -2969,8 +2967,9 @@ IF EXISTS ( SELECT 1
29692967
q.n.value('@ParameterDataType', 'NVARCHAR(128)') AS variable_datatype,
29702968
q.n.value('@ParameterCompiledValue', 'NVARCHAR(1000)') AS compile_time_value
29712969
FROM #query_plan AS qp
2972-
JOIN #working_warnings AS b
2973-
ON b.query_hash = qp.query_hash
2970+
JOIN #working_warnings AS b
2971+
ON (b.query_hash = qp.query_hash AND b.proc_or_function_name = 'adhoc')
2972+
OR (b.sql_handle = qp.sql_handle AND b.proc_or_function_name <> 'adhoc')
29742973
CROSS APPLY qp.query_plan.nodes('//p:QueryPlan/p:ParameterList/p:ColumnReference') AS q(n)
29752974
OPTION ( RECOMPILE );
29762975

@@ -2983,8 +2982,9 @@ IF EXISTS ( SELECT 1
29832982
b.proc_or_function_name AS proc_name,
29842983
qq.c.value('@Expression', 'NVARCHAR(128)') AS expression
29852984
FROM #query_plan AS qp
2986-
JOIN #working_warnings AS b
2987-
ON b.query_hash = qp.query_hash
2985+
JOIN #working_warnings AS b
2986+
ON (b.query_hash = qp.query_hash AND b.proc_or_function_name = 'adhoc')
2987+
OR (b.sql_handle = qp.sql_handle AND b.proc_or_function_name <> 'adhoc')
29882988
CROSS APPLY qp.query_plan.nodes('//p:QueryPlan/p:Warnings/p:PlanAffectingConvert') AS qq(c)
29892989
WHERE qq.c.exist('@ConvertIssue[.="Seek Plan"]') = 1
29902990
AND b.implicit_conversions = 1
@@ -3034,15 +3034,32 @@ IF EXISTS ( SELECT 1
30343034
FROM #conversion_info AS ci
30353035
OPTION ( RECOMPILE );
30363036

3037-
RAISERROR(N'Updating variables', 0, 1) WITH NOWAIT;
3038-
UPDATE sp
3039-
SET sp.variable_datatype = vi.variable_datatype,
3040-
sp.compile_time_value = vi.compile_time_value
3041-
FROM #stored_proc_info AS sp
3042-
JOIN #variable_info AS vi
3043-
ON sp.query_hash = vi.query_hash
3044-
AND sp.variable_name = vi.variable_name
3045-
OPTION ( RECOMPILE );
3037+
IF EXISTS ( SELECT *
3038+
FROM #stored_proc_info AS sp
3039+
JOIN #variable_info AS vi
3040+
ON (sp.proc_name = 'adhoc' AND sp.query_hash = vi.query_hash)
3041+
OR (sp.proc_name <> 'adhoc' AND sp.sql_handle = vi.sql_handle)
3042+
AND sp.variable_name = vi.variable_name )
3043+
BEGIN
3044+
RAISERROR(N'Updating variables', 0, 1) WITH NOWAIT;
3045+
UPDATE sp
3046+
SET sp.variable_datatype = vi.variable_datatype,
3047+
sp.compile_time_value = vi.compile_time_value
3048+
FROM #stored_proc_info AS sp
3049+
JOIN #variable_info AS vi
3050+
ON (sp.proc_name = 'adhoc' AND sp.query_hash = vi.query_hash)
3051+
OR (sp.proc_name <> 'adhoc' AND sp.sql_handle = vi.sql_handle)
3052+
AND sp.variable_name = vi.variable_name
3053+
OPTION ( RECOMPILE );
3054+
END
3055+
ELSE
3056+
BEGIN
3057+
RAISERROR(N'Inserting variables', 0, 1) WITH NOWAIT;
3058+
INSERT #stored_proc_info ( sql_handle, query_hash, variable_name, variable_datatype, compile_time_value, proc_name )
3059+
SELECT vi.sql_handle, vi.query_hash, vi.variable_name, vi.variable_datatype, vi.compile_time_value, vi.proc_name
3060+
FROM #variable_info AS vi
3061+
OPTION ( RECOMPILE );
3062+
END
30463063

30473064
RAISERROR(N'Updating procs', 0, 1) WITH NOWAIT;
30483065
UPDATE s
@@ -3060,7 +3077,10 @@ IF EXISTS ( SELECT 1
30603077
CHARINDEX(')', s.compile_time_value) - 1
30613078
- CHARINDEX('(', s.compile_time_value)
30623079
)
3063-
ELSE s.compile_time_value
3080+
WHEN variable_datatype NOT IN ('bit', 'tinyint', 'smallint', 'int', 'bigint')
3081+
AND s.variable_datatype NOT LIKE '%binary%' THEN
3082+
QUOTENAME(compile_time_value, '''')
3083+
ELSE s.compile_time_value
30643084
END
30653085
FROM #stored_proc_info AS s
30663086
OPTION(RECOMPILE);

0 commit comments

Comments
 (0)