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 9a8250e

Browse files
Carried away
Sneaking one more check in here that had been bugging me.
1 parent a68eae8 commit 9a8250e

File tree

1 file changed

+59
-12
lines changed

1 file changed

+59
-12
lines changed

‎sp_BlitzLock.sql‎

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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,
@@ -565,11 +612,10 @@ SET @VersionDate = '20171201';
565612
dp.process_xml.value('(//process/inputbuf/text())[1]', 'NVARCHAR(MAX)') AS inputbuf,
566613
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.dn) AS trail_of_dead,
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,
@@ -582,7 +628,8 @@ SET @VersionDate = '20171201';
582628
d.last_batch_completed,
583629
d.transaction_name
584630
FROM deadlocks AS d
585-
WHERE d.dn = 1;
631+
WHERE d.dn = 1
632+
ORDER BY d.event_date;
586633

587634

588635

0 commit comments

Comments
(0)

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