iowait高,而wMB / s低


8

我正在索引一个MySQL表。这给那台计算机带来了沉重的负担。

似乎是由于高iowait。但这也表明wMB / s仅为2.87。

普通的SATA HDD甚至不能够处理超过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

Answers:


12

您正在执行小的随机写操作,这几乎是您在旋转磁盘上执行的最慢的操作,因此我要说您的吞吐量达到了(我)的期望。

您的avgrq-sz大小为15.35,这意味着您的平均请求是SATA磁盘的扇区大小的15.35 x(最常见的是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选项,这些选项通常可以在这样的工作负载上提供更好的性能。


4

您需要iostat在监视此过程的同时运行几次,以真实了解正在发生的事情。或使用像仙人掌之类的工具随时为您保留此类统计信息,以便您查看历史图表。

最有可能发生的事情是,由于进行了DB表扫描,磁盘也正在执行大量读取操作,而iostat您发布的运行恰好是在DBMS正在写入而不是读取的时间内完成的。在硬盘上读写交错的写入确实很慢,因为它涉及查找,这是硬盘驱动器执行的最慢的操作。如果您听硬盘驱动器,则可能会听到它疯狂地嘎嘎作响,因为它在写入和读取硬盘的不同部分之间快速交替。

为了使此过程以期望的两位数MByte / s速率运行,您必须将过程一分为二,在进行表扫描时在RAM中建立索引,然后写出完整的索引。MySQL是高度优化的软件,因此,如果可以做到这一点,我希望它能够实现,并且由于它不是,所以不能做到。也就是说,它可能没有足够的RAM来执行此操作。这意味着您的机器上没有足够的物理RAM来容纳MySQL的完整索引,或者您在MySQL配置文件中没有为其提供足够大的系统RAM。但是,优化MySQL是另一个论坛的主题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.