我正在尝试使用 sys.dm_io_virtual_file_stats DMF 在我的许多服务器上生成所以 IO 等待信息。我遇到了 Paul Randall 的这篇文章:http ://www.sqlskills.com/blogs/paul/survey-tempdb-and-transaction-log-io-latencies/ 。在其中,他要求人们用这个查询的结果来回应:
SELECT
[database_id],
[file_id],
[ReadLatency] =
CASE WHEN [num_of_reads] = 0
THEN 0 ELSE ([io_stall_read_ms] / [num_of_reads]) END,
[WriteLatency] =
CASE WHEN [num_of_writes] = 0
THEN 0 ELSE ([io_stall_write_ms] / [num_of_writes]) END
FROM
sys.dm_io_virtual_file_stats (NULL, NULL)
WHERE
[file_id] = 2 OR [database_id] = 2;
GO
我的问题是他为什么要使用io_stall_read_ms / num_of_reads
而不是io_stall_read_ms / num_of_bytes_read
为了获得平均值。我认为 ms/byte 会比 ms/read 提供更多信息。这至少在一定程度上让我相信我不明白 num_of_reads/writes 列实际代表什么。
BOL 只是说
对文件发出的读取次数。
这对我帮助不大。我会很感激我能得到的任何澄清。
I/O 系统的延迟(每个 IOPS 的平均延迟是一个指标)告诉您是否在 I/O 系统上添加了超出其处理能力的负载。因此,与您正在运行的媒体相比,平均延迟可以很好地指示 I/O 是否存在问题。
根据经验,如果 I/O 系统没有过载,以下是您应该预期的延迟
如果您看到的延迟高于此值,您就知道 I/O 系统被要求做的工作超出了它的处理能力