Первое, что надо сделать - сбалансировать потребление памяти сервером. Не обязательно делать это вручную. Можно воспользоваться скриптом mysqltuner. Перечислю параметры Global + Thread, из которых складывается потребление памяти:
Global:
innodb_buffer_pool_sizeinnodb_log_file_sizekey_buffer_sizeinnodb_log_buffer_sizequery_cache_sizearia_pagecache_buffer_sizeЭти значения просто суммируются.
Thread:
sort_buffer_sizejoin_buffer_sizeread_buffer_sizeread_rnd_buffer_sizemax_allowed_packetthread_stackЭти значения суммируются и умножаются на
max_connections. Как я уже сказал, не обязательно их все править. Можно воспользоваться mysqltuner или оставить дефолтные значения, а вручную указать наиболее критичные - innodb_buffer_pool_size, max_connections. Остальные параметры mysqltuner подскажет, как подогнать под основные. Innodb_buffer_pool_size подбирают таким образом, чтобы с учётом всех остальных параметров суммарное потребление оперативной памяти не выходило за отведённые для Mysql Server пределы.
Обязательно проверяю:
bind-address = 127.0.0.1Если не требуются подключения извне, привязываю к localhost.
Проверяю расположение логов и чаще всего сразу добавляю лог медленных запросов:
log_error = /var/log/mysql/error.logslow_query_logslow_query_log_file = /var/log/mysql/slow.loglong_query_time = 2.0Указываю нужную кодировку. Сейчас вроде бы везде utf8mb4 по умолчанию стоит, раньше utf8 ставили.
character-set-server = utf8mb4collation-server = utf8mb4_general_ciВажные параметры, которые заметно влияют на производительность:
open_files_limittable_open_cache Они привязаны к количеству соединений и таблиц в базе. Для того же Bitrix эти параметры имеют высокие значения и часто упираются в системные лимиты ОС для отдельного процесса. Их нужно тоже увеличить. Например вот так:
# mkdir /etc/systemd/system/mysqld.service.d# touch limit.confСодержимое файла:
[Service]LimitNOFILE=65535Ещё один параметр, на который стоит обратить внимание:
innodb_temp_data_file_pathОн регулирует размер и рост файла с временным табличным пространством. Этот файл иногда может вырастать до огромных размеров и вызывать нехватку свободного места. Имеет смысл его сразу ограничить до разумных пределов. Вот пример ограничения размера в 2 ГБ и роста частями по 12 Мб
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:2GЭто основное, на что я обращаю внимание. Более детальные настройки делаются, если возникают какие-то проблемы.
#mysql