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 d592f95

Browse files
Merge pull request BrentOzarULTD#1290 from BrentOzarULTD/Issue_1289
Fixes BrentOzarULTD#1289
2 parents 6b9ee0d + 9a8250e commit d592f95

File tree

1 file changed

+63
-16
lines changed

1 file changed

+63
-16
lines changed

‎sp_BlitzLock.sql‎

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ALTER PROCEDURE dbo.sp_BlitzLock
1313
@AppName NVARCHAR(256) = NULL,
1414
@HostName NVARCHAR(256) = NULL,
1515
@LoginName NVARCHAR(256) = NULL,
16-
@EventSessionPath VARCHAR(256) = 'xml_deadlock_report',
16+
@EventSessionPath VARCHAR(256) = 'system_health*.xel',
1717
@Debug BIT = 0,
1818
@Help BIT = 0,
1919
@VersionDate DATETIME = NULL OUTPUT
@@ -356,7 +356,7 @@ SET @VersionDate = '20171201';
356356
NULL AS object_name,
357357
'Total database locks' AS finding_group,
358358
'This database had '
359-
+ CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dow.owner_id))
359+
+ CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dow.owner_id)+COUNT_BIG(DISTINCTdow.waiter_id))
360360
+ ' deadlocks.',
361361
NULL AS query_text
362362
FROM #deadlock_owner_waiter AS dow
@@ -420,7 +420,7 @@ SET @VersionDate = '20171201';
420420
NULL AS object_name,
421421
'Login, App, and Host locking' AS finding_group,
422422
'This database has had ' +
423-
CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dp.id)) +
423+
CONVERT(NVARCHAR(20), COUNT_BIG(DISTINCT dp.id)*2) +
424424
' instances of deadlocks involving the login ' +
425425
dp.login_name +
426426
' from the application ' +
@@ -506,22 +506,69 @@ SET @VersionDate = '20171201';
506506
FROM bi
507507
OPTION ( RECOMPILE );
508508

509+
/*Check 9 gets total deadlock wait time per object*/
510+
WITH chop AS (
511+
SELECT SUBSTRING(dp.wait_resource,
512+
CHARINDEX(':', dp.wait_resource, CHARINDEX(':', dp.wait_resource)) + 2,
513+
LEN(dp.wait_resource)
514+
) AS chopped,
515+
dp.database_id,
516+
SUM(dp.wait_time) AS wait_time
517+
FROM #deadlock_process AS dp
518+
GROUP BY dp.wait_resource, dp.database_id
519+
),
520+
suey AS (
521+
SELECT SUBSTRING(c.chopped,
522+
CHARINDEX(':', c.chopped) + 1,
523+
CHARINDEX(':', c.chopped, CHARINDEX(':', c.chopped) + 1)
524+
- 1 - CHARINDEX(':', c.chopped)
525+
) AS obj_id,
526+
c.database_id,
527+
c.wait_time
528+
FROM chop AS c
529+
),
530+
chopsuey AS (
531+
SELECT *,
532+
DB_NAME(s.database_id) AS database_name,
533+
OBJECT_SCHEMA_NAME(s.obj_id, s.database_id) AS sch_name,
534+
OBJECT_NAME(s.obj_id, s.database_id) AS tbl_name,
535+
QUOTENAME(OBJECT_SCHEMA_NAME(s.obj_id, s.database_id))
536+
+ N'.'
537+
+ QUOTENAME(OBJECT_NAME(s.obj_id, s.database_id)) AS object_name,
538+
CONVERT(VARCHAR(10), (s.wait_time / 1000) / 86400) AS wait_days,
539+
CONVERT(VARCHAR(20), DATEADD(SECOND, (s.wait_time / 1000), 0), 108) AS wait_time_hms
540+
FROM suey AS s
541+
)
542+
INSERT #deadlock_findings ( check_id, database_name, object_name, finding_group, finding, query_text )
543+
SELECT 9 AS check_id,
544+
cs.database_name,
545+
cs.object_name,
546+
'Total object deadlock wait time' AS finding_group,
547+
'This object has had '
548+
+ CONVERT(VARCHAR(10), cs.wait_days)
549+
+ ':' + CONVERT(VARCHAR(20), cs.wait_time_hms, 108)
550+
+ ' [d/h/m/s] of deadlock wait time.',
551+
NULL AS query_text
552+
FROM chopsuey AS cs
553+
OPTION ( RECOMPILE );
554+
555+
509556

510-
/*Check 9 gets total deadlock wait time per database*/
557+
/*Check 10 gets total deadlock wait time per database*/
511558
WITH wait_time AS (
512559
SELECT DB_NAME(dp.database_id) AS database_name,
513560
SUM(CONVERT(BIGINT, dp.wait_time)) AS total_wait_time_ms
514561
FROM #deadlock_process AS dp
515562
GROUP BY DB_NAME(dp.database_id)
516563
)
517564
INSERT #deadlock_findings ( check_id, database_name, object_name, finding_group, finding, query_text )
518-
SELECT 9 AS check_id,
565+
SELECT 10 AS check_id,
519566
wt.database_name,
520567
NULL AS object_name,
521-
'Total deadlock wait time' AS finding_group,
568+
'Total database deadlock wait time' AS finding_group,
522569
'This database has had '
523-
+ CONVERT(VARCHAR(10), (SUM(wt.total_wait_time_ms) / 1000) / 86400)
524-
+ ':' + CONVERT(VARCHAR(20), DATEADD(s, (SUM(wt.total_wait_time_ms) / 1000), 0), 108)
570+
+ CONVERT(VARCHAR(10), (SUM(DISTINCTwt.total_wait_time_ms) / 1000) / 86400)
571+
+ ':' + CONVERT(VARCHAR(20), DATEADD(SECOND, (SUM(DISTINCTwt.total_wait_time_ms) / 1000), 0), 108)
525572
+ ' [d/h/m/s] of deadlock wait time.',
526573
NULL AS query_text
527574
FROM wait_time AS wt
@@ -550,7 +597,7 @@ SET @VersionDate = '20171201';
550597
WHERE dp.id = dow.owner_id
551598
OR dp.id = dow.waiter_id
552599
FOR XML PATH(N''), TYPE ).value(N'.[1]', N'NVARCHAR(4000)'),
553-
1, 1, N'')) AS object_name,
600+
1, 1, N'')) AS object_names,
554601
dp.wait_time,
555602
dp.transaction_name,
556603
dp.last_tran_started,
@@ -563,26 +610,26 @@ SET @VersionDate = '20171201';
563610
dp.login_name,
564611
dp.isolation_level,
565612
dp.process_xml.value('(//process/inputbuf/text())[1]', 'NVARCHAR(MAX)') AS inputbuf,
566-
ROW_NUMBER() OVER ( PARTITION BY dp.event_date, dp.id ORDER BY dp.event_date ) AS n
613+
ROW_NUMBER() OVER ( PARTITION BY dp.event_date, dp.id ORDER BY dp.event_date ) AS dn
567614
FROM #deadlock_process AS dp )
568-
SELECT N'Deadlock #' + CONVERT(NVARCHAR(10), d.n) AS deadlock_number,
569-
d.event_date,
615+
SELECT d.event_date,
570616
DB_NAME(d.database_id) AS database_name,
571617
CONVERT(XML, N'<inputbuf>' + d.inputbuf + N'</inputbuf>') AS query,
572-
d.object_name,
618+
d.object_names,
573619
d.isolation_level,
574620
d.transaction_count,
575621
d.login_name,
576622
d.host_name,
577623
d.client_app,
578624
d.wait_time,
579-
d.transaction_name,
625+
d.log_used,
580626
d.last_tran_started,
581627
d.last_batch_started,
582628
d.last_batch_completed,
583-
d.log_used
629+
d.transaction_name
584630
FROM deadlocks AS d
585-
WHERE d.n = 1;
631+
WHERE d.dn = 1
632+
ORDER BY d.event_date;
586633

587634

588635

0 commit comments

Comments
(0)

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