Оптимальные настройки MySQL, какие они? Как правильно сконфигурировать MySQL?

Аватар пользователя admin

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.

 

0
Ваш рейтинг: Нет