Skip to content

Commit ac6bb26

Browse files
Add better sorting
Closes #3298
1 parent ff8a0f4 commit ac6bb26

1 file changed

Lines changed: 88 additions & 30 deletions

File tree

sp_BlitzLock.sql

Lines changed: 88 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,8 @@ BEGIN
219219
database_name nvarchar(256),
220220
object_name nvarchar(1000),
221221
finding_group nvarchar(100),
222-
finding nvarchar(4000)
222+
finding nvarchar(4000),
223+
sort_order bigint
223224
);
224225

225226
/*Set these to some sane defaults if NULLs are passed in*/
@@ -1758,7 +1759,8 @@ BEGIN
17581759
database_name,
17591760
object_name,
17601761
finding_group,
1761-
finding
1762+
finding,
1763+
sort_order
17621764
)
17631765
SELECT
17641766
check_id = 1,
@@ -1772,7 +1774,10 @@ BEGIN
17721774
nvarchar(20),
17731775
COUNT_BIG(DISTINCT dp.event_date)
17741776
) +
1775-
N' deadlocks.'
1777+
N' deadlocks.',
1778+
sort_order =
1779+
ROW_NUMBER()
1780+
OVER (ORDER BY COUNT_BIG(DISTINCT dp.event_date) DESC)
17761781
FROM #deadlock_process AS dp
17771782
WHERE 1 = 1
17781783
AND (dp.database_name = @DatabaseName OR @DatabaseName IS NULL)
@@ -1797,7 +1802,8 @@ BEGIN
17971802
database_name,
17981803
object_name,
17991804
finding_group,
1800-
finding
1805+
finding,
1806+
sort_order
18011807
)
18021808
SELECT
18031809
check_id = 2,
@@ -1812,7 +1818,10 @@ BEGIN
18121818
nvarchar(20),
18131819
COUNT_BIG(DISTINCT dow.event_date)
18141820
) +
1815-
N' deadlock(s) between read queries and modification queries.'
1821+
N' deadlock(s) between read queries and modification queries.',
1822+
sort_order =
1823+
ROW_NUMBER()
1824+
OVER (ORDER BY COUNT_BIG(DISTINCT dow.event_date) DESC)
18161825
FROM #deadlock_owner_waiter AS dow
18171826
WHERE 1 = 1
18181827
AND dow.lock_mode IN
@@ -1851,7 +1860,8 @@ BEGIN
18511860
database_name,
18521861
object_name,
18531862
finding_group,
1854-
finding
1863+
finding,
1864+
sort_order
18551865
)
18561866
SELECT
18571867
check_id = 3,
@@ -1870,7 +1880,10 @@ BEGIN
18701880
nvarchar(20),
18711881
COUNT_BIG(DISTINCT dow.event_date)
18721882
) +
1873-
N' deadlock(s).'
1883+
N' deadlock(s).',
1884+
sort_order =
1885+
ROW_NUMBER()
1886+
OVER (ORDER BY COUNT_BIG(DISTINCT dow.event_date) DESC)
18741887
FROM #deadlock_owner_waiter AS dow
18751888
WHERE 1 = 1
18761889
AND (dow.database_id = @DatabaseId OR @DatabaseName IS NULL)
@@ -1895,7 +1908,8 @@ BEGIN
18951908
database_name,
18961909
object_name,
18971910
finding_group,
1898-
finding
1911+
finding,
1912+
sort_order
18991913
)
19001914
SELECT
19011915
check_id = 3,
@@ -1909,7 +1923,10 @@ BEGIN
19091923
nvarchar(20),
19101924
COUNT_BIG(DISTINCT dow.event_date)
19111925
) +
1912-
N' deadlock(s).'
1926+
N' deadlock(s).',
1927+
sort_order =
1928+
ROW_NUMBER()
1929+
OVER (ORDER BY COUNT_BIG(DISTINCT dow.event_date) DESC)
19131930
FROM #deadlock_owner_waiter AS dow
19141931
WHERE 1 = 1
19151932
AND (dow.database_id = @DatabaseId OR @DatabaseName IS NULL)
@@ -1940,7 +1957,8 @@ BEGIN
19401957
database_name,
19411958
object_name,
19421959
finding_group,
1943-
finding
1960+
finding,
1961+
sort_order
19441962
)
19451963
SELECT
19461964
check_id = 3,
@@ -1954,7 +1972,10 @@ BEGIN
19541972
nvarchar(20),
19551973
COUNT_BIG(DISTINCT dow.event_date)
19561974
) +
1957-
N' deadlock(s).'
1975+
N' deadlock(s).',
1976+
sort_order =
1977+
ROW_NUMBER()
1978+
OVER (ORDER BY COUNT_BIG(DISTINCT dow.event_date) DESC)
19581979
FROM #deadlock_owner_waiter AS dow
19591980
WHERE 1 = 1
19601981
AND (dow.database_id = @DatabaseId OR @DatabaseName IS NULL)
@@ -1984,7 +2005,8 @@ BEGIN
19842005
database_name,
19852006
object_name,
19862007
finding_group,
1987-
finding
2008+
finding,
2009+
sort_order
19882010
)
19892011
SELECT
19902012
check_id = 4,
@@ -1999,7 +2021,10 @@ BEGIN
19992021
nvarchar(20),
20002022
COUNT_BIG(DISTINCT dp.event_date)
20012023
) +
2002-
N' instances of Serializable deadlocks.'
2024+
N' instances of Serializable deadlocks.',
2025+
sort_order =
2026+
ROW_NUMBER()
2027+
OVER (ORDER BY COUNT_BIG(DISTINCT dow.event_date) DESC)
20032028
FROM #deadlock_process AS dp
20042029
WHERE dp.isolation_level LIKE N'serializable%'
20052030
AND (dp.database_name = @DatabaseName OR @DatabaseName IS NULL)
@@ -2024,7 +2049,8 @@ BEGIN
20242049
database_name,
20252050
object_name,
20262051
finding_group,
2027-
finding
2052+
finding,
2053+
sort_order
20282054
)
20292055
SELECT
20302056
check_id = 5,
@@ -2038,7 +2064,10 @@ BEGIN
20382064
nvarchar(20),
20392065
COUNT_BIG(DISTINCT dp.event_date)
20402066
) +
2041-
N' instances of Repeatable Read deadlocks.'
2067+
N' instances of Repeatable Read deadlocks.',
2068+
sort_order =
2069+
ROW_NUMBER()
2070+
OVER (ORDER BY COUNT_BIG(DISTINCT dow.event_date) DESC)
20422071
FROM #deadlock_process AS dp
20432072
WHERE dp.isolation_level LIKE N'repeatable%'
20442073
AND (dp.database_name = @DatabaseName OR @DatabaseName IS NULL)
@@ -2063,7 +2092,8 @@ BEGIN
20632092
database_name,
20642093
object_name,
20652094
finding_group,
2066-
finding
2095+
finding,
2096+
sort_order
20672097
)
20682098
SELECT
20692099
check_id = 6,
@@ -2096,7 +2126,10 @@ BEGIN
20962126
dp.host_name,
20972127
N'UNKNOWN'
20982128
) +
2099-
N'.'
2129+
N'.',
2130+
sort_order =
2131+
ROW_NUMBER()
2132+
OVER (ORDER BY COUNT_BIG(DISTINCT dp.event_date) DESC)
21002133
FROM #deadlock_process AS dp
21012134
WHERE 1 = 1
21022135
AND (dp.database_name = @DatabaseName OR @DatabaseName IS NULL)
@@ -2177,7 +2210,8 @@ BEGIN
21772210
database_name,
21782211
object_name,
21792212
finding_group,
2180-
finding
2213+
finding,
2214+
sort_order
21812215
)
21822216
SELECT
21832217
check_id = 7,
@@ -2204,7 +2238,10 @@ BEGIN
22042238
1,
22052239
1,
22062240
N''
2207-
) + N' locks.'
2241+
) + N' locks.',
2242+
sort_order =
2243+
ROW_NUMBER()
2244+
OVER (ORDER BY CONVERT(bigint, lt2.lock_count) DESC)
22082245
FROM lock_types AS lt
22092246
OPTION(RECOMPILE);
22102247

@@ -2360,7 +2397,8 @@ BEGIN
23602397
database_name,
23612398
object_name,
23622399
finding_group,
2363-
finding
2400+
finding,
2401+
sort_order
23642402
)
23652403
SELECT
23662404
check_id = 9,
@@ -2379,7 +2417,10 @@ BEGIN
23792417
nvarchar(10),
23802418
COUNT_BIG(DISTINCT ds.id)
23812419
) +
2382-
N' deadlocks.'
2420+
N' deadlocks.',
2421+
sort_order =
2422+
ROW_NUMBER()
2423+
OVER (ORDER BY COUNT_BIG(DISTINCT ds.id) DESC)
23832424
FROM #deadlock_stack AS ds
23842425
JOIN #deadlock_process AS dp
23852426
ON dp.id = ds.id
@@ -2568,7 +2609,9 @@ BEGIN
25682609
),
25692610
14
25702611
)
2571-
END
2612+
END,
2613+
total_waits =
2614+
SUM(CONVERT(bigint, dp.wait_time))
25722615
FROM #deadlock_owner_waiter AS dow
25732616
JOIN #deadlock_process AS dp
25742617
ON (dp.id = dow.owner_id
@@ -2593,7 +2636,8 @@ BEGIN
25932636
database_name,
25942637
object_name,
25952638
finding_group,
2596-
finding
2639+
finding,
2640+
sort_order
25972641
)
25982642
SELECT
25992643
check_id = 11,
@@ -2614,7 +2658,10 @@ BEGIN
26142658
cs.wait_time_hms,
26152659
14
26162660
) +
2617-
N' [dd hh:mm:ss:ms] of deadlock wait time.'
2661+
N' [dd hh:mm:ss:ms] of deadlock wait time.',
2662+
sort_order =
2663+
ROW_NUMBER()
2664+
OVER (ORDER BY cs.total_waits DESC)
26182665
FROM chopsuey AS cs
26192666
WHERE cs.object_name IS NOT NULL
26202667
OPTION(RECOMPILE);
@@ -2662,7 +2709,8 @@ BEGIN
26622709
database_name,
26632710
object_name,
26642711
finding_group,
2665-
finding
2712+
finding,
2713+
sort_order
26662714
)
26672715
SELECT
26682716
check_id = 12,
@@ -2775,7 +2823,10 @@ BEGIN
27752823
),
27762824
14
27772825
) END +
2778-
N' [dd hh:mm:ss:ms] of deadlock wait time.'
2826+
N' [dd hh:mm:ss:ms] of deadlock wait time.',
2827+
sort_order =
2828+
ROW_NUMBER()
2829+
OVER (ORDER BY wt.total_wait_time_ms DESC)
27792830
FROM wait_time AS wt
27802831
GROUP BY
27812832
wt.database_name
@@ -2794,7 +2845,8 @@ BEGIN
27942845
database_name,
27952846
object_name,
27962847
finding_group,
2797-
finding
2848+
finding,
2849+
sort_order
27982850
)
27992851
SELECT
28002852
check_id = 13,
@@ -2809,7 +2861,10 @@ BEGIN
28092861
finding =
28102862
N'There have been ' +
28112863
RTRIM(COUNT_BIG(DISTINCT aj.event_date)) +
2812-
N' deadlocks from this Agent Job and Step.'
2864+
N' deadlocks from this Agent Job and Step.',
2865+
sort_order =
2866+
ROW_NUMBER()
2867+
OVER (ORDER BY COUNT_BIG(DISTINCT aj.event_date) DESC)
28132868
FROM #agent_job AS aj
28142869
GROUP BY
28152870
DB_NAME(aj.database_id),
@@ -2925,7 +2980,8 @@ BEGIN
29252980
database_name,
29262981
object_name,
29272982
finding_group,
2928-
finding
2983+
finding,
2984+
sort_order
29292985
)
29302986
VALUES
29312987
(
@@ -3731,7 +3787,9 @@ BEGIN
37313787
df.finding_group,
37323788
df.finding
37333789
FROM #deadlock_findings AS df
3734-
ORDER BY df.check_id
3790+
ORDER BY
3791+
df.check_id,
3792+
df.sort_order
37353793
OPTION(RECOMPILE);
37363794

37373795
SET @d = CONVERT(varchar(40), GETDATE(), 109);

0 commit comments

Comments
 (0)