@@ -1559,24 +1559,50 @@ WHERE ##bou_BlitzCacheProcs.QueryHash = x.QueryHash
1559
1559
OPTION (RECOMPILE ) ;
1560
1560
1561
1561
-- statement level checks
1562
- WITH XMLNAMESPACES(' http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
1563
- UPDATE ##bou_BlitzCacheProcs
1564
- SET QueryPlanCost = CASE WHEN QueryType LIKE ' %Stored Procedure%' THEN
1565
- statement .value (' sum(/p:StmtSimple/@StatementSubTreeCost)' , ' float' )
1566
- ELSE
1567
- statement .value (' sum(/p:StmtSimple[xs:hexBinary(substring(@QueryPlanHash, 3)) = xs:hexBinary(sql:column("QueryPlanHash"))]/@StatementSubTreeCost)' , ' float' )
1568
- END ,
1569
- compile_timeout = CASE WHEN statement .exist(' /p:StmtSimple/@StatementOptmEarlyAbortReason[.="TimeOut"]' ) = 1 THEN 1 END ,
1570
- compile_memory_limit_exceeded = CASE WHEN statement .exist(' /p:StmtSimple/@StatementOptmEarlyAbortReason[.="MemoryLimitExceeded"]' ) = 1 THEN 1 END ,
1571
- unmatched_index_count = statement .value (' count(//p:UnmatchedIndexes/Parameterization/Object)' , ' int' ) ,
1572
- is_trivial = CASE WHEN statement .exist(' /p:StmtSimple[@StatementOptmLevel[.="TRIVIAL"]]/p:QueryPlan/p:ParameterList' ) = 1 THEN 1 END ,
1573
- unparameterized_query = CASE WHEN statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/p:QueryPlan/p:ParameterList' ) = 1 AND
1574
- statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/p:QueryPlan/p:ParameterList/p:ColumnReference' ) = 0 THEN 1
1575
- WHEN statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/p:QueryPlan/p:ParameterList' ) = 0 AND
1576
- statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/*/p:RelOp/descendant::p:ScalarOperator/p:Identifier/p:ColumnReference[contains(@Column, "@")]' ) = 1 THEN 1
1577
- END
1578
- FROM #statements s
1579
- WHERE s .QueryHash = ##bou_BlitzCacheProcs .QueryHash
1562
+ ;WITH XMLNAMESPACES(' http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
1563
+ , c1 AS (
1564
+ SELECT
1565
+ QueryPlanCost_check = CASE WHEN QueryType LIKE ' %Stored Procedure%' THEN
1566
+ statement .value (' sum(/p:StmtSimple/@StatementSubTreeCost)' , ' float' )
1567
+ ELSE
1568
+ statement .value (' sum(/p:StmtSimple[xs:hexBinary(substring(@QueryPlanHash, 3)) = xs:hexBinary(sql:column("QueryPlanHash"))]/@StatementSubTreeCost)' , ' float' )
1569
+ END ,
1570
+ compile_timeout_check = CASE WHEN statement .exist(' /p:StmtSimple/@StatementOptmEarlyAbortReason[.="TimeOut"]' ) = 1 THEN 1 END ,
1571
+ compile_memory_limit_exceeded_check = CASE WHEN statement .exist(' /p:StmtSimple/@StatementOptmEarlyAbortReason[.="MemoryLimitExceeded"]' ) = 1 THEN 1 END ,
1572
+ unmatched_index_count_check = statement .value (' count(//p:UnmatchedIndexes/Parameterization/Object)' , ' int' ) ,
1573
+ is_trivial_check = CASE WHEN statement .exist(' /p:StmtSimple[@StatementOptmLevel[.="TRIVIAL"]]/p:QueryPlan/p:ParameterList' ) = 1 THEN 1 END ,
1574
+ unparameterized_query_check = CASE WHEN statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/p:QueryPlan/p:ParameterList' ) = 1 AND
1575
+ statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/p:QueryPlan/p:ParameterList/p:ColumnReference' ) = 0 THEN 1
1576
+ WHEN statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/p:QueryPlan/p:ParameterList' ) = 0 AND
1577
+ statement .exist(' //p:StmtSimple[@StatementOptmLevel[.="FULL"]]/*/p:RelOp/descendant::p:ScalarOperator/p:Identifier/p:ColumnReference[contains(@Column, "@")]' ) = 1 THEN 1
1578
+ END ,
1579
+ s .QueryHash
1580
+ FROM #statements s
1581
+ JOIN ##bou_BlitzCacheProcs b
1582
+ ON b .QueryHash = s .QueryHash
1583
+ ), c2 AS (
1584
+ SELECT
1585
+ QueryHash,
1586
+ QueryPlanCost = MAX ([c1].[QueryPlanCost_check]) ,
1587
+ compile_timeout = MAX ([c1].[compile_timeout_check]) ,
1588
+ compile_memory_limit_exceeded = MAX ([c1].[compile_memory_limit_exceeded_check]) ,
1589
+ unmatched_index_count = MAX ([c1].[unmatched_index_count_check]) ,
1590
+ is_trivial = MAX ([c1].[is_trivial_check]) ,
1591
+ unparameterized_query = MAX ([c1].[unparameterized_query_check])
1592
+ FROM c1
1593
+ GROUP BY QueryHash
1594
+ )
1595
+ UPDATE b
1596
+ SET
1597
+ b .QueryPlanCost = c2 .QueryPlanCost ,
1598
+ b .compile_timeout = c2 .compile_timeout ,
1599
+ b .compile_memory_limit_exceeded = c2 .compile_memory_limit_exceeded ,
1600
+ b .unmatched_index_count = c2 .unmatched_index_count ,
1601
+ b .is_trivial = c2 .is_trivial ,
1602
+ b .unparameterized_query = c2 .unparameterized_query
1603
+ FROM [c2] AS c2
1604
+ JOIN ##bou_BlitzCacheProcs AS b
1605
+ ON c2 .QueryHash = b .QueryHash
1580
1606
OPTION (RECOMPILE );
1581
1607
1582
1608
-- query level checks
@@ -2127,7 +2153,7 @@ BEGIN
2127
2153
CASE WHEN compile_memory_limit_exceeded = 1 THEN '' , 19'' ELSE '' '' END +
2128
2154
CASE WHEN busy_loops = 1 THEN '' , 16'' ELSE '' '' END +
2129
2155
CASE WHEN is_forced_plan = 1 THEN '' , 3'' ELSE '' '' END +
2130
- CASE WHEN is_forced_parameterized = 1 THEN '' , 5'' ELSE '' '' END +
2156
+ CASE WHEN is_forced_parameterized > 0 THEN '' , 5'' ELSE '' '' END +
2131
2157
CASE WHEN unparameterized_query = 1 THEN '' , 23'' ELSE '' '' END +
2132
2158
CASE WHEN missing_index_count > 0 THEN '' , 10'' ELSE '' '' END +
2133
2159
CASE WHEN unmatched_index_count > 0 THEN '' , 22'' ELSE '' '' END +
@@ -2142,9 +2168,8 @@ BEGIN
2142
2168
CASE WHEN implicit_conversions = 1 THEN '' , 14'' ELSE '' '' END +
2143
2169
CASE WHEN tvf_join = 1 THEN '' , 17'' ELSE '' '' END +
2144
2170
CASE WHEN plan_multiple_plans = 1 THEN '' , 21'' ELSE '' '' END +
2145
- CASE WHEN unmatched_index_count > 0 THEN '' , 22'' , ELSE '' '' END +
2146
- CASE WHEN unparameterized_query > 0 THEN '' , 23'' , ELSE '' '' END +
2147
- CASE WHEN is_trivial = 1 THEN '' , 24'' , ELSE '' '' END +
2171
+ CASE WHEN unmatched_index_count > 0 THEN '' , 22'' ELSE '' '' END +
2172
+ CASE WHEN is_trivial = 1 THEN '' , 24'' ELSE '' '' END +
2148
2173
CASE WHEN is_forced_serial = 1 THEN '' , 25'' ELSE '' '' END +
2149
2174
CASE WHEN is_key_lookup_expensive = 1 THEN '' , 26'' ELSE '' '' END +
2150
2175
CASE WHEN is_remote_query_expensive = 1 THEN '' , 28'' ELSE '' '' END
0 commit comments