Высокий iowait, в то время как wMB / s низок

8

Я индексировал таблицу MySQL. Это делает высокую нагрузку на этот компьютер.

Кажется, из-за высокого Айоваит. Но это также показывает, что wMB / s составляет всего 2,87.

Разве обычный SATA HDD не способен обрабатывать более 2,87 МБ / с? Почему тогда процесс такой медленный?

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
Cheng
источник

Ответы:

12

Вы делаете небольшие случайные записи, что является самой медленной вещью, которую вы можете сделать на вращающемся диске, поэтому я бы сказал, что ваша пропускная способность соответствует (моим) ожиданиям.

Ваш avgrq-szразмер составляет 15,35, что означает, что ваш средний запрос составляет 15,35 x размер сектора вашего диска SATA (чаще всего 512 байт, но, возможно, 4096 байт на совершенно новом диске SATA), поэтому вы пишете 15,35 x 512 байт = 7 859,2 байт. (в среднем) на запрос, то, что 383 iostatопераций записи в секунду составляет 3 010 073,6 байта (мы умножаем на среднее значение, поэтому получаем 0,6 байта). И 3 010 073,6 байт / с - 2,87 МБ / с.

Сколько записей вы можете сделать в секунду, будет зависеть от того, сколько дисков нужно для перемещения головок, но, грубо говоря, вы приближаетесь к максимальному количеству записей, которые ваше устройство может сделать за секунду.

Более высокая скорость записи на вращающихся дисках происходит, когда вы объединяете небольшое количество записей в секунду с большим avgrq-sz.

Если это критическая проблема для вас, я бы предложил изучить различные варианты твердотельных накопителей, которые обычно дают гораздо лучшую производительность при такой рабочей нагрузке.

п.д.о.
источник
4

Вам нужно запустить iostatнесколько раз, следя за этим, чтобы создать реальную картину того, что происходит. Или используйте такой инструмент, как Cacti, чтобы со временем вести такую ​​статистику, чтобы вы могли посмотреть на исторический график.

Скорее всего, это происходит из-за того, что диск также выполняет много операций чтения из-за сканирования таблицы БД, и опубликованный iostatвами прогон был выполнен в то время, когда СУБД писала, а не читала. Запись с чередованием с чтением на медленном диске действительно медленная, потому что включает в себя поиск, что является самой медленной вещью, которую делает жесткий диск. Если вы слушаете жесткий диск, вы, вероятно, слышите, как он безумно дребезжит, поскольку он быстро переключается между записью и чтением на разные части жесткого диска.

Чтобы запустить этот процесс с ожидаемой двузначной скоростью в Мбайт / с, вам придется разделить процесс на две части: создать индекс в ОЗУ при сканировании таблицы, а затем записать полный индекс. MySQL - высокооптимизированное программное обеспечение, поэтому, если бы оно могло это сделать, я ожидаю, что это произойдет, а поскольку это не так, оно не сможет. То есть, вероятно, ему не хватает оперативной памяти для этого. Это либо означает, что у вас недостаточно физической оперативной памяти в машине для части MySQL, чтобы содержать полный индекс, либо вы не указали достаточно большую часть оперативной памяти системы в файле конфигурации MySQL. Однако настройка MySQL - это тема для другого форума.

Уоррен Янг
источник