Тюнинг my.cnf / MariaDB для интернет-магазина до 10 000 товаров (2-4 GB RAM)

Обновлено: Август 2026 Стек: MySQL 8.0 / MariaDB 10.11 / 11.x, RAM 2-4 GB Проверено: Production-Ready

Готовый файл my.cnf для MySQL 8.0 и MariaDB 10.11 под каталог 10 000 товаров: расчет innodb_buffer_pool_size, log_file_size, защита от дискового I/O.

Интерактивный генератор под ваши параметры
Параметры подставляются в код в реальном времени
/etc/mysql/mariadb.conf.d/50-server.cnf
# /etc/mysql/mariadb.conf.d/50-server.cnf
; Оптимальный my.cnf для каталога до 10 000 товаров (RAM 4GB)
[mysqld]
user = mysql
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp

# Сеть и подключения
max_connections = 150
max_connect_errors = 1000
wait_timeout = 60
interactive_timeout = 60
connect_timeout = 10

# InnoDB Тюнинг (главный потребитель RAM)
# Выделяем 50-60% доступной оперативной памяти под буферный пул
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 2
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_stats_on_metadata = 0

# Буферы потоков (Per-Thread Buffers)
key_buffer_size = 64M
sort_buffer_size = 2M
read_buffer_size = 1M
read_rnd_buffer_size = 2M
join_buffer_size = 2M

# Табличный кэш
table_open_cache = 4000
table_definition_cache = 2000
open_files_limit = 65535

# Временные таблицы в памяти
tmp_table_size = 64M
max_heap_table_size = 64M

# Логирование медленных запросов (>1.5 сек)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 1.5
log_queries_not_using_indexes = 0

Разбор ключевых директив конфигурации

Техническое обоснование директив и их прямое влияние на процессор (CPU), оперативную память (RAM) и дисковый ввод-вывод (NVMe I/O).

Директива / Блок Рекомендуемое значение Зачем нужно и системное влияние (CPU / RAM / I-O)
innodb_buffer_pool_size = 2G 2 GB (50% RAM) Загружает всю базу данных товаров и индексов в оперативную память, устраняя чтение с диска при фильтрации каталога.
innodb_flush_log_at_trx_commit = 2 2 (сброс 1 раз/сек) Ускоряет операции записи (создание заказов, обновление остатков) в 5-10 раз за счет асинхронного сброса транзакционного лога.
innodb_flush_method = O_DIRECT O_DIRECT Исключает двойное кэширование страниц СУБД в кэше файловой системы ОС Linux, экономя память.

Рекомендуемые системные требования VDS под этот стек

Расчет минимальной и оптимальной конфигурации виртуального сервера для стабильной работы без сбоев.

Оптимальный сайзинг: 2 vCPU, 4 GB RAM, 50 GB NVMe
Расчетная нагрузка: Каталог 10 000 SKU, до 3 000 сессий/день
Timeweb Cloud
2 CPU / 4 GB NVMe
Процессор: 2 vCPU
Память RAM: 4 GB RAM
Накопитель: 50 GB NVMe
🔷 Selectel
2 vCPU / 4 GB RAM
Процессор: 2 vCPU
Память RAM: 4 GB RAM
Накопитель: 50 GB NVMe
🟠 Beget
Turbo 4 GB
Процессор: 2 vCPU
Память RAM: 4 GB RAM
Накопитель: 50 GB NVMe

Онлайн-утилиты SysKit для проверки этого сервера

Протестируйте корректность применения конфигурации прямо сейчас в один клик.

Частые ошибки при настройке и их решение (FAQ)

Типовые проблемы вебмастеров и сисадминов при внедрении данной конфигурации.

Как проверить процент попадания запросов в InnoDB Buffer Pool?
В консоли MySQL выполните: `SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';`. Отношение `Reads / Read_requests` должно быть менее 1% (99%+ попаданий в RAM).