Skip to content

Commit dd0b859

Browse files
committed
Limits analysis to each SPID's session
Yeehaw
1 parent be70a40 commit dd0b859

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

sp_BlitzCache.sql

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,6 +1682,7 @@ RAISERROR(N'Attempting to aggregate stored proc info from separate statements',
16821682
SUM(b.LastReturnedRows) AS LastReturnedRows
16831683
FROM ##bou_BlitzCacheProcs b
16841684
WHERE b.QueryHash IS NOT NULL
1685+
AND b.SPID = @@SPID
16851686
GROUP BY b.SqlHandle
16861687
)
16871688
UPDATE b
@@ -1695,6 +1696,7 @@ FROM ##bou_BlitzCacheProcs b
16951696
JOIN agg b2
16961697
ON b2.SqlHandle = b.SqlHandle
16971698
WHERE b.QueryHash IS NULL
1699+
AND b.SPID = @@SPID
16981700
OPTION (RECOMPILE) ;
16991701

17001702
/* Compute the total CPU, etc across our active set of the plan cache.
@@ -1760,6 +1762,7 @@ FROM (
17601762
LastExecutionTime
17611763
FROM ##bou_BlitzCacheProcs
17621764
WHERE PlanHandle IS NOT NULL
1765+
AND SPID = @@SPID
17631766
GROUP BY PlanHandle,
17641767
TotalCPU,
17651768
TotalDuration,
@@ -1772,6 +1775,7 @@ FROM (
17721775
) AS y
17731776
WHERE ##bou_BlitzCacheProcs.PlanHandle = y.PlanHandle
17741777
AND ##bou_BlitzCacheProcs.PlanHandle IS NOT NULL
1778+
AND ##bou_BlitzCacheProcs.SPID = @@SPID
17751779
OPTION (RECOMPILE) ;
17761780

17771781

@@ -1817,6 +1821,7 @@ FROM (
18171821
PlanCreationTime,
18181822
LastExecutionTime
18191823
FROM ##bou_BlitzCacheProcs
1824+
WHERE SPID = @@SPID
18201825
GROUP BY DatabaseName,
18211826
SqlHandle,
18221827
QueryHash,
@@ -1847,6 +1852,7 @@ SELECT QueryHash ,
18471852
INTO #statements
18481853
FROM ##bou_BlitzCacheProcs p
18491854
CROSS APPLY p.QueryPlan.nodes('//p:StmtSimple') AS q(n)
1855+
WHERE p.SPID = @@SPID
18501856
OPTION (RECOMPILE) ;
18511857

18521858
WITH XMLNAMESPACES('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS p)
@@ -1890,6 +1896,7 @@ FROM (
18901896
COUNT(QueryHash) AS number_of_plans,
18911897
QueryHash
18921898
FROM ##bou_BlitzCacheProcs
1899+
WHERE SPID = @@SPID
18931900
GROUP BY QueryHash
18941901
) AS x
18951902
WHERE ##bou_BlitzCacheProcs.QueryHash = x.QueryHash
@@ -1915,6 +1922,7 @@ SET QueryPlanCost = CASE WHEN QueryType LIKE '%Stored Procedure%' THEN
19151922
END
19161923
FROM #statements s
19171924
WHERE s.QueryHash = ##bou_BlitzCacheProcs.QueryHash
1925+
AND SPID = @@SPID
19181926
OPTION (RECOMPILE);
19191927

19201928
--Gather Stored Proc costs
@@ -1947,6 +1955,7 @@ RAISERROR(N'Gathering stored procedure costs', 0, 1) WITH NOWAIT;
19471955
FROM QueryCostUpdate qcu
19481956
JOIN ##bou_BlitzCacheProcs AS b
19491957
ON qcu.SqlHandle = b.SqlHandle
1958+
AND b.SPID = @@SPID
19501959
OPTION (RECOMPILE);
19511960

19521961
-- query level checks
@@ -1965,6 +1974,7 @@ SET missing_index_count = query_plan.value('count(/p:QueryPlan/p:MissingInde
19651974
is_forced_serial = CASE WHEN query_plan.value('count(/p:QueryPlan/@NonParallelPlanReason)', 'int') > 0 THEN 1 END
19661975
FROM #query_plan qp
19671976
WHERE qp.QueryHash = ##bou_BlitzCacheProcs.QueryHash
1977+
AND SPID = @@SPID
19681978
OPTION (RECOMPILE);
19691979

19701980
-- operator level checks
@@ -1989,6 +1999,7 @@ FROM ##bou_BlitzCacheProcs p
19891999
relop.exist('/p:RelOp/p:Warnings') AS relop_warnings
19902000
FROM #relop qs
19912001
) AS x ON p.SqlHandle = x.SqlHandle
2002+
WHERE SPID = @@SPID
19922003
OPTION (RECOMPILE);
19932004

19942005

@@ -2006,6 +2017,7 @@ SET p.function_count = x.function_count,
20062017
p.clr_function_count = x.clr_function_count
20072018
FROM ##bou_BlitzCacheProcs AS p
20082019
JOIN x ON x.QueryHash = p.QueryHash
2020+
AND SPID = @@SPID
20092021
OPTION (RECOMPILE);
20102022

20112023

@@ -2021,6 +2033,7 @@ FROM #relop qs
20212033
WHERE [relop].exist('/p:RelOp/p:IndexScan[(@Lookup[.="1"])]') = 1
20222034
) AS x
20232035
WHERE ##bou_BlitzCacheProcs.SqlHandle = x.SqlHandle
2036+
AND SPID = @@SPID
20242037
OPTION (RECOMPILE) ;
20252038

20262039

@@ -2036,6 +2049,7 @@ FROM #relop qs
20362049
WHERE [relop].exist('/p:RelOp[(@PhysicalOp[contains(., "Remote")])]') = 1
20372050
) AS x
20382051
WHERE ##bou_BlitzCacheProcs.SqlHandle = x.SqlHandle
2052+
AND SPID = @@SPID
20392053
OPTION (RECOMPILE) ;
20402054

20412055
RAISERROR(N'Checking for expensive sorts', 0, 1) WITH NOWAIT;
@@ -2051,6 +2065,7 @@ FROM #relop qs
20512065
WHERE [relop].exist('/p:RelOp[(@PhysicalOp[.="Sort"])]') = 1
20522066
) AS x
20532067
WHERE ##bou_BlitzCacheProcs.SqlHandle = x.SqlHandle
2068+
AND SPID = @@SPID
20542069
OPTION (RECOMPILE) ;
20552070

20562071
RAISERROR(N'Checking for icky cursors', 0, 1) WITH NOWAIT;
@@ -2062,6 +2077,7 @@ FROM ##bou_BlitzCacheProcs b
20622077
JOIN #statements AS qs
20632078
ON b.QueryHash = qs.QueryHash
20642079
CROSS APPLY qs.statement.nodes('/p:StmtCursor') AS n1(fn)
2080+
WHERE SPID = @@SPID
20652081
OPTION (RECOMPILE) ;
20662082

20672083

@@ -2096,6 +2112,7 @@ SELECT
20962112
FROM #relop qs
20972113
CROSS APPLY qs.relop.nodes('//p:TableScan') AS q(n)
20982114
) AS x ON b.SqlHandle = x.SqlHandle
2115+
WHERE SPID = @@SPID
20992116
OPTION (RECOMPILE) ;
21002117

21012118

@@ -2111,6 +2128,7 @@ FROM #relop qs
21112128
WHERE [relop].exist('/p:RelOp/p:IndexScan[(@Storage[.="ColumnStore"])]') = 1
21122129
) AS x
21132130
WHERE ##bou_BlitzCacheProcs.SqlHandle = x.SqlHandle
2131+
AND SPID = @@SPID
21142132
OPTION (RECOMPILE) ;
21152133

21162134

@@ -2126,6 +2144,7 @@ CROSS APPLY relop.nodes('/p:RelOp/p:ComputeScalar/p:DefinedValues/p:DefinedValue
21262144
WHERE n.fn.exist('/p:RelOp/p:ComputeScalar/p:DefinedValues/p:DefinedValue/p:ColumnReference[(@ComputedColumn[.="1"])]') = 1
21272145
) AS x
21282146
WHERE ##bou_BlitzCacheProcs.SqlHandle = x.SqlHandle
2147+
AND SPID = @@SPID
21292148
OPTION (RECOMPILE)
21302149

21312150

@@ -2141,6 +2160,7 @@ FROM #relop AS r
21412160
CROSS APPLY r.relop.nodes('/p:RelOp/p:Filter/p:Predicate/p:ScalarOperator/p:Compare/p:ScalarOperator/p:UserDefinedFunction') c(n)
21422161
) x
21432162
WHERE ##bou_BlitzCacheProcs.SqlHandle = x.SqlHandle
2163+
AND SPID = @@SPID
21442164
OPTION (RECOMPILE)
21452165

21462166
RAISERROR(N'Checking modification queries that hit lots of indexes', 0, 1) WITH NOWAIT;
@@ -2193,6 +2213,7 @@ SET b.index_insert_count = iops.index_insert_count,
21932213
b.table_delete_count = iops.table_delete_count
21942214
FROM ##bou_BlitzCacheProcs AS b
21952215
JOIN iops ON iops.SqlHandle = b.SqlHandle
2216+
WHERE SPID = @@SPID
21962217
OPTION(RECOMPILE);
21972218

21982219
IF @v >= 12
@@ -2204,6 +2225,7 @@ BEGIN
22042225
SET downlevel_estimator = CASE WHEN statement.value('min(//p:StmtSimple/@CardinalityEstimationModelVersion)', 'int') < (@v * 10) THEN 1 END
22052226
FROM ##bou_BlitzCacheProcs p
22062227
JOIN #statements s ON p.QueryHash = s.QueryHash
2228+
WHERE SPID = @@SPID
22072229
OPTION (RECOMPILE) ;
22082230
END ;
22092231

@@ -2233,6 +2255,7 @@ SELECT COUNT(DISTINCT QueryHash) AS distinct_plan_count,
22332255
COUNT(QueryHash) AS number_of_plans,
22342256
QueryHash
22352257
FROM ##bou_BlitzCacheProcs
2258+
WHERE SPID = @@SPID
22362259
GROUP BY QueryHash
22372260
) AS x
22382261
WHERE ##bou_BlitzCacheProcs.QueryHash = x.QueryHash
@@ -2248,6 +2271,7 @@ SET QueryType = QueryType + ' (parent ' +
22482271
FROM ##bou_BlitzCacheProcs p
22492272
JOIN sys.dm_exec_procedure_stats s ON p.SqlHandle = s.sql_handle
22502273
WHERE QueryType = 'Statement'
2274+
AND SPID = @@SPID
22512275

22522276
/* Trace Flag Checks 2014 SP2 and 2016 SP1 only)*/
22532277
RAISERROR(N'Trace flag checks', 0, 1) WITH NOWAIT;
@@ -2284,7 +2308,8 @@ OPTION (RECOMPILE);
22842308
UPDATE p
22852309
SET p.trace_flags_session = tf.session_trace_flags
22862310
FROM ##bou_BlitzCacheProcs p
2287-
JOIN #trace_flags tf ON tf.QueryHash = p.QueryHash --AND tf.SqlHandle = p.PlanHandle
2311+
JOIN #trace_flags tf ON tf.QueryHash = p.QueryHash
2312+
WHERE SPID = @@SPID
22882313
OPTION(RECOMPILE);
22892314

22902315
IF @SkipAnalysis = 1
@@ -2401,6 +2426,7 @@ SET frequent_execution = CASE WHEN ExecutionsPerMinute > @execution_threshold
24012426
is_remote_query_expensive = CASE WHEN remote_query_cost >= QueryPlanCost * .05 THEN 1 END,
24022427
is_forced_serial = CASE WHEN is_forced_serial = 1 AND QueryPlanCost > (@ctp / 2) THEN 1 END,
24032428
is_unused_grant = CASE WHEN PercentMemoryGrantUsed <= @memory_grant_warning_percent AND MinGrantKB > @MinMemoryPerQuery THEN 1 END
2429+
WHERE SPID = @@SPID
24042430
OPTION (RECOMPILE) ;
24052431

24062432

@@ -2425,6 +2451,7 @@ UPDATE p
24252451
FROM ##bou_BlitzCacheProcs p
24262452
CROSS APPLY sys.dm_exec_plan_attributes(p.PlanHandle) pa
24272453
WHERE pa.attribute = 'set_options'
2454+
AND SPID = @@SPID
24282455
OPTION (RECOMPILE) ;
24292456

24302457

@@ -2434,6 +2461,7 @@ SET is_cursor = CASE WHEN CAST(pa.value AS INT) <> 0 THEN 1 END
24342461
FROM ##bou_BlitzCacheProcs p
24352462
CROSS APPLY sys.dm_exec_plan_attributes(p.PlanHandle) pa
24362463
WHERE pa.attribute LIKE '%cursor%'
2464+
AND SPID = @@SPID
24372465
OPTION (RECOMPILE) ;
24382466

24392467

@@ -2491,6 +2519,7 @@ SET Warnings = CASE WHEN QueryPlan IS NULL THEN 'We couldn''t find a plan for
24912519
CASE WHEN index_ops >= 5 THEN ', ' + CONVERT(VARCHAR(10), index_ops) + ' Indexes Modified' ELSE '' END
24922520
, 2, 200000)
24932521
END
2522+
WHERE SPID = @@SPID
24942523
OPTION (RECOMPILE) ;
24952524

24962525

@@ -2615,6 +2644,7 @@ BEGIN
26152644
+ N' ExecutionsPerMinute, PlanCreationTime, LastExecutionTime, PlanHandle, SqlHandle, QueryHash, StatementStartOffset, StatementEndOffset, MinReturnedRows, MaxReturnedRows, AverageReturnedRows, TotalReturnedRows, QueryText, QueryPlan, NumberOfPlans, NumberOfDistinctPlans, Warnings, '
26162645
+ N' SerialRequiredMemory, SerialDesiredMemory, MinGrantKB, MaxGrantKB, MinUsedGrantKB, MaxUsedGrantKB, PercentMemoryGrantUsed, AvgMaxMemoryGrant, QueryPlanCost '
26172646
+ N' FROM ##bou_BlitzCacheProcs '
2647+
+ N' WHERE SPID = @@SPID '
26182648

26192649
SELECT @insert_sql += N' ORDER BY ' + CASE @SortOrder WHEN 'cpu' THEN N' TotalCPU '
26202650
WHEN 'reads' THEN N' TotalReads '
@@ -2696,7 +2726,8 @@ BEGIN
26962726
QueryPlanHash,
26972727
COALESCE(SetOptions, '''') AS [SET Options]
26982728
FROM ##bou_BlitzCacheProcs
2699-
WHERE 1 = 1 ' + @nl
2729+
WHERE 1 = 1
2730+
AND SPID = @@SPID ' + @nl
27002731

27012732
SELECT @sql += N' ORDER BY ' + CASE @SortOrder WHEN 'cpu' THEN ' TotalCPU '
27022733
WHEN 'reads' THEN ' TotalReads '

0 commit comments

Comments
 (0)