Skip to content

Commit d5fac05

Browse files
authored
Merge pull request BrentOzarULTD#3801 from erikdarlingdata/feature/sp_BlitzLock-code-review-fixes
sp_BlitzLock: Bug fixes and code quality from full code review
2 parents 15f04e9 + 06d9dd4 commit d5fac05

1 file changed

Lines changed: 74 additions & 62 deletions

File tree

‎sp_BlitzLock.sql‎

Lines changed: 74 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ BEGIN
151151
DB_ID(@DatabaseName),
152152
@ProductVersion nvarchar(128) =
153153
CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(128)),
154-
@ProductVersionMajor float =
154+
@ProductVersionMajor decimal(5,1) =
155155
SUBSTRING
156156
(
157157
CAST(SERVERPROPERTY('ProductVersion') AS nvarchar(128)),
@@ -210,9 +210,7 @@ BEGIN
210210
@StringToExecuteParams nvarchar(500) = N'',
211211
@r sysname = NULL,
212212
@OutputTableFindings nvarchar(100) = N'[BlitzLockFindings]',
213-
@DeadlockCount int = 0,
214-
@ServerName sysname = @@SERVERNAME,
215-
@OutputDatabaseCheck bit = -1,
213+
@OutputDatabaseCheck bit = 1,
216214
@SessionId int = 0,
217215
@TargetSessionId int = 0,
218216
@FileName nvarchar(4000) = N'',
@@ -339,6 +337,12 @@ BEGIN
339337
@StartDateUTC = @StartDate,
340338
@EndDateUTC = @EndDate;
341339

340+
IF @StartDate > @EndDate
341+
BEGIN
342+
RAISERROR('@StartDate cannot be after @EndDate.', 11, 1) WITH NOWAIT;
343+
RETURN;
344+
END;
345+
342346
IF
343347
(
344348
@MI = 1
@@ -528,7 +532,7 @@ BEGIN
528532

529533

530534
IF @Azure = 0
531-
AND LOWER(@TargetSessionType) <> N'table'
535+
AND (@TargetSessionType IS NULL OR LOWER(@TargetSessionType) <> N'table')
532536
BEGIN
533537
IF NOT EXISTS
534538
(
@@ -547,7 +551,7 @@ BEGIN
547551
END;
548552

549553
IF @Azure = 1
550-
AND LOWER(@TargetSessionType) <> N'table'
554+
AND (@TargetSessionType IS NULL OR LOWER(@TargetSessionType) <> N'table')
551555
BEGIN
552556
IF NOT EXISTS
553557
(
@@ -588,18 +592,22 @@ BEGIN
588592
SELECT
589593
@StringToExecute =
590594
N'SELECT @r = o.name FROM ' +
591-
@OutputDatabaseName +
595+
QUOTENAME(@OutputDatabaseName) +
592596
N'.sys.objects AS o inner join ' +
593-
@OutputDatabaseName +
597+
QUOTENAME(@OutputDatabaseName) +
594598
N'.sys.schemas as s on o.schema_id = s.schema_id WHERE o.type_desc = N''USER_TABLE'' AND o.name = ' +
595599
QUOTENAME
596600
(
597601
@OutputTableName,
598602
N''''
599603
) +
600-
N' AND s.name =''' +
601-
@OutputSchemaName +
602-
N''';',
604+
N' AND s.name = ' +
605+
QUOTENAME
606+
(
607+
@OutputSchemaName,
608+
N''''
609+
) +
610+
N';',
603611
@StringToExecuteParams =
604612
N'@r sysname OUTPUT';
605613

@@ -670,7 +678,7 @@ BEGIN
670678
N'.sys.all_columns AS o WHERE o.object_id = (OBJECT_ID(''' +
671679
@ObjectFullName +
672680
N''')) AND o.name = N''client_option_1'')
673-
/*Add wait_resource column*/
681+
/*Add client_option_1 column*/
674682
ALTER TABLE ' +
675683
@ObjectFullName +
676684
N' ADD client_option_1 varchar(500) NULL;';
@@ -686,7 +694,7 @@ BEGIN
686694
N'.sys.all_columns AS o WHERE o.object_id = (OBJECT_ID(''' +
687695
@ObjectFullName +
688696
N''')) AND o.name = N''client_option_2'')
689-
/*Add wait_resource column*/
697+
/*Add client_option_2 column*/
690698
ALTER TABLE ' +
691699
@ObjectFullName +
692700
N' ADD client_option_2 varchar(500) NULL;';
@@ -702,7 +710,7 @@ BEGIN
702710
N'.sys.all_columns AS o WHERE o.object_id = (OBJECT_ID(''' +
703711
@ObjectFullName +
704712
N''')) AND o.name = N''lock_mode'')
705-
/*Add wait_resource column*/
713+
/*Add lock_mode column*/
706714
ALTER TABLE ' +
707715
@ObjectFullName +
708716
N' ADD lock_mode nvarchar(256) NULL;';
@@ -718,7 +726,7 @@ BEGIN
718726
N'.sys.all_columns AS o WHERE o.object_id = (OBJECT_ID(''' +
719727
@ObjectFullName +
720728
N''')) AND o.name = N''status'')
721-
/*Add wait_resource column*/
729+
/*Add status column*/
722730
ALTER TABLE ' +
723731
@ObjectFullName +
724732
N' ADD status nvarchar(256) NULL;';
@@ -851,7 +859,10 @@ BEGIN
851859
SELECT
852860
1/0
853861
FROM sys.objects AS o
862+
JOIN sys.schemas AS s
863+
ON o.schema_id = s.schema_id
854864
WHERE o.name = N'DeadlockFindings'
865+
AND s.name = N'dbo'
855866
AND o.type_desc = N'SYNONYM'
856867
)
857868
BEGIN
@@ -878,7 +889,10 @@ BEGIN
878889
SELECT
879890
1/0
880891
FROM sys.objects AS o
892+
JOIN sys.schemas AS s
893+
ON o.schema_id = s.schema_id
881894
WHERE o.name = N'DeadLockTbl'
895+
AND s.name = N'dbo'
882896
AND o.type_desc = N'SYNONYM'
883897
)
884898
BEGIN
@@ -993,7 +1007,7 @@ BEGIN
9931007
/*If ring buffers*/
9941008
IF
9951009
(
996-
@TargetSessionType LIKE N'ring%'
1010+
LOWER(@TargetSessionType) LIKE N'ring%'
9971011
AND @EventSessionName NOT LIKE N'system_health%'
9981012
)
9991013
BEGIN
@@ -1048,7 +1062,7 @@ BEGIN
10481062
/*If event file*/
10491063
IF
10501064
(
1051-
@TargetSessionType LIKE N'event%'
1065+
LOWER(@TargetSessionType) LIKE N'event%'
10521066
AND @EventSessionName NOT LIKE N'system_health%'
10531067
)
10541068
BEGIN
@@ -1093,13 +1107,13 @@ BEGIN
10931107
RAISERROR('@TargetSessionType is event_file, assigning XML for Azure', 0, 1) WITH NOWAIT;
10941108
SELECT
10951109
@SessionId =
1096-
t.event_session_address,
1110+
t.event_session_id,
10971111
@TargetSessionId =
1098-
t.target_name
1099-
FROM sys.dm_xe_database_session_targets t
1100-
JOIN sys.dm_xe_database_sessions s
1101-
ON s.address = t.event_session_address
1102-
WHERE t.target_name = @TargetSessionType
1112+
t.target_id
1113+
FROM sys.database_event_session_targets AS t
1114+
JOIN sys.database_event_sessions AS s
1115+
ON s.event_session_id = t.event_session_id
1116+
WHERE t.name = @TargetSessionType
11031117
AND s.name = @EventSessionName
11041118
OPTION(RECOMPILE);
11051119

@@ -1117,7 +1131,7 @@ BEGIN
11171131
SELECT
11181132
file_name =
11191133
CONVERT(nvarchar(4000), f.value)
1120-
FROM sys.server_event_session_fields AS f
1134+
FROM sys.database_event_session_fields AS f
11211135
WHERE f.event_session_id = @SessionId
11221136
AND f.object_id = @TargetSessionId
11231137
AND f.name = N'filename'
@@ -1149,7 +1163,7 @@ BEGIN
11491163
/*If ring buffers*/
11501164
IF
11511165
(
1152-
@TargetSessionType LIKE N'ring%'
1166+
LOWER(@TargetSessionType) LIKE N'ring%'
11531167
AND @EventSessionName NOT LIKE N'system_health%'
11541168
)
11551169
BEGIN
@@ -1184,7 +1198,7 @@ BEGIN
11841198
/*If event file*/
11851199
IF
11861200
(
1187-
@TargetSessionType LIKE N'event_file%'
1201+
LOWER(@TargetSessionType) LIKE N'event_file%'
11881202
AND @EventSessionName NOT LIKE N'system_health%'
11891203
)
11901204
BEGIN
@@ -1223,7 +1237,7 @@ BEGIN
12231237
/*This section deals with event file*/
12241238
IF
12251239
(
1226-
@TargetSessionType LIKE N'event%'
1240+
LOWER(@TargetSessionType) LIKE N'event%'
12271241
AND @EventSessionName LIKE N'system_health%'
12281242
)
12291243
BEGIN
@@ -2005,16 +2019,15 @@ BEGIN
20052019
ADD
20062020
waiter_mode nvarchar(256),
20072021
owner_mode nvarchar(256),
2008-
is_victim AS
2009-
CONVERT
2010-
(
2011-
bit,
2012-
CASE
2013-
WHEN id = victim_id
2014-
THEN 1
2015-
ELSE 0
2016-
END
2017-
) PERSISTED;
2022+
is_victim bit NOT NULL DEFAULT 0;
2023+
2024+
UPDATE
2025+
dp
2026+
SET
2027+
dp.is_victim = 1
2028+
FROM #deadlock_process AS dp
2029+
WHERE dp.deadlock_graph.exist('deadlock/victim-list/victimProcess[@id = sql:column("dp.id")]') = 1
2030+
OPTION(RECOMPILE);
20182031

20192032
/*Update some nonsense*/
20202033
SET @d = CONVERT(varchar(40), GETDATE(), 109);
@@ -2346,21 +2359,24 @@ BEGIN
23462359
OVER (ORDER BY COUNT_BIG(DISTINCT dow.event_date) DESC)
23472360
FROM #deadlock_owner_waiter AS dow
23482361
WHERE 1 = 1
2349-
AND dow.lock_mode IN
2350-
(
2351-
N'S',
2352-
N'IS'
2353-
)
2354-
OR dow.owner_mode IN
2355-
(
2356-
N'S',
2357-
N'IS'
2358-
)
2359-
OR dow.waiter_mode IN
2360-
(
2361-
N'S',
2362-
N'IS'
2363-
)
2362+
AND
2363+
(
2364+
dow.lock_mode IN
2365+
(
2366+
N'S',
2367+
N'IS'
2368+
)
2369+
OR dow.owner_mode IN
2370+
(
2371+
N'S',
2372+
N'IS'
2373+
)
2374+
OR dow.waiter_mode IN
2375+
(
2376+
N'S',
2377+
N'IS'
2378+
)
2379+
)
23642380
AND (dow.database_id = @DatabaseId OR @DatabaseName IS NULL)
23652381
AND (dow.event_date >= @StartDate OR @StartDate IS NULL)
23662382
AND (dow.event_date < @EndDate OR @EndDate IS NULL)
@@ -3360,7 +3376,7 @@ BEGIN
33603376
finding_group = N'Agent Job Deadlocks',
33613377
finding =
33623378
N'There have been ' +
3363-
RTRIM(COUNT_BIG(DISTINCT aj.event_date)) +
3379+
CONVERT(nvarchar(20), COUNT_BIG(DISTINCT aj.event_date)) +
33643380
N' deadlocks from this Agent Job and Step.',
33653381
sort_order =
33663382
ROW_NUMBER()
@@ -3480,7 +3496,7 @@ BEGIN
34803496
finding
34813497
)
34823498
SELECT
3483-
check_id = 14,
3499+
check_id = 16,
34843500
database_name = N'-',
34853501
object_name = N'-',
34863502
finding_group = N'Total implicit transaction deadlocks',
@@ -4224,13 +4240,13 @@ BEGIN
42244240
total_logical_reads_mb =
42254241
deqs.total_logical_reads * 8. / 1024.,
42264242
min_grant_mb =
4227-
deqs.min_grant_kb * 8. / 1024.,
4243+
deqs.min_grant_kb / 1024.,
42284244
max_grant_mb =
4229-
deqs.max_grant_kb * 8. / 1024.,
4245+
deqs.max_grant_kb / 1024.,
42304246
min_used_grant_mb =
4231-
deqs.min_used_grant_kb * 8. / 1024.,
4247+
deqs.min_used_grant_kb / 1024.,
42324248
max_used_grant_mb =
4233-
deqs.max_used_grant_kb * 8. / 1024.,
4249+
deqs.max_used_grant_kb / 1024.,
42344250
deqs.min_reserved_threads,
42354251
deqs.max_reserved_threads,
42364252
deqs.min_used_threads,
@@ -4538,10 +4554,6 @@ BEGIN
45384554
@r,
45394555
OutputTableFindings =
45404556
@OutputTableFindings,
4541-
DeadlockCount =
4542-
@DeadlockCount,
4543-
ServerName =
4544-
@ServerName,
45454557
OutputDatabaseCheck =
45464558
@OutputDatabaseCheck,
45474559
SessionId =

0 commit comments

Comments
 (0)