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