Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8292e6d

Browse files
Overhaul
After the grand Brenting
1 parent d592f95 commit 8292e6d

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

‎sp_BlitzLock.sql‎

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ SET @VersionDate = '20171201';
193193

194194
/*Parse process and input buffer XML*/
195195
SELECT dd.deadlock_xml.value('(event/@timestamp)[1]', 'DATETIME2') AS event_date,
196+
dd.deadlock_xml.value('(//deadlock/victim-list/victimProcess/@id)[1]', 'NVARCHAR(256)') AS victim_id,
196197
ca.dp.value('@id', 'NVARCHAR(256)') AS id,
197198
ca.dp.value('@currentdb', 'BIGINT') AS database_id,
198199
ca.dp.value('@logused', 'BIGINT') AS log_used,
@@ -346,21 +347,34 @@ SET @VersionDate = '20171201';
346347
CROSS APPLY ca.dr.nodes('//owner-list/owner') AS o(l)
347348
OPTION ( RECOMPILE );
348349

350+
/*Get rid of nonsense*/
351+
DELETE dow
352+
FROM #deadlock_owner_waiter AS dow
353+
WHERE owner_id = waiter_id
354+
355+
/*Add some nonsense*/
356+
ALTER TABLE #deadlock_process
357+
ADD owner_objects NVARCHAR(4000),
358+
waiter_objects NVARCHAR(4000),
359+
waiter_mode NVARCHAR(256),
360+
owner_mode NVARCHAR(256),
361+
is_victim AS CONVERT(BIT, CASE WHEN id = victim_id THEN 1 ELSE 0 END);
362+
349363

350364
/*Begin checks based on parsed values*/
351365

352366
/*Check 1 is deadlocks by database*/
353367
INSERT #deadlock_findings ( check_id, database_name, object_name, finding_group, finding, query_text )
354368
SELECT 1 AS check_id,
355-
DB_NAME(dow.database_id) AS database_name,
369+
DB_NAME(dp.database_id) AS database_name,
356370
NULL AS object_name,
357371
'Total database locks' AS finding_group,
358372
'This database had '
359-
+ CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dow.owner_id) +COUNT_BIG(DISTINCTdow.waiter_id))
373+
+ CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dp.event_date))
360374
+ ' deadlocks.',
361375
NULL AS query_text
362-
FROM #deadlock_owner_waiter AS dow
363-
GROUP BY DB_NAME(dow.database_id)
376+
FROM #deadlock_process AS dp
377+
GROUP BY DB_NAME(dp.database_id)
364378
OPTION ( RECOMPILE );
365379

366380
/*Check 2 is deadlocks by object*/
@@ -369,10 +383,10 @@ SET @VersionDate = '20171201';
369383
SELECT 2 AS check_id,
370384
DB_NAME(dow.database_id) AS database_name,
371385
dow.object_name AS object_name,
372-
'Total object locks' AS finding_group,
373-
'This object had '
374-
+ CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dow.owner_id))
375-
+ ' deadlocks.',
386+
'Total object deadlocks' AS finding_group,
387+
'This object was involved in '
388+
+ CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dow.object_name))
389+
+ ' deadlock(s).',
376390
NULL AS query_text
377391
FROM #deadlock_owner_waiter AS dow
378392
GROUP BY DB_NAME(dow.database_id), dow.object_name
@@ -420,7 +434,7 @@ SET @VersionDate = '20171201';
420434
NULL AS object_name,
421435
'Login, App, and Host locking' AS finding_group,
422436
'This database has had ' +
423-
CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dp.id)*2) +
437+
CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dp.id)) +
424438
' instances of deadlocks involving the login ' +
425439
dp.login_name +
426440
' from the application ' +
@@ -470,7 +484,7 @@ SET @VersionDate = '20171201';
470484
'More Info - Query' AS finding_group,
471485
'EXEC sp_BlitzCache ' +
472486
CASE WHEN ds.proc_name = 'adhoc'
473-
THEN ' @OnlySqlhandles = ' +
487+
THEN ' @OnlySqlHandles = ' +
474488
QUOTENAME(ds.sql_handle, '''')
475489
ELSE '@StoredProcName = ' +
476490
QUOTENAME(ds.proc_name, '''')
@@ -532,9 +546,9 @@ SET @VersionDate = '20171201';
532546
DB_NAME(s.database_id) AS database_name,
533547
OBJECT_SCHEMA_NAME(s.obj_id, s.database_id) AS sch_name,
534548
OBJECT_NAME(s.obj_id, s.database_id) AS tbl_name,
535-
QUOTENAME(OBJECT_SCHEMA_NAME(s.obj_id, s.database_id))
549+
OBJECT_SCHEMA_NAME(s.obj_id, s.database_id)
536550
+ N'.'
537-
+ QUOTENAME(OBJECT_NAME(s.obj_id, s.database_id)) AS object_name,
551+
+ OBJECT_NAME(s.obj_id, s.database_id) AS object_name,
538552
CONVERT(VARCHAR(10), (s.wait_time / 1000) / 86400) AS wait_days,
539553
CONVERT(VARCHAR(20), DATEADD(SECOND, (s.wait_time / 1000), 0), 108) AS wait_time_hms
540554
FROM suey AS s
@@ -552,8 +566,6 @@ SET @VersionDate = '20171201';
552566
FROM chopsuey AS cs
553567
OPTION ( RECOMPILE );
554568

555-
556-
557569
/*Check 10 gets total deadlock wait time per database*/
558570
WITH wait_time AS (
559571
SELECT DB_NAME(dp.database_id) AS database_name,
@@ -578,7 +590,12 @@ SET @VersionDate = '20171201';
578590

579591
/*Thank you goodnight*/
580592
INSERT #deadlock_findings ( check_id, database_name, object_name, finding_group, finding, query_text )
581-
VALUES ( 0, N'sp_BlitzLock', N'SQL Server First Responder Kit', N'http://FirstResponderKit.org/', N'To get help or add your own contributions, join us at http://FirstResponderKit.org.', NULL );
593+
VALUES ( -1,
594+
N'sp_BlitzLock ' + CAST(CONVERT(DATETIME, @VersionDate, 102) AS VARCHAR(100)),
595+
N'SQL Server First Responder Kit',
596+
N'http://FirstResponderKit.org/',
597+
N'To get help or add your own contributions, join us at http://FirstResponderKit.org.'
598+
, NULL );
582599

583600

584601
WITH deadlocks
@@ -629,7 +646,7 @@ SET @VersionDate = '20171201';
629646
d.transaction_name
630647
FROM deadlocks AS d
631648
WHERE d.dn = 1
632-
ORDER BY d.event_date;
649+
ORDER BY d.event_date, d.last_batch_started, d.last_tran_started;
633650

634651

635652

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /