Проблемы с интерпретацией мер tps Иостата
Прелюдия: Я сбросил базу данных объемом 5,2 ГБ с помощью команды mysqldump. Я сделал это на слабом виртуальном сервере с 512 МБ памяти. Это заняло около часа. Сейчас я перезагружаю эту базу данных на моем настольном компьютере с двухъядерным процессором и 2 ГБ памяти. Перезагрузка уже девятого часа, и я даже не знаю, подходит ли она к концу. Я перезагрузил эту базу данных на той же машине около года назад, и это заняло всего два часа. Разница между тогда и сейчас состоит в том, что я заменил свой единственный жесткий диск ATA двумя дисками SATA в режиме raid1. Я знаю, что raid1 будет писать медленнее (теоретически), но определенно не в 4,5 раза медленнее! Так что я разразился иостатом и просто запутался.
$ sudo iostat
Linux 2.6.30-2-amd64 (lukahn) 12/12/2009 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
7.13 0.00 1.94 27.96 0.00 62.97
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 144.02 198.41 11139.44 9322418 523399320
sdb 143.78 165.59 11137.39 7780516 523303000
hda 0.01 0.05 0.00 2492 0
md0 0.66 6.44 0.71 302538 33496
md1 7.32 67.02 7.51 3148938 352960
md2 6.08 240.02 18.95 11277610 890584
md3 1389.80 46.85 11106.55 2201410 521853640
md4 0.41 3.03 0.21 142322 9824
sda и sdb - это настоящие диски SATA, которые поддерживают устройства md, как вы можете увидеть в /proc/mdstat:
$ cat /proc/mdstat
Personalities : [raid0] [raid1]
md4 : active raid0 sda6[0] sdb6[1]
48821248 blocks 64k chunks
md3 : active raid1 sda5[0] sdb5[1]
48829440 blocks [2/2] [UU]
md2 : active raid1 sda4[0] sdb4[1]
1318358080 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
48829440 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
9767424 blocks [2/2] [UU]
Файл.sql, с которого я перезагружаюсь, находится в разделе / home на md2, а раздел /var на md3. Я предполагаю, что блоки, записанные в md3, намного выше, чем блоки, считанные из md2, из-за регенерирующих индексов MySql. Однако большой вопрос, который у меня возникает, заключается в том, как показатель tps для md3 может быть намного выше, чем показатель tps для sda и sdb?
Параметр -m для iostat показывает одинаковый объем данных (5,55 МБ / с), записываемых на диск как для md3, так и для sda / sdb:
$ sudo iostat -m
Linux 2.6.30-2-amd64 (lukahn) 12/12/2009 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
7.39 0.00 2.00 28.16 0.00 62.44
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 145.16 0.10 5.55 4976 267768
sdb 144.90 0.09 5.55 4143 267716
hda 0.01 0.00 0.00 1 0
md0 0.66 0.00 0.00 154 16
md1 7.18 0.03 0.00 1580 172
md2 6.19 0.13 0.01 6153 443
md3 1418.41 0.02 5.53 1146 266994
md4 0.40 0.00 0.00 69 5
Страница справочника iostat гласит:
ТПС
Укажите количество передач в секунду, которые были выданы устройству. Передача - это запрос ввода-вывода на устройство. Несколько логических запросов могут быть объединены в один запрос ввода-вывода к устройству. Перевод имеет неопределенный размер.
Я не ожидаю, что они будут одинаковыми, но, конечно, не будут отличаться на 864%! Это признак узкого места из-за неправильной настройки устройства md или я просто ни о чем не беспокоюсь?
3 ответа
Это один вызов iostat, который не предоставляет значимых данных для значений "в секунду", полезны только счетчики - он не может рассчитать изменение в секунду из одного значения, ему нужно знать два значения и время между ними. Чтобы увидеть реальные значения, попробуйте что-то вроде:
iostat -d 1 2
Вторым выводом будут реальные значения.
Из справочной страницы iostat:
Первый отчет, сгенерированный командой iostat, предоставляет статистику времени, прошедшего с момента загрузки системы. Каждый последующий отчет охватывает время с момента предыдущего отчета.
Поскольку скорости передачи одинаковы, предоставленные вами данные говорят мне, что уровень MD кэширует транзакции, а затем записывает их на физический диск большими кусками.
Как вы сказали, медлительность, с которой вы сталкиваетесь при перезагрузке базы данных, вероятно, вызвана индексами. Вы можете избежать этого, просто не обновляя индексы при загрузке данных, а затем просто воссоздайте индексы в конце.
Частота транзакций, поддерживаемая данным диском, является функцией времени поиска дорожки. Для дисков SATA это обычно около 5-8 мс, так что я бы ожидал где-то около 125-200 транзакций в секунду.
Вы видите ~145 т / с на каждом из дисков, так что это кажется довольно разумным.