Skip to content

Commit 529688b

Browse files
committed
Merge remote-tracking branch 'refs/remotes/BrentOzarULTD/dev' into sp_DatabaseRestore_814
2 parents f31d67b + d593314 commit 529688b

File tree

2 files changed

+104
-34
lines changed

2 files changed

+104
-34
lines changed

sp_BlitzCache.sql

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,20 +2190,26 @@ RAISERROR(N'Gathering stored procedure costs', 0, 1) WITH NOWAIT;
21902190
)
21912191
, QueryCostUpdate AS (
21922192
SELECT
2193-
DISTINCT
21942193
SUM(qc.SubTreeCost) OVER (PARTITION BY SqlHandle, PlanHandle) PlanTotalQuery,
21952194
qc.PlanHandle,
21962195
qc.SqlHandle
21972196
FROM QueryCost qc
2198-
WHERE qc.SubTreeCost > 0
21992197
)
2200-
UPDATE b
2201-
SET b.QueryPlanCost = (SELECT TOP 1 PlanTotalQuery FROM QueryCostUpdate qcu WHERE qcu.PlanHandle = b.PlanHandle ORDER BY PlanTotalQuery DESC)
2202-
FROM QueryCostUpdate qcu
2203-
JOIN ##bou_BlitzCacheProcs AS b
2204-
ON qcu.SqlHandle = b.SqlHandle
2205-
AND b.SPID = @@SPID
2206-
WHERE b.QueryType LIKE '%Procedure%'
2198+
SELECT qcu.PlanTotalQuery, PlanHandle, SqlHandle
2199+
INTO #proc_costs
2200+
FROM QueryCostUpdate AS qcu
2201+
2202+
UPDATE b
2203+
SET b.QueryPlanCost = ca.PlanTotalQuery
2204+
FROM ##bou_BlitzCacheProcs AS b
2205+
CROSS APPLY (
2206+
SELECT TOP 1 PlanTotalQuery
2207+
FROM #proc_costs qcu
2208+
WHERE qcu.PlanHandle = b.PlanHandle
2209+
ORDER BY PlanTotalQuery DESC
2210+
) ca
2211+
WHERE b.QueryType LIKE 'Procedure%'
2212+
AND b.SPID = @@SPID
22072213
OPTION (RECOMPILE);
22082214

22092215
UPDATE b
@@ -2810,8 +2816,7 @@ OPTION (RECOMPILE) ;
28102816
RAISERROR('Populating Warnings column', 0, 1) WITH NOWAIT;
28112817
/* Populate warnings */
28122818
UPDATE ##bou_BlitzCacheProcs
2813-
SET Warnings = CASE WHEN QueryPlan IS NULL THEN 'We couldn''t find a plan for this query. Possible reasons for this include dynamic SQL, RECOMPILE hints, and encrypted code.' ELSE
2814-
SUBSTRING(
2819+
SET Warnings = SUBSTRING(
28152820
CASE WHEN warning_no_join_predicate = 1 THEN ', No Join Predicate' ELSE '' END +
28162821
CASE WHEN compile_timeout = 1 THEN ', Compilation Timeout' ELSE '' END +
28172822
CASE WHEN compile_memory_limit_exceeded = 1 THEN ', Compile Memory Limit Exceeded' ELSE '' END +
@@ -2862,9 +2867,8 @@ SET Warnings = CASE WHEN QueryPlan IS NULL THEN 'We couldn''t find a plan for
28622867
CASE WHEN index_dml = 1 THEN ', Index DML' ELSE '' END +
28632868
CASE WHEN table_dml = 1 THEN ', Table DML' ELSE '' END +
28642869
CASE WHEN low_cost_high_cpu = 1 THEN ', Low Cost High CPU' ELSE '' END +
2865-
CASE WHEN long_running_low_cpu = 1 THEN + 'Long Running With Low CPU' ELSE '' END
2870+
CASE WHEN long_running_low_cpu = 1 THEN + ', Long Running With Low CPU' ELSE '' END
28662871
, 2, 200000)
2867-
END
28682872
WHERE SPID = @@SPID
28692873
OPTION (RECOMPILE) ;
28702874

@@ -2874,8 +2878,7 @@ WITH statement_warnings AS
28742878
(
28752879
SELECT DISTINCT
28762880
SqlHandle,
2877-
Warnings = CASE WHEN QueryPlan IS NULL THEN 'We couldn''t find a plan for this query. Possible reasons for this include dynamic SQL, RECOMPILE hints, and encrypted code.' ELSE
2878-
SUBSTRING(
2881+
Warnings = SUBSTRING(
28792882
CASE WHEN warning_no_join_predicate = 1 THEN ', No Join Predicate' ELSE '' END +
28802883
CASE WHEN compile_timeout = 1 THEN ', Compilation Timeout' ELSE '' END +
28812884
CASE WHEN compile_memory_limit_exceeded = 1 THEN ', Compile Memory Limit Exceeded' ELSE '' END +
@@ -2928,7 +2931,6 @@ SELECT DISTINCT
29282931
CASE WHEN low_cost_high_cpu = 1 THEN ', Low Cost High CPU' ELSE '' END +
29292932
CASE WHEN long_running_low_cpu = 1 THEN + 'Long Running With Low CPU' ELSE '' END
29302933
, 2, 200000)
2931-
END
29322934
FROM ##bou_BlitzCacheProcs b
29332935
WHERE SPID = @@SPID
29342936
AND QueryType LIKE 'Statement (parent%'
@@ -2941,9 +2943,32 @@ ON b.SqlHandle = s.SqlHandle
29412943
WHERE QueryType LIKE 'Procedure or Function%'
29422944
OPTION(RECOMPILE);
29432945

2946+
RAISERROR('Checking for plans with >128 levels of nesting', 0, 1) WITH NOWAIT;
2947+
WITH plan_handle AS (
2948+
SELECT b.PlanHandle
2949+
FROM ##bou_BlitzCacheProcs b
2950+
CROSS APPLY sys.dm_exec_text_query_plan(b.PlanHandle, 0, -1) tqp
2951+
CROSS APPLY sys.dm_exec_query_plan(b.PlanHandle) qp
2952+
WHERE tqp.encrypted = 0
2953+
AND b.SPID = @@SPID
2954+
AND (qp.query_plan IS NULL
2955+
AND tqp.query_plan IS NOT NULL)
2956+
)
2957+
UPDATE b
2958+
SET Warnings = ISNULL('Your query plan is >128 levels of nested nodes, and can''t be converted to XML. Use SELECT * FROM sys.dm_exec_text_query_plan('+ CONVERT(VARCHAR(128), ph.PlanHandle, 1) + ', 0, -1) to get more information'
2959+
, 'We couldn''t find a plan for this query. Possible reasons for this include dynamic SQL, RECOMPILE hints, and encrypted code.')
2960+
FROM ##bou_BlitzCacheProcs b
2961+
LEFT JOIN plan_handle ph ON
2962+
b.PlanHandle = ph.PlanHandle
2963+
WHERE b.QueryPlan IS NULL
2964+
AND b.SPID = @@SPID
2965+
OPTION (RECOMPILE);
2966+
2967+
RAISERROR('Checking for plans with no warnings', 0, 1) WITH NOWAIT;
29442968
UPDATE ##bou_BlitzCacheProcs
29452969
SET Warnings = 'No warnings detected.'
29462970
WHERE Warnings = '' OR Warnings IS NULL
2971+
AND SPID = @@SPID
29472972
OPTION (RECOMPILE);
29482973

29492974

sp_BlitzWho.sql

Lines changed: 63 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Known limitations of this version:
3030
3131
MIT License
3232
33-
Copyright (c) 2016 Brent Ozar Unlimited
33+
Copyright (c) 2017 Brent Ozar Unlimited
3434
3535
Permission is hereby granted, free of charge, to any person obtaining a copy
3636
of this software and associated documentation files (the "Software"), to deal
@@ -85,7 +85,32 @@ SELECT @ProductVersionMajor = SUBSTRING(@ProductVersion, 1,CHARINDEX('.', @Produ
8585

8686
IF @ProductVersionMajor > 9 and @ProductVersionMajor < 11
8787
BEGIN
88-
SET @StringToExecute = N'
88+
SET @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
89+
90+
91+
DECLARE @blocked TABLE
92+
(
93+
dbid SMALLINT NOT NULL,
94+
last_batch DATETIME NOT NULL,
95+
open_tran SMALLINT NOT NULL,
96+
sql_handle BINARY(20) NOT NULL,
97+
session_id SMALLINT NOT NULL,
98+
blocking_session_id SMALLINT NOT NULL,
99+
lastwaittype NCHAR(32) NOT NULL,
100+
waittime BIGINT NOT NULL,
101+
cpu INT NOT NULL,
102+
physical_io BIGINT NOT NULL,
103+
memusage INT NOT NULL
104+
);
105+
106+
INSERT @blocked ( dbid, last_batch, open_tran, sql_handle, session_id, blocking_session_id, lastwaittype, waittime, cpu, physical_io, memusage )
107+
SELECT
108+
sys1.dbid, sys1.last_batch, sys1.open_tran, sys1.sql_handle,
109+
sys2.spid AS session_id, sys2.blocked AS blocking_session_id, sys2.lastwaittype, sys2.waittime, sys2.cpu, sys2.physical_io, sys2.memusage
110+
FROM sys.sysprocesses AS sys1
111+
JOIN sys.sysprocesses AS sys2
112+
ON sys1.spid = sys2.blocked;
113+
89114
SELECT GETDATE() AS run_date ,
90115
COALESCE(
91116
CONVERT(VARCHAR(20), (r.total_elapsed_time / 1000) / 86400) + '':'' + CONVERT(VARCHAR(20), DATEADD(s, (r.total_elapsed_time / 1000), 0), 114) ,
@@ -204,13 +229,11 @@ SET @StringToExecute = N'
204229
AND qmg.pool_id = qrs.pool_id
205230
OUTER APPLY (
206231
SELECT TOP 1
207-
sys1.dbid, sys1.last_batch, sys1.open_tran, sys1.sql_handle,
208-
sys2.spid AS session_id, sys2.blocked AS blocking_session_id, sys2.lastwaittype, sys2.waittime
209-
FROM sys.sysprocesses AS sys1
210-
JOIN sys.sysprocesses AS sys2
211-
ON sys1.spid = sys2.blocked
212-
WHERE (s.session_id = sys2.spid
213-
OR s.session_id = sys2.blocked)
232+
b.dbid, b.last_batch, b.open_tran, b.sql_handle,
233+
b.session_id, b.blocking_session_id, b.lastwaittype, b.waittime
234+
FROM @blocked b
235+
WHERE (s.session_id = b.session_id
236+
OR s.session_id = b.blocking_session_id)
214237
) AS blocked
215238
OUTER APPLY sys.dm_exec_sql_text(COALESCE(r.sql_handle, blocked.sql_handle)) AS dest
216239
OUTER APPLY sys.dm_exec_query_plan(r.plan_handle) AS derp
@@ -235,7 +258,31 @@ SELECT @EnhanceFlag =
235258
ELSE 0
236259
END
237260

238-
SELECT @StringToExecute = N'
261+
SELECT @StringToExecute = N'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
262+
263+
DECLARE @blocked TABLE
264+
(
265+
dbid SMALLINT NOT NULL,
266+
last_batch DATETIME NOT NULL,
267+
open_tran SMALLINT NOT NULL,
268+
sql_handle BINARY(20) NOT NULL,
269+
session_id SMALLINT NOT NULL,
270+
blocking_session_id SMALLINT NOT NULL,
271+
lastwaittype NCHAR(32) NOT NULL,
272+
waittime BIGINT NOT NULL,
273+
cpu INT NOT NULL,
274+
physical_io BIGINT NOT NULL,
275+
memusage INT NOT NULL
276+
);
277+
278+
INSERT @blocked ( dbid, last_batch, open_tran, sql_handle, session_id, blocking_session_id, lastwaittype, waittime, cpu, physical_io, memusage )
279+
SELECT
280+
sys1.dbid, sys1.last_batch, sys1.open_tran, sys1.sql_handle,
281+
sys2.spid AS session_id, sys2.blocked AS blocking_session_id, sys2.lastwaittype, sys2.waittime, sys2.cpu, sys2.physical_io, sys2.memusage
282+
FROM sys.sysprocesses AS sys1
283+
JOIN sys.sysprocesses AS sys2
284+
ON sys1.spid = sys2.blocked;
285+
239286
SELECT GETDATE() AS run_date ,
240287
COALESCE(
241288
CONVERT(VARCHAR(20), (r.total_elapsed_time / 1000) / 86400) + '':'' + CONVERT(VARCHAR(20), DATEADD(s, (r.total_elapsed_time / 1000), 0), 114) ,
@@ -359,14 +406,12 @@ SELECT @StringToExecute = N'
359406
AND qmg.pool_id = qrs.pool_id
360407
OUTER APPLY (
361408
SELECT TOP 1
362-
sys1.dbid, sys1.last_batch, sys1.open_tran, sys1.sql_handle,
363-
sys2.spid AS session_id, sys2.blocked AS blocking_session_id, sys2.lastwaittype, sys2.waittime, sys2.cpu, sys2.physical_io, sys2.memusage
364-
FROM sys.sysprocesses AS sys1
365-
JOIN sys.sysprocesses AS sys2
366-
ON sys1.spid = sys2.blocked
367-
WHERE (s.session_id = sys2.spid
368-
OR s.session_id = sys2.blocked)
369-
) AS blocked
409+
b.dbid, b.last_batch, b.open_tran, b.sql_handle,
410+
b.session_id, b.blocking_session_id, b.lastwaittype, b.waittime
411+
FROM @blocked b
412+
WHERE (s.session_id = b.session_id
413+
OR s.session_id = b.blocking_session_id)
414+
) AS blocked
370415
OUTER APPLY sys.dm_exec_sql_text(COALESCE(r.sql_handle, blocked.sql_handle)) AS dest
371416
OUTER APPLY sys.dm_exec_query_plan(r.plan_handle) AS derp
372417
WHERE s.session_id <> @@SPID

0 commit comments

Comments
 (0)