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

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: 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/mysql-slow.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/mysql-slow.log

* при такой настройке SQL-запросы, которые по длительности превысят 30 секунд попадут в файл /var/log/mysql/mysql-slow.log.

Создаем каталог для журнала:

mkdir /var/log/mysql

Создаем файл лога:

touch /var/log/mysql/mysql-slow.log

Задаем владельца mysql для созданного файла:

chown mysql:mysql /var/log/mysql/mysql-slow.log

И перезагружаем сервер MySQL:

systemctl restart mysqld || systemctl restart mariadb

Включение лога без перезагрузки сервера

Создаем каталог для лога, сам лог и зададим владельца:

mkdir /var/log/mysql

touch /var/log/mysql/mysql-slow.log

chown mysql:mysql /var/log/mysql/mysql-slow.log

Открываем командную оболочку mysql:

mysql -uroot -p

Выполняем последовательно команды:

> SET GLOBAL slow_query_log = ‘ON’;

> SET GLOBAL slow_launch_time = 2;

> SET GLOBAL slow_query_log_file = ‘/var/log/mysql/mysql-slow.log’;

> FLUSH LOGS;

* где slow_query_log — включает или выключает лог медленных запросов; slow_launch_time — задает время, при превышении которого запрос будет считаться медленным;  slow_query_log_file — путь до файла, в который будут записываться все медленные запросы.

Просмотр примененных параметров (выполняется в командной оболочке mysql):

> SHOW VARIABLES LIKE ‘%slow%’;

Просмотр лога

Для просмотра запросов, открываем наш файл в режиме непрерывного просмотра содержимого:

tail -f /var/log/mysql/mysql-slow.log

И ждем появления медленных SQL-запросов.

Просмотр логов с помощью mysqldumpslow — данная утилита показывает медленные запросы с количеством встречаемости:

mysqldumpslow /var/log/mysql/mysql-slow.log