Skip to content

Commit 39ecd1e

Browse files
committed
Table variables ftw
Fixing slow performance issue (maybe?). Works but needs testing under more load. Closes #847
1 parent 4621b34 commit 39ecd1e

File tree

2 files changed

+62
-17
lines changed

2 files changed

+62
-17
lines changed

sp_BlitzCache.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2867,7 +2867,7 @@ SET Warnings = SUBSTRING(
28672867
CASE WHEN index_dml = 1 THEN ', Index DML' ELSE '' END +
28682868
CASE WHEN table_dml = 1 THEN ', Table DML' ELSE '' END +
28692869
CASE WHEN low_cost_high_cpu = 1 THEN ', Low Cost High CPU' ELSE '' END +
2870-
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
28712871
, 2, 200000)
28722872
WHERE SPID = @@SPID
28732873
OPTION (RECOMPILE) ;

sp_BlitzWho.sql

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,32 @@ SELECT @ProductVersionMajor = SUBSTRING(@ProductVersion, 1,CHARINDEX('.', @Produ
8686
IF @ProductVersionMajor > 9 and @ProductVersionMajor < 11
8787
BEGIN
8888
SET @StringToExecute = N'
89-
SELECT GETDATE() AS run_date ,
89+
90+
DECLARE @blocked TABLE
91+
(
92+
dbid SMALLINT NOT NULL,
93+
last_batch DATETIME NOT NULL,
94+
open_tran SMALLINT NOT NULL,
95+
sql_handle BINARY(20) NOT NULL,
96+
session_id SMALLINT NOT NULL,
97+
blocking_session_id SMALLINT NOT NULL,
98+
lastwaittype NCHAR(32) NOT NULL,
99+
waittime BIGINT NOT NULL,
100+
cpu INT NOT NULL,
101+
physical_io BIGINT NOT NULL,
102+
memusage INT NOT NULL
103+
);
104+
105+
INSERT @blocked ( dbid, last_batch, open_tran, sql_handle, session_id, blocking_session_id, lastwaittype, waittime, cpu, physical_io, memusage )
106+
SELECT
107+
sys1.dbid, sys1.last_batch, sys1.open_tran, sys1.sql_handle,
108+
sys2.spid AS session_id, sys2.blocked AS blocking_session_id, sys2.lastwaittype, sys2.waittime, sys2.cpu, sys2.physical_io, sys2.memusage
109+
FROM sys.sysprocesses AS sys1
110+
JOIN sys.sysprocesses AS sys2
111+
ON sys1.spid = sys2.blocked
112+
113+
114+
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) ,
92117
CONVERT(VARCHAR(20), DATEDIFF(MILLISECOND, s.last_request_start_time, GETDATE()) / 1000 / 86400) + '':''
@@ -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
@@ -236,6 +259,30 @@ SELECT @EnhanceFlag =
236259
END
237260

238261
SELECT @StringToExecute = N'
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)