Включение журнала для показа медленных запросов в MySQL / MariaDB


Тематические термины: MySQL, MariaDB.
Данный журнал помогает найти узкие места в работе СУБД MySQL или MariaDB и повысить ее производительность. Инструкция написана на примере Linux CentOS и будет немного отличаться в зависимости от используемой операционной системы, но принцип остается такой же.
Включение лога длительных запросов
Для включения возможности показа медленных запросов открываем один из файлов конфигурации сервера баз данных:
vi /etc/my.cnf
vi /etc/mysql/mariadb.conf.d/50-server.cnf
vi /etc/my.cnf.d/server.cnf
* файл my.cnf может находиться в каталоге /etc, как в данном примере или в каталоге с базами (его можно посмотреть командой select @@datadir в командной оболочке СУБД).
Добавляем в открытый файл (секцию mysqld) две строчки.
MySQL (5.6 и позднее) или MariaDB:
[mysqld]
slow_query_log = 1
long_query_time = 5
slow_query_log_file = /var/log/mysql/slow-query.log
log-queries-not-using-indexes = 1
* где slow_query_log включает лог; long_query_time указывает, как долго должен выполняться запрос, чтобы считаться долгим; slow_query_log_file — путь до файла, в который будет записываться лог; log-queries-not-using-indexes — учитывать только те запросы, которые выполняют запрос без индекса.
MySQL (версия < 5.6):
[mysqld]
long_query_time = 30
log-slow-queries = /var/log/mysql/slow-query.log
* при такой настройке SQL-запросы, которые по длительности превысят 30 секунд попадут в файл /var/log/mysql/slow-query.log.
Создаем каталог для журнала:
mkdir /var/log/mysql
Создаем файл лога:
touch /var/log/mysql/slow-query.log
Задаем владельца mysql для созданного файла:
chown mysql:mysql /var/log/mysql/slow-query.log
И перезагружаем сервер MySQL:
systemctl restart mysqld || systemctl restart mariadb
Включение лога без перезагрузки сервера
Открываем командную оболочку mysql:
mysql -uroot -p
Запускаем лог медленных запросов:
> SET GLOBAL slow_query_log = 'ON'; FLUSH LOGS;
Просмотр примененных параметров (выполняется в командной оболочке mysql):
> SHOW VARIABLES LIKE '%slow%';
Просмотр лога
Для просмотра запросов, открываем наш файл в режиме непрерывного просмотра содержимого:
tail -f /var/log/mysql/slow-query.log
И ждем появления медленных SQL-запросов.
Просмотр логов с помощью mysqldumpslow — данная утилита показывает медленные запросы с количеством встречаемости:
mysqldumpslow