@@ -2688,10 +2688,11 @@ FROM #relop r
26882688CROSS APPLY r .relop .nodes (' //p:Object' ) AS c(n)
26892689)
26902690UPDATE p
2691- SET is_table_variable = CASE WHEN x . first_char = ' @' THEN 1 END
2691+ SET is_table_variable = 1
26922692FROM ##bou_BlitzCacheProcs AS p
26932693JOIN x ON x .SqlHandle = p .SqlHandle
26942694AND SPID = @@SPID
2695+ WHERE x .first_char = ' @'
26952696OPTION (RECOMPILE );
26962697
26972698RAISERROR (N ' Checking for functions' , 0 , 1 ) WITH NOWAIT ;
@@ -2719,9 +2720,10 @@ SET key_lookup_cost = x.key_lookup_cost
27192720FROM (
27202721SELECT
27212722 qs .SqlHandle ,
2722- relop .value (' sum(/p:RelOp/@EstimatedTotalSubtreeCost)' , ' float' ) AS key_lookup_cost
2723+ MAX ( relop .value (' sum(/p:RelOp/@EstimatedTotalSubtreeCost)' , ' float') ) AS key_lookup_cost
27232724FROM #relop qs
27242725WHERE [relop].exist(' /p:RelOp/p:IndexScan[(@Lookup[.="1"])]' ) = 1
2726+ GROUP BY qs .SqlHandle
27252727) AS x
27262728WHERE ##bou_BlitzCacheProcs .SqlHandle = x .SqlHandle
27272729AND SPID = @@SPID
@@ -2735,9 +2737,10 @@ SET remote_query_cost = x.remote_query_cost
27352737FROM (
27362738SELECT
27372739 qs .SqlHandle ,
2738- relop .value (' sum(/p:RelOp/@EstimatedTotalSubtreeCost)' , ' float' ) AS remote_query_cost
2740+ MAX ( relop .value (' sum(/p:RelOp/@EstimatedTotalSubtreeCost)' , ' float') ) AS remote_query_cost
27392741FROM #relop qs
27402742WHERE [relop].exist(' /p:RelOp[(@PhysicalOp[contains(., "Remote")])]' ) = 1
2743+ GROUP BY qs .SqlHandle
27412744) AS x
27422745WHERE ##bou_BlitzCacheProcs .SqlHandle = x .SqlHandle
27432746AND SPID = @@SPID
@@ -2746,16 +2749,20 @@ OPTION (RECOMPILE) ;
27462749RAISERROR (N ' Checking for expensive sorts' , 0 , 1 ) WITH NOWAIT ;
27472750WITH XMLNAMESPACES(' http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
27482751UPDATE ##bou_BlitzCacheProcs
2749- SET sort_cost = ( x . sort_io + x . sort_cpu )
2752+ SET sort_cost = y . max_sort_cost
27502753FROM (
2751- SELECT
2752- qs .SqlHandle ,
2753- relop .value (' sum(/p:RelOp/@EstimateIO)' , ' float' ) AS sort_io,
2754- relop .value (' sum(/p:RelOp/@EstimateCPU)' , ' float' ) AS sort_cpu
2755- FROM #relop qs
2756- WHERE [relop].exist(' /p:RelOp[(@PhysicalOp[.="Sort"])]' ) = 1
2757- ) AS x
2758- WHERE ##bou_BlitzCacheProcs .SqlHandle = x .SqlHandle
2754+ SELECT x .SqlHandle , MAX ((x .sort_io + x .sort_cpu )) AS max_sort_cost
2755+ FROM (
2756+ SELECT
2757+ qs .SqlHandle ,
2758+ relop .value (' sum(/p:RelOp/@EstimateIO)' , ' float' ) AS sort_io,
2759+ relop .value (' sum(/p:RelOp/@EstimateCPU)' , ' float' ) AS sort_cpu
2760+ FROM #relop qs
2761+ WHERE [relop].exist(' /p:RelOp[(@PhysicalOp[.="Sort"])]' ) = 1
2762+ ) AS x
2763+ GROUP BY x .SqlHandle
2764+ ) AS y
2765+ WHERE ##bou_BlitzCacheProcs .SqlHandle = y .SqlHandle
27592766AND SPID = @@SPID
27602767OPTION (RECOMPILE ) ;
27612768
@@ -3684,8 +3691,8 @@ SET frequent_execution = CASE WHEN ExecutionsPerMinute > @execution_threshold
36843691 long_running = CASE WHEN AverageDuration > @long_running_query_warning_seconds THEN 1
36853692 WHEN max_worker_time > @long_running_query_warning_seconds THEN 1
36863693 WHEN max_elapsed_time > @long_running_query_warning_seconds THEN 1 END ,
3687- is_key_lookup_expensive = CASE WHEN QueryPlanCost > (@ctp / 2 ) AND key_lookup_cost >= QueryPlanCost * .5 THEN 1 END ,
3688- is_sort_expensive = CASE WHEN QueryPlanCost > (@ctp / 2 ) AND sort_cost >= QueryPlanCost * .5 THEN 1 END ,
3694+ is_key_lookup_expensive = CASE WHEN QueryPlanCost >= (@ctp / 2 ) AND key_lookup_cost >= QueryPlanCost * .5 THEN 1 END ,
3695+ is_sort_expensive = CASE WHEN QueryPlanCost >= (@ctp / 2 ) AND sort_cost >= QueryPlanCost * .5 THEN 1 END ,
36893696 is_remote_query_expensive = CASE WHEN remote_query_cost >= QueryPlanCost * .05 THEN 1 END ,
36903697 is_forced_serial = CASE WHEN is_forced_serial = 1 THEN 1 END ,
36913698 is_unused_grant = CASE WHEN PercentMemoryGrantUsed <= @memory_grant_warning_percent AND MinGrantKB > @MinMemoryPerQuery THEN 1 END ,
0 commit comments