MySQL — самая популярная реляционная СУБД, 60%+ сайтов мира работают на ней. Дефолтные настройки консервативны и не подходят современным сайтам — правильный тюнинг ускоряет в 2-5 раз.
InnoDB tuning
innodb_buffer_pool_size — RAM-кеш InnoDB. Главный параметр. Рекомендуется 50-70% от свободного RAM. Пример: 4GB сервер, 2GB MySQL → innodb_buffer_pool_size = 2G. Данные и индексы в RAM, минимум disk I/O.
innodb_log_file_size — размер лога транзакций. 256M-1G. Больше — больше транзакций влезает, быстрее crash recovery.
innodb_flush_log_at_trx_commit — куда flush на каждой транзакции. 1 = ACID (безопасно), 2 = OS-кеш (быстрее, но при крахе OS потеря), 0 = раз в секунду (быстро). Production: 1 или 2.
Connection и thread
max_connections — макс. параллельных подключений. Default 151. По размеру 200-1000. В WordPress на пользователя 1-3 connection.
thread_cache_size — кеш thread'ов. max_connections / 4.
Query cache (старые версии)
До MySQL 5.7 был query_cache. В 8.0 убран (проблемы при многих connection). MariaDB поддерживает. Если MariaDB: query_cache_size = 64M, query_cache_type = 1.
Slow query log
slow_query_log = 1, long_query_time = 2, slow_query_log_file = /var/log/mysql-slow.log. Поиск медленных запросов. mysqldumpslow -s c -t 10 /var/log/mysql-slow.log.
Индексы и EXPLAIN
Отсутствие индексов — главная проблема скорости. EXPLAIN SELECT: type "ALL" — full scan плохо; "ref"/"eq_ref" — индекс используется. На WHERE/JOIN-колонки CREATE INDEX idx_user_email ON users(email).
Практика Sayt.uz
Тюнинг MySQL/MariaDB делает наш DBA. WordPress: innodb_buffer_pool_size 256M (Basic), 512M-1G (Pro). У Pro slow_query_log включён, мы анализируем еженедельно. В e-commerce — аудиты каждые 2-3 месяца. Совет: индексы — 80% скорости, остальное 20%. Сначала структура и индексы.