高 iowait 而 wMB/s 低

Che*_*eng 9 performance io hard-disk mysql

我正在索引一个 MySQL 表。它使那台计算机的负载很高。

这似乎是由于高iowait。但也说明wMB/s只有2.87。

连普通的SATA硬盘都不能处理超过2.87MB/s的吗?为什么过程这么慢呢?

iostat -x 报告:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.74    0.00    3.48   47.51    0.00   47.26

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00   300.00    0.00  383.00     0.00     2.87    15.35   142.00  374.64   2.61  99.90
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00 2507.00     0.00     9.79     8.00   263.88  110.06   0.40  99.90
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    2.00     0.00     0.01     8.00     0.41  196.00 202.50  40.50
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
Run Code Online (Sandbox Code Playgroud)

pdo*_*pdo 13

你正在做小的随机写入,这几乎是你在旋转磁盘上可以做的最慢的事情,所以我会说你的吞吐量符合(我的)期望。

您的avgrq-sz大小是 15.35,这意味着您的平均请求是 15.35 x SATA 磁盘的扇区大小(最常见的是 512 字节,但在非常新的 SATA 磁盘上可能是 4096 字节),因此您正在写入 15.35 x 512 字节 = 7,859.2 字节(平均而言)每个请求,383 次写入/秒iostat报告的时间为您提供 3,010,073.6 字节(我们乘以平均值,这就是 0.6 字节的来源)。3,010,073.6 字节/秒是 2.87MB/s。

您每秒可以执行多少次写入将取决于磁盘移动磁头需要多少,但粗略地说,您正在接近设备每秒可以进行的最大写入次数。

当您将每秒少量写入与大量avgrq-sz.

如果这对您来说是一个关键的性能问题,我建议您调查各种 SSD 选项,这些选项通常会在这样的工作负载上提供更好的性能。