Вопрос или проблема
У меня такая конфигурация для 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
.
Если есть медленные запросы, но файл журнала отсутствует, могут быть несколько причин:
-
Несозданный файл логов: MariaDB, как правило, не создает лог-файлы автоматически. Если файл не существует, база данных просто не будет записывать в него данные.
-
Проблемы с доступом: На пути к файлу или к самому файлу могут быть неправильные права доступа, из-за чего MariaDB не имеет возможности записывать в него данные.
-
Конфигурационные особенности: Возможно, сервер базы данных требует перезапуска для того, чтобы изменения конфигурации вступили в силу.
-
Логирование не включено: Переменная
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
Применение
- Создание файла журнала: Необходимо вручную создать файл журнала. Используйте следующие команды:
sudo touch /var/log/mysql/mysql-slow.log
sudo chown mysql:mysql /var/log/mysql/mysql-slow.log
Эти команды создадут файл и установят правильные права для его использования MariaDB.
- Перезапуск MariaDB: Чтобы изменения заработали, вам нужно перезапустить службу MariaDB:
sudo systemctl restart mariadb
- Проверка логирования: Убедитесь, что переменная
slow_query_log
действительно установлена вON
. Это можно сделать с помощью:
SHOW VARIABLES LIKE 'slow_query_log';
Если вывод OFF
, необходимо включить логирование с помощью команды:
SET GLOBAL slow_query_log = 'ON';
- Проверка ротации логов: Убедитесь, что ваш скрипт ротации логов оформляет и архивирует старые файлы журналов корректно, чтобы не потерять данные при переполнении дискового пространства.
В итоге, следуя этим рекомендациям, можно эффективно выявить причину отсутствия файла журнала медленных запросов и устранить ее, что позволит вам успешно отслеживать и оптимизировать выполнение долгих запросов в вашей базе данных. Администрирование баз данных — процесс, требующий внимания к деталям, но грамотная настройка позволяет существенно улучшить производительность системы и стабилизировать ее работу.