Назад | Перейти на главную страницу

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

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

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

Спасибо

В общем, две достойные Linux FS в наши дни - это XFS и EXT4, обе файловые системы на основе экстентов.

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

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

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

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

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

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

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

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

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

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

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

Кстати, вы можете найти много хороших советов по Блог о производительности MySQL.

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