Выдано 101736 лицензий

Настройка MySQL

Основное конфигурирование MySQL осуществляется с помощью файла /etc/my.cnf или /etc/mysql/my.cnf

Указание кодировок и collation

В секцию [mysqld] добавим строки:

character-set-server=utf8
collation-server=utf8_general_ci
init-connect="SET NAMES utf8"

  • character-set-server - кодировка для всего сервера;
  • collation-server - порядок символов и строк на основе алфавитного порядка и классов эквивалентности;
  • init-connect - строка, выполняемая для каждого клиента при соединении.

Ограничение количества соединений

max_connections = 650

Оптимизация MySQL для MyISAM

Оптимизация параметров MySQL позволяет значительно увеличить производительность MyISAM.

Буферы

Основными параметрами являются key_buffer_size (буфер для работы с ключами и индексами) и sort_buffer (буфер для сортировки).

key_buffer_size = 64M
sort_buffer_size = 32M

При наличии 16Гб памяти и более, рекомендуется увеличить key_buffer_size до 128M-256M. Если Вы не используете MyISAM таблицы, рекомендуется установить размер key_buffer_size в 32Мб для хранения индексов временных таблиц.

Кэши

Кэш запросов указывается в опции query_cache_size, ограничение на кэшируемый элемент в query_cache_limit, кэш открытых таблиц в table_cache.

table_cache = 1024
query_cache_limit = 2M
query_cache_size = 128M
query_cache_type = 1
thread_cache_size = 8

Будьте внимательны при установке завышенного значения query_cache_size, т.к. это может привести к ожиданию блокировок (Be careful not to set the size of the cache too large. Due to the need for threads to lock the cache during updates, you may see lock contention issues with a very large cache). Мы не рекомендуем устанавливать значение больше 256M.

Параметр thread_cache_size указывает количество тредов (threads), уходящих в кеш при отключении клиента. При новом подключении тред не создается, а берется из кеша, что позволяет экономить ресурсы при больших нагрузках. При наличии 16Гб памяти и более рекомендуем увеличить thread_cache_size до 16, table_cache в диапазон 2048-4096, query_cache_size до 256M.

Перенос временных файлов MySQL в память

Проверяем наличие /dev/shm:

df -h

Настройки размещаются в /etc/fstab, рекомендуем указать размер, например, 1G:

none      /dev/shm        tmpfs   defaults,size=1G        0 0

Если внесли изменения, то перемонтируем:

mount -o remount /dev/shm

В конфигурационном файле указываем:

tmpdir = /dev/shm

Оптимизация MySQL для InnoDB

Стандартно все таблицы и индексы хранятся в одном файле, мы рекомендуем использовать опцию innodb_file_per_table для установки хранения каждой таблицы в отдельном файле.

innodb_file_per_table = 1

Важнейшей настройкой MySQL при работе с InnoDB является innodb_buffer_pool_size, устанавливается по принципу "чем больше, тем лучше". Рекомендуется выделять до 70-80% оперативной памяти сервера под innodb_buffer_pool_size. Не забудьте провести расчет использования памяти Apache и дополнительным программным обеспечением для исключения сваливания системы в swap. Для сервера с 16Гб устанавливается в диапазоне 10-12G:

innodb_buffer_pool_size = 10G

Размер памяти, выделяемый InnoDB для хранения различных внутренних структур, устанавливается 16M-32M

innodb_additional_mem_pool_size = 20M

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

innodb_log_file_size = 64M
innodb_log_buffer_size = 16M

При установке значения в 2 буфер не сбрасывается на диск, а только в кэш операционной системы. Установка значения в 0 увеличит быстродействие, однако возможна потеря последних данных при аварийном выключении mysql-сервера.

innodb_flush_log_at_trx_commit = 0

Количество потоков ввода/вывода файлов в InnoDB задается опцией innodb_file_io_threads, обычно этому параметру присваивается значение 4 или 8.

innodb_file_io_threads = 8

С версии MySQL 5.5 разделено на 2 опции:

innodb_read_io_threads=8
innodb_write_io_threads=8

После применения изменений перезагрузите MySQL:

# service mysqld restart