Оптимизация конфигурации MySQL/MariaDB для 1С-Битрикс
Оптимизация MySQL/MariaDB под нагрузку Битрикс
Дефолтная конфигурация MySQL после установки рассчитана на сервер с 256 МБ RAM. Битрикс на реальном магазине — это тысячи запросов в минуту к b_iblock_element, b_sale_order, b_catalog_price. Без настройки my.cnf сервер работает с буферными пулами в 128 МБ при 16 ГБ доступной памяти, делает дисковые I/O там, где должен читать из кэша, и держит пул соединений на уровне, вызывающем очереди при пиковой нагрузке.
Ключевые параметры конфигурации
InnoDB Buffer Pool — самый важный параметр. Должен вмещать рабочий набор данных целиком. На выделенном сервере БД устанавливаем 70–75% RAM:
innodb_buffer_pool_size = 12G # для 16GB RAM
innodb_buffer_pool_instances = 8 # 1 на каждый GB, но не более 64
innodb_buffer_pool_chunk_size = 128M
InnoDB Log и flush. Для Битрикс с интенсивными записями (заказы, сессии, агенты):
innodb_log_file_size = 1G
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2 # допустимо для не-финансовых данных
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2 даёт до 30% прироста производительности при записи ценой потери данных последней секунды при жёстком падении сервера — для большинства e-commerce сайтов это приемлемо.
Соединения и потоки:
max_connections = 300
thread_cache_size = 64
table_open_cache = 4000
table_definition_cache = 2000
Битрикс использует постоянные соединения через PHP-FPM. При 20 воркерах PHP-FPM и пуле в 10 процессов каждый — 200 одновременных соединений с запасом. Ставить max_connections = 1000 без нужды — значит резервировать RAM под неиспользуемые thread stacks.
Временные таблицы. Умный фильтр и поиск Битрикс активно создают временные таблицы:
tmp_table_size = 256M
max_heap_table_size = 256M
Если временная таблица не помещается в память — MySQL пишет её на диск, что замедляет запрос в 10–50 раз. Мониторим через SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables'.
Медленные запросы:
slow_query_log = 1
long_query_time = 0.5
log_queries_not_using_indexes = 1
min_examined_row_limit = 1000
Специфика MariaDB
MariaDB 10.4+ имеет ряд параметров, отсутствующих в MySQL:
innodb_adaptive_hash_index_parts = 8
aria_pagecache_buffer_size = 512M # для MyISAM/Aria таблиц сессий
Битрикс по умолчанию хранит PHP-сессии в файлах, но при использовании сессий в БД или модуля bitrix.session таблицы сессий могут быть MyISAM — учитываем это при настройке.
Что делаем в рамках услуги
Снимаем базовые метрики через mysqltuner.pl и pt-variable-advisor. Анализируем SHOW GLOBAL STATUS за период с нагрузкой: смотрим на Innodb_buffer_pool_reads vs Innodb_buffer_pool_read_requests (hit rate должен быть >99%), Sort_merge_passes, Select_full_join.
Готовим конфигурационный файл под конкретный сервер с обоснованием каждого параметра. Применяем изменения с тестированием на staging, затем поэтапно на prod с мониторингом через Zabbix или Prometheus+mysqld_exporter.
Результат
Корректная конфигурация MySQL под Битрикс снижает среднее время ответа БД на 40–70%, убирает пики latency при конкурентных запросах, снижает дисковый I/O на сервере в 2–5 раз.







