Оптимальные настройки MySQL, какие они? Как правильно сконфигурировать MySQL?
MySQL-сервер, как и любой другой сложный продукт, имеет множество настроек. К сожалению, не существует какого-то универсального конфига, который бы подходил на любые случаи жизни, ведь решаемые задачи и используемые приложения у каждого разные. Кроме того, значения многих настроек в первую очередь определяются конфигурацией оборудования: объёмом доступной оперативной памяти, количеству ядер процессора и т.д. Поэтому ниже дан лишь краткий перечень параметров конфигурации с пояснениями к ним, из которых с минимальными усилиями вы сможете построить себе практически оптимальную конфигурацию MySQL, т.е. правильно настроить MySQL-сервер.
Важное замечание. Всё ниженаписанное является моим ЛИЧНЫМ мнением и не претендует на абсолютную правильность!
low-priority-updates
Уменьшает приоритет операций обновления данных (UPDATE/INSERT), отдавая преимущества операциям чтения. Улучшает производительность на системах, где в основном используется чтение данных (SELECT).
thread_cache_size
Кэш потоков. MySQL-сервер написан как многопоточное (thread - поток, нить, тред) приложение. Следует поставить не менее 16.
query_cache_type
Включает кэш запросов. Установить в значение On в большинстве случаев. Off имеет смысл только в случаях, если вы уверены, что повторяющихся запросов будет крайне мало или не будет совсем.
query_cache_limit
Максимальный размер кэшируемого запроса. Если запрос будет больше данного значения, в кэш он не попадёт. Опять же, вам виднее какие у вас запросы. Если не знаете, оставьте по умолчанию.
query_cache_size
Количество оперативной памяти, которое вы отдадите под кэш. Не стоит думать, что чем больше, тем лучше. Черезмерно большой кэш - это тоже плохо. Начните со 128Mb если у вас меньше 4G оперативной памяти и с 256M, если больше,
key_buffer_size
Количество оперативной памяти, которое вы отдаёте под хранение индексов. Если у вас множество таблиц с индексами, отдайте под этот параметр 10% памяти, которую вы планируете вообще выделить MySQL-серверу. Если в ваших таблицах подавляющую часть занимают данные, а индесов мало, то 3-5% хватит за глаза.
tmp_table_size
Количество оперативной памяти, выделяемое под временные таблицы. Временные таблицы часто неявно создаются при JOIN запросах и запросах с сортировкой. То, что не влезет в tmp_table_size будет создано на диске во временном каталоге.
myisam_sort_buffer_size
Размер буфера, который будет использоваться при различного рода сортировках, если ваши таблицы использует менеджер хранения MYISAM. Начните с 10% от всей памяти, которую вы планировали выделить MySQL-серверу.
read_buffer_size
По умолчанию 128K. Редко бывает нужно менять, но можно попробовать увеличить не более чем до 512K.
read_rnd_buffer_size
Влияет на запросы с ORDER BY. Можно попробовать увеличить до 1-4Mb. Эта величина будет действовать на каждый поток MySQL-сервера, т.е. следует использовать осторожно, если у вас к серверу открывается множество соединений.
sort_buffer_size
Выделяется для операций ORDER BY или GROUP BY на каждый поток. Начните с 1-2Mb. Не следует делать значение слишком большим, потому что возможно ухудшение производительности, а не улучшение.
table_cache
Количество кэшируемых MySQL-сервером таблиц. Поскольку открытие таблицы является затратной (с точки зрения производительности) операцией, лучше чтобы побольше таблиц кэшировалось в память. В идеале это значение должно быть равно общему количеству ваших таблиц.
innodb_buffer_pool_size
Количество оператиной памяти, которое будет использоваться менеджером хранения InnoDB для индексов и данных. Если вы планируете в основном использовать именно InnoDB, то это значение может быть до 80% от памяти, которую вы планировали выделить под MySQL вообще.
innodb_flush_log_at_trx_commit
Режим сохранения буферов InnoDB на диск. Необходимо изменить на 0 или 2. Значение 1, которое почему-то установлено по умолчанию, заставляет сохранять буферы при каждой транзакции. Получается сихронная работа с диском, что крайне медленно и убивает сам диск. Режим 0 говорит сохранять буферы каждую секунду, режим 2 вообще оставляет сохранение буферов на диск операционной системе. Режим 1 супернадёжен. Режимы 0 или 2 в случае краха системы могут привести к потере нескольких последних транзакций.
innodb_log_buffer_size
Значение по умолчанию необходимо увеличить только если у вас будет большое количество транзакций. Обычно 4Mb хватает.
innodb_log_file_size
Максимальный размер log-файла. В log-файлы происходит запись журнала работы InnoDB, куда сохраняются отчёты о выполненных транзакциях и т.д. Больший размер лога улучшает производительность, но замедляет восстановление данных. Начните с 64Mb
innodb_thread_concurrency
Количество конкуретных потоков с которым работает InnoDB. Можно смело начинать с количества ядер процессора и доводить до удвоения.
innodb_flush_method
Рекомендуется выставить в значение O_DIRECT, для избежания двойной буферизации.
innodb_file_per_table
Обычно, при использовании менеджера хранения InnoDB, все таблицы хранятся в одном большом файле. Это далеко не всегда хорошо, особенно когда таблиц много. Данный параметр заставляет InnoDB для каждой таблицы создавать свой файл.
transaction-isolation
Если ваши приложения не требуют иного, рекомендуется для улучшения производительности установить значение READ-COMMITED.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 30292 просмотра