Предложение файловой системы Linux для MySQL со 100% рабочей нагрузкой SELECT

У меня есть база данных MySQL, которая содержит миллионы строк на таблицу и всего 9 таблиц. База данных полностью заполнена, и все, что я делаю, это считывает, т.е. нет никаких INSERT или UPDATE. Данные хранятся в таблицах MyISAM.

Учитывая этот сценарий, какая файловая система Linux будет работать лучше? В настоящее время у меня есть xfs. Но я где-то читал, что у xfs ужасная производительность чтения. Это правда? Должен ли я перенести базу данных в файловую систему ext3?

Спасибо

4 ответа

В целом, в наши дни двумя приличными Linux FS являются XFS и EXT4, обе основанные на экстентах файловые системы.

Я не видел никаких серьезных различий между ними, но оба заметно лучше, чем EXT3.

Возможно, лучшее, что вы можете сделать, это:

  • Отключить время (notatime вариант крепления)
  • Увеличьте размер буферов MySQL до ~2/3 от физической памяти (оставшаяся часть для дискового кэша)
  • Проверьте свою индексацию с помощью EXPLAIN SELECT ...
  • Дамп FS и восстановление полностью записанных файлов, это немного уменьшает фрагментацию

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

wget mysqltuner.pl (польское доменное имя с перенаправлением на актуальный скрипт.)

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

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

Для простого сравнения просто настройте тестовый сервер с той же версией ядра, что и в вашей производственной системе, и используйте sysbench для сравнения xfs, ext3 и ext4.

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

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

Редактировать:

Кстати, вы можете найти много полезных советов в блоге MySQL Performance.

Насколько велика фактическая база данных? Вы упомянули миллионы строк, но это не говорит о том, насколько велика каждая строка. Я хочу сказать, что если вы не делаете никаких обновлений, а это просто база данных только для чтения, подумайте о загрузке ее в память (при условии, что она умещается и если у вас достаточно ОЗУ).

Другие вопросы по тегам