Почему есть Slow_queries, но нет файла slow_query_log?

Вопрос или проблема

У меня такая конфигурация для MariaDB:

...
    slow_query_log              = /var/log/mysql/mysql-slow.log
    long_query_time             = 1
...

У меня такие значения при выполнении запроса SHOW GLOBAL STATUS;.

...
    | Slow_queries                                           | 448152                                           |
...

Я также заметил более 30 долгих запросов за последний час.

Почему нет файла /var/log/mysql/mysql-slow.log?

результат команды namei -l /var/log/mysql/

f: /var/log/mysql/
drwxr-xr-x root  root  /
drwxr-xr-x root  root  var
drwxr-xr-x root  root  log
drwxr-xr-x mysql mysql mysql

Насколько я помню, СУБД не создает файлы журналов – если файла нет, то она не будет в него писать:

$ sudo touch /var/log/mysql/mysql-slow.log
$ sudo chown mysql:mysql /var/log/mysql/mysql-slow.log
$ sudo systemctl restart mariadb

(в файле юнита должна быть опция перезагрузки, но она не применяет все параметры конфигурации).

Проверьте, что ваши скрипты ротации журналов включают это.

Ответ или решение

Почти каждый администратор баз данных когда-либо сталкивался с проблемой, когда существует множество медленных запросов в базе данных, но отсутствует соответствующий файл логирования этих запросов. Рассмотрим эту ситуацию на примере конфигурации MariaDB и попробуем разобраться, как исправить эту проблему.

Теория

Чтобы выявить источник медленных запросов, в MariaDB имеется механизм ведения журнала медленных запросов. Этот механизм регистрирует запросы, которые превышают определенное время выполнения, указанное в параметре long_query_time. В вашем случае, этот параметр равен 1 секунде, то есть все запросы, исполняющиеся дольше одной секунды, считаются медленными и должны быть занесены в лог, путь к которому указан в параметре slow_query_log.

Если есть медленные запросы, но файл журнала отсутствует, могут быть несколько причин:

  1. Несозданный файл логов: MariaDB, как правило, не создает лог-файлы автоматически. Если файл не существует, база данных просто не будет записывать в него данные.

  2. Проблемы с доступом: На пути к файлу или к самому файлу могут быть неправильные права доступа, из-за чего MariaDB не имеет возможности записывать в него данные.

  3. Конфигурационные особенности: Возможно, сервер базы данных требует перезапуска для того, чтобы изменения конфигурации вступили в силу.

  4. Логирование не включено: Переменная slow_query_log может быть неверно интерпретирована. Для включения логирования медленных запросов должно быть не только задано имя файла, но и установлен параметр slow_query_log в ON.

Пример

Проблемная конфигурация может выглядеть следующим образом:

slow_query_log = /var/log/mysql/mysql-slow.log
long_query_time = 1

При выполнении команды SHOW GLOBAL STATUS, вы видите значение Slow_queries равное 448152, что означает, что столько запросов базы данных были определены как медленные. Однако при этом файл /var/log/mysql/mysql-slow.log отсутствует.

Исследуя разрешения на директорию с помощью команды namei -l /var/log/mysql/, видно, что права доступа к директории настроены верно:

drwxr-xr-x root  root  /
drwxr-xr-x root  root  var
drwxr-xr-x root  root  log
drwxr-xr-x mysql mysql mysql

Применение

  1. Создание файла журнала: Необходимо вручную создать файл журнала. Используйте следующие команды:
sudo touch /var/log/mysql/mysql-slow.log
sudo chown mysql:mysql /var/log/mysql/mysql-slow.log

Эти команды создадут файл и установят правильные права для его использования MariaDB.

  1. Перезапуск MariaDB: Чтобы изменения заработали, вам нужно перезапустить службу MariaDB:
sudo systemctl restart mariadb
  1. Проверка логирования: Убедитесь, что переменная slow_query_log действительно установлена в ON. Это можно сделать с помощью:
SHOW VARIABLES LIKE 'slow_query_log';

Если вывод OFF, необходимо включить логирование с помощью команды:

SET GLOBAL slow_query_log = 'ON';
  1. Проверка ротации логов: Убедитесь, что ваш скрипт ротации логов оформляет и архивирует старые файлы журналов корректно, чтобы не потерять данные при переполнении дискового пространства.

В итоге, следуя этим рекомендациям, можно эффективно выявить причину отсутствия файла журнала медленных запросов и устранить ее, что позволит вам успешно отслеживать и оптимизировать выполнение долгих запросов в вашей базе данных. Администрирование баз данных — процесс, требующий внимания к деталям, но грамотная настройка позволяет существенно улучшить производительность системы и стабилизировать ее работу.

Оцените материал
Добавить комментарий

Капча загружается...