По оптимизации работы MySQL можно написать целую книгу, расписывая каждый параметр и его настройки в зависимости от конфигурации железа. Но это не наши методы, стоит ли тратить несколько дней для изучения документации? Если работы будет на 15 минут, да и голову загружать лишней информацией не стоит.
Использование mysqltuner
Ленится нужно по умному, будем использовать утилиту mysqltuner. Итак что нам непроходимо:
- Linux машина с поддержкой PERL (Чисто теоретически Perl можно поднять под Windows, но не ради разовой процедуры)
- Пароль от root учетки в MySQL
- Утилита WGET
- Доступ в консоль
Выполняем следующее:
1 2 3 4 | cd /tmp wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl chmod +x mysqltuner.pl perl mysqltuner.pl |
Расшифровываю:
- Переходим во временную директорию (гадить в системе не хорошо)
- Скачиваем утилиту mysqltuner
- Устанавливаем права на запуск (В принципе не обязательно)
- С помощью интерпретатора Perl запускам на исполнение скрипт.
После запуска mysqltuner запросит у нас рутовый имя пользователя и пароль для доступа к серверу MySQL.
Проведет анализ, выведет текущие значения и рекомендации по тюнингу (оптимизации) настроек и конкретных параметров.
Сразу после запуска сервера, не рекомендую использовать mysqltuner, системе необходимо поработать некоторое время и собрать статистику, думаю недели при нормальной нагрузке должно быть достаточно.
Пример рекомендаций по оптимизации MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | General recommendations: Add skip-innodb to MySQL configuration to disable InnoDB Add skip-isam to MySQL configuration to disable ISAM Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries When making adjustments, make tmp_table_size/max_heap_table_size equal Reduce your SELECT DISTINCT queries without LIMIT clauses Increase table_cache gradually to avoid file descriptor limits Your applications are not closing MySQL connections properly Variables to adjust: query_cache_size (> 16M) tmp_table_size (> 32M) max_heap_table_size (> 16M) table_cache (> 64) |
Пример оптимизированной конфигурации MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | cat /etc/my.cnf.d/mysql-server.cnf|grep -v "#" ... wait_timeout = 1000 max_allowed_packet = 64M tmp_table_size = 256M max_heap_table_size = 256M performance_schema = ON innodb_buffer_pool_size = 256M innodb_log_file_size = 32M table_open_cache = 10000 skip-name-resolve = 1 join_buffer_size = 64M table_definition_cache = -1 bind-address=127.0.0.1 |