Оптимальная настройка Mysql

Конфигурационные параметры по умолчанию в Mysql рассчитаны на небольшие базы данных, работающие под малыми нагрузками на скромном железе. Настройка некоторых параметров может повысить производительность Вашей базы данных в несколько раз.

Процесс оптимальной настройки Mysql состоит из двух частей — первоначальная настройка и корректировка параметров во время работы. Корректировка параметров в рабочем режиме во многом зависит от специфики Вашей системы и ее мониторинга — тут особых правил не существует. Для стартовой настройки есть ряд рекомендаций.

Откройте файл настроек mysql, например:

sudo nano /etc/mysql/my.cnf

Самые распространенные параметры, которые следует подстроить под нужды Вашего проекта и конфигурацию железа приведены ниже.

key_buffer_size

Если Вы используете только MyIsam таблицы, устанавливайте это значение в 30%…40% всей доступной оперативной памяти на сервере. MyIsam использует кеш операционной системы для данных, поэтому учтите, что оставшаяся свободная память понадобится именно для этого. Если же MyIsam таблиц у Вас немного и их совокупный размер маленький — оставьте это значение в пределах 32M.

innodb_buffer_pool_size

Если Вы используете только InnoDB таблицы, устанавливайте это значение максимально возможным для Вашей системы. Буфер InnoDB кэширует и данные и индексы (а кеш операционной системы не используется), поэтому значение этого ключа стоит устанавливать в 70%…80% доступной памяти.

Если Ваш сервер работает на Линуксе или Юниксе, не забудьте установить параметр innodb_flush_method в значение “O_DIRECT”, чтобы избежать избыточного кеширования на уровне ОС.

innodb_log_file_size

Обратите внимание на этот параметр, если у Вас предусматривается большой показатель записей. Чем больше размер этого ключа, тем более эффективно будет происходить запись данных. Но учтите, что при этом увеличится время восстановления системы! Этот параметр обычно устанавливают в 64M-512M.

innodb_flush_log_at_trx_commit

Этот параметр в значительной степени влияет на скорость работы (записи) innoDB таблиц. Значение “1” означает, что любая завершенная транзакция будет синхронно сбрасывать лог на диск. Значение “2” делает то же самое, только сбрасывает лог не на диск, а в кеш операционной системы. Это значение подойдет в большинстве случаев, т.к. не выполняет дорогой операции записи после каждой транзакции. При этом лог пишется на диск с задержкой в несколько секунд, что весьма безопасно с точки зрения сохранности данных. Значение “0” даст наибольшую производительность. В этом случае буфер будет сбрасывать в лог файл независимо от транзакций. Устанавливайте этот параметр в “0” на свой риск, т.к. в этом случае риск потери данных возрастает.

table_cache

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

thread_cache_size

Этот параметр помогает избежать операций создания/уничтожения потоков при соединении к серверу. Установите этот параметр в 16 и наращивайте по мере потребности. Проверяйте показатель “Threads_created”, идеально он должен быть равным нулю:

mysql> show status like 'threads_created';
+-----------------+--------+
| Variable_name | Value |
+-----------------+--------+
| Threads_created | 423312 |
+-----------------+--------+

query_cache_size

Значение этого параметра определяет сколько памяти стоит использовать под кеш запросов. Не увлекайтесь установкой огромных значений. Кеш запросов не должен быть большим, т.к. mysql будет съедать ресурсы на управление данными в кеше. Начните с 32М…128М, и увеличивайте по мере необходимости.

Самое важное

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

Источник ruhighload.com

en_USEnglish