Skip to content

Commit 9c55964

Browse files
Surface average I/O size (KB) per file in sp_PressureDetector (#773)
Adds avg_read_kb and avg_write_kb to the file metrics output, computed from sys.dm_io_virtual_file_stats num_of_bytes_read / num_of_reads (and the write counterparts). Values flow through the snapshot temp table, the @log_to_table path, and both the snapshot and delta CTE branches. Helps explain disk-latency findings: a high avg_read_stall_ms paired with a small avg_read_kb says random small reads, while the same stall with a large avg_read_kb says big sequential pulls. Two different remediations.
1 parent 6d902ee commit 9c55964

1 file changed

Lines changed: 86 additions & 0 deletions

File tree

sp_PressureDetector/sp_PressureDetector.sql

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,10 +630,14 @@ OPTION(MAXDOP 1, RECOMPILE);',
630630
total_mb_read decimal(38,2) NULL,
631631
total_read_count bigint NULL,
632632
avg_read_stall_ms decimal(38,2) NULL,
633+
avg_read_kb decimal(38,2) NULL,
633634
total_gb_written decimal(38,2) NULL,
634635
total_mb_written decimal(38,2) NULL,
635636
total_write_count bigint NULL,
636637
avg_write_stall_ms decimal(38,2) NULL,
638+
avg_write_kb decimal(38,2) NULL,
639+
num_of_bytes_read bigint NULL,
640+
num_of_bytes_written bigint NULL,
637641
io_stall_read_ms bigint NULL,
638642
io_stall_write_ms bigint NULL,
639643
PRIMARY KEY CLUSTERED (collection_time, id)
@@ -1052,10 +1056,14 @@ OPTION(MAXDOP 1, RECOMPILE);',
10521056
total_mb_read decimal(38,2),
10531057
total_read_count bigint,
10541058
avg_read_stall_ms decimal(38,2),
1059+
avg_read_kb decimal(38,2),
10551060
total_gb_written decimal(38,2),
10561061
total_mb_written decimal(38,2),
10571062
total_write_count bigint,
10581063
avg_write_stall_ms decimal(38,2),
1064+
avg_write_kb decimal(38,2),
1065+
num_of_bytes_read bigint,
1066+
num_of_bytes_written bigint,
10591067
io_stall_read_ms bigint,
10601068
io_stall_write_ms bigint,
10611069
sample_time datetime
@@ -1698,6 +1706,21 @@ OPTION(MAXDOP 1, RECOMPILE);',
16981706
0.
16991707
)
17001708
),
1709+
avg_read_kb =
1710+
CONVERT
1711+
(
1712+
decimal(38, 2),
1713+
ISNULL
1714+
(
1715+
(vfs.num_of_bytes_read / 1024.) /
1716+
CONVERT
1717+
(
1718+
decimal(38, 2),
1719+
NULLIF(vfs.num_of_reads, 0.)
1720+
),
1721+
0.
1722+
)
1723+
),
17011724
total_gb_written =
17021725
CASE
17031726
WHEN vfs.num_of_bytes_written > 0
@@ -1735,6 +1758,25 @@ OPTION(MAXDOP 1, RECOMPILE);',
17351758
0.
17361759
)
17371760
),
1761+
avg_write_kb =
1762+
CONVERT
1763+
(
1764+
decimal(38, 2),
1765+
ISNULL
1766+
(
1767+
(vfs.num_of_bytes_written / 1024.) /
1768+
CONVERT
1769+
(
1770+
decimal(38, 2),
1771+
NULLIF(vfs.num_of_writes, 0.)
1772+
),
1773+
0.
1774+
)
1775+
),
1776+
num_of_bytes_read =
1777+
vfs.num_of_bytes_read,
1778+
num_of_bytes_written =
1779+
vfs.num_of_bytes_written,
17381780
io_stall_read_ms,
17391781
io_stall_write_ms,
17401782
sample_time =
@@ -1790,10 +1832,14 @@ OPTION(MAXDOP 1, RECOMPILE);',
17901832
total_mb_read,
17911833
total_read_count,
17921834
avg_read_stall_ms,
1835+
avg_read_kb,
17931836
total_gb_written,
17941837
total_mb_written,
17951838
total_write_count,
17961839
avg_write_stall_ms,
1840+
avg_write_kb,
1841+
num_of_bytes_read,
1842+
num_of_bytes_written,
17971843
io_stall_read_ms,
17981844
io_stall_write_ms,
17991845
sample_time
@@ -1816,6 +1862,8 @@ OPTION(MAXDOP 1, RECOMPILE);',
18161862
fm.file_size_gb,
18171863
fm.avg_read_stall_ms,
18181864
fm.avg_write_stall_ms,
1865+
fm.avg_read_kb,
1866+
fm.avg_write_kb,
18191867
fm.total_gb_read,
18201868
fm.total_gb_written,
18211869
total_read_count =
@@ -1838,6 +1886,8 @@ OPTION(MAXDOP 1, RECOMPILE);',
18381886
fm.avg_read_stall_ms,
18391887
fm.avg_write_stall_ms,
18401888
fm.total_avg_stall_ms,
1889+
fm.avg_read_kb,
1890+
fm.avg_write_kb,
18411891
fm.total_gb_read,
18421892
fm.total_gb_written,
18431893
fm.total_read_count,
@@ -1855,6 +1905,8 @@ OPTION(MAXDOP 1, RECOMPILE);',
18551905
avg_read_stall_ms = 0,
18561906
avg_write_stall_ms = 0,
18571907
total_avg_stall_ms = 0,
1908+
avg_read_kb = 0,
1909+
avg_write_kb = 0,
18581910
total_gb_read = 0,
18591911
total_gb_written = 0,
18601912
total_read_count = N'0',
@@ -1927,6 +1979,30 @@ OPTION(MAXDOP 1, RECOMPILE);',
19271979
)
19281980
)
19291981
END,
1982+
avg_read_kb =
1983+
CASE
1984+
WHEN (fm2.total_read_count - fm.total_read_count) = 0
1985+
THEN 0.00
1986+
ELSE
1987+
CONVERT
1988+
(
1989+
decimal(38, 2),
1990+
((fm2.num_of_bytes_read - fm.num_of_bytes_read) / 1024.) /
1991+
(fm2.total_read_count - fm.total_read_count)
1992+
)
1993+
END,
1994+
avg_write_kb =
1995+
CASE
1996+
WHEN (fm2.total_write_count - fm.total_write_count) = 0
1997+
THEN 0.00
1998+
ELSE
1999+
CONVERT
2000+
(
2001+
decimal(38, 2),
2002+
((fm2.num_of_bytes_written - fm.num_of_bytes_written) / 1024.) /
2003+
(fm2.total_write_count - fm.total_write_count)
2004+
)
2005+
END,
19302006
total_mb_read =
19312007
(fm2.total_mb_read - fm.total_mb_read),
19322008
total_mb_written =
@@ -1954,6 +2030,8 @@ OPTION(MAXDOP 1, RECOMPILE);',
19542030
f.avg_read_stall_ms,
19552031
f.avg_write_stall_ms,
19562032
f.total_avg_stall,
2033+
f.avg_read_kb,
2034+
f.avg_write_kb,
19572035
total_mb_read =
19582036
FORMAT(f.total_mb_read, 'N0'),
19592037
total_mb_written =
@@ -2003,10 +2081,14 @@ OPTION(MAXDOP 1, RECOMPILE);',
20032081
total_mb_read,
20042082
total_read_count,
20052083
avg_read_stall_ms,
2084+
avg_read_kb,
20062085
total_gb_written,
20072086
total_mb_written,
20082087
total_write_count,
20092088
avg_write_stall_ms,
2089+
avg_write_kb,
2090+
num_of_bytes_read,
2091+
num_of_bytes_written,
20102092
io_stall_read_ms,
20112093
io_stall_write_ms
20122094
)
@@ -2020,10 +2102,14 @@ OPTION(MAXDOP 1, RECOMPILE);',
20202102
fm.total_mb_read,
20212103
fm.total_read_count,
20222104
fm.avg_read_stall_ms,
2105+
fm.avg_read_kb,
20232106
fm.total_gb_written,
20242107
fm.total_mb_written,
20252108
fm.total_write_count,
20262109
fm.avg_write_stall_ms,
2110+
fm.avg_write_kb,
2111+
fm.num_of_bytes_read,
2112+
fm.num_of_bytes_written,
20272113
fm.io_stall_read_ms,
20282114
fm.io_stall_write_ms
20292115
FROM #file_metrics AS fm;

0 commit comments

Comments
 (0)