Обзор журнала медленных запросов
Журнал медленных запросов — это запись SQL-запросов, выполнение которых занимало много времени.
Обратите внимание, что если ваши запросы содержат пароли пользователей, то журнал медленных запросов может также содержать пароли. Поэтому он должен быть защищён.
Количество строк, затронутых медленным запросом, также записывается в журнале медленных запросов.
Включение журнала медленных запросов
Журнал медленных запросов по умолчанию отключен.
Чтобы включить журнал медленных запросов, установите системную переменную slow_query_log в значение 1. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL slow_query_log=1;
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... slow_query_log
Настройка имени файла журнала медленных запросов
По умолчанию журнал медленных запросов записывается в ${hostname}-slow.log в каталоге datadir. Однако это можно изменить.
Один из способов настройки имени файла журнала медленных запросов — установить системную переменную slow_query_log_file. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL slow_query_log_file='mariadb-slow.log';
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... slow_query_log slow_query_log_file=mariadb-slow.log
Если это относительный путь, то slow_query_log_file является относительным по отношению к каталогу datadir.
Однако, переменная slow_query_log_file также может быть абсолютным путём. Например:
[mariadb] ... slow_query_log slow_query_log_file=/var/log/mysql/mariadb-slow.log
Другой способ настройки имени файла журнала медленных запросов — установка опции log-basename, которая настраивает MariaDB на использование общего префикса для всех лог-файлов (например, журнала медленных запросов, общего журнала запросов, журнала ошибок, бинарных логов и т.д.). Имя файла журнала медленных запросов будет построено путем добавления -slow.log к этому префиксу. Данную опцию нельзя установить динамически. Её можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log-basename=mariadb slow_query_log
Опция log-basename не может быть абсолютным путём. Имя файла лога относительно каталога datadir.
Выбор места вывода журнала медленных запросов
Журнал медленных запросов может быть записан в файл на диске или в таблицу slow_log в базе данных mysql. Для выбора места вывода журнала медленных запросов, установите системную переменную log_output.
Запись журнала медленных запросов в файл
По умолчанию журнал медленных запросов выводится в файл. Однако его можно явно выбрать, установив системную переменную log_output в значение FILE. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL log_output='FILE';
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log
Запись журнала медленных запросов в таблицу
Журнал медленных запросов можно записать в таблицу slow_log в базе данных mysql, установив системную переменную log_output в значение TABLE. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL log_output='TABLE';
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log_output=TABLE slow_query_log
Некоторые строки в этой таблице могут выглядеть так:
SELECT * FROM mysql.slow_log\G
...
*************************** 2. row ***************************
start_time: 2014-11-11 07:56:28.721519
user_host: root[root] @ localhost []
query_time: 00:00:12.000215
lock_time: 00:00:00.000000
rows_sent: 1
rows_examined: 0
db: test
last_insert_id: 0
insert_id: 0
server_id: 1
sql_text: SELECT SLEEP(12)
thread_id: 74
...
См. Запись логов в таблицы для получения дополнительной информации.
Отключение журнала медленных запросов для сессии
Пользователь может отключить запись в журнал медленных запросов для подключения, установив системную переменную slow_query_log в значение 0. Например:
SET SESSION slow_query_log=0;
Отключение журнала медленных запросов для определённых запросов
В MariaDB 10.3.1 и более поздних версиях, можно отключить запись в журнал медленных запросов для определенных типов запросов, установив системную переменную log_slow_disabled_statements. Данную опцию нельзя установить динамически. Её можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log_output=FILE general_log general_log_file=queries.log log_slow_disabled_statements='admin,call,slave,sp'
Настройка времени для медленных запросов
Время, определяющее медленный запрос, можно настроить, установив системную переменную long_query_time. Она используется в секундах, с необязательной составляющей в миллисекундах. Значение по умолчанию — 10. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL long_query_time=5.0;
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log long_query_time=5.0
Запись запросов, не использующих индексы
Полезно записывать запросы, не использующие индексы, в журнал медленных запросов, так как такие запросы обычно можно оптимизировать, добавив индекс или немного переписав их. Журнал медленных запросов можно настроить для записи запросов, не использующих индексы, независимо от времени выполнения, установив системную переменную log_queries_not_using_indexes. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL log_queries_not_using_indexes=ON;
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log long_query_time=5.0 log_queries_not_using_indexes=ON
Поскольку значительное количество запросов может выполняться быстро даже без индексов, вы можете использовать системную переменную min_examined_row_limit вместе с log_queries_not_using_indexes, чтобы ограничить записываемые запросы теми, которые оказывают существенное влияние на сервер.
Запись запросов, проверяющих минимальное количество строк
Полезно записывать запросы, проверяющие минимальное количество строк. Журнал медленных запросов можно настроить для записи запросов, проверяющих минимальное количество строк, независимо от времени выполнения, установив системную переменную min_examined_row_limit. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL min_examined_row_limit=100000;
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log long_query_time=5.0 min_examined_row_limit=100000
Запись медленных административных запросов
По умолчанию журнал медленных запросов записывает только медленные запросы, не относящиеся к административным операциям. Чтобы записывать административные запросы, установите системную переменную log_slow_admin_statements. Журнал медленных запросов рассматривает следующие запросы как административные: ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE и REPAIR TABLE. В MariaDB 10.3 и более поздних версиях это также включает запросы ALTER SEQUENCE.
Вы можете динамически включить эту функцию, используя оператор SET GLOBAL. Например:
SET GLOBAL log_slow_admin_statements=ON;
Её также можно установить в группе опций сервера группа опций в файле опций файле опций до запуска сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log long_query_time=5.0 log_slow_admin_statements=ON
Включение журнала медленных запросов для определенных критериев
Можно включить запись в журнал медленных запросов для запросов, удовлетворяющих определённым критериям, настроив системную переменную log_slow_filter. Её можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL log_slow_filter='filesort,filesort_on_disk,tmp_table,tmp_table_on_disk';
Его также можно установить в группе параметров сервера группе параметров в файле параметров файле параметров перед запуском сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log long_query_time=5.0 log_slow_filter=filesort,filesort_on_disk,tmp_table,tmp_table_on_disk
Ограничение скорости лога медленных запросов
Лог медленных запросов может создавать большой объем ввода-вывода, поэтому в некоторых случаях его может быть целесообразно ограничить. Лог медленных запросов можно ограничить, настроив системную переменную log_slow_rate_limit. Ее можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL log_slow_rate_limit=5;
Его также можно установить в группе параметров сервера группе параметров в файле параметров файле параметров перед запуском сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log long_query_time=5.0 log_slow_rate_limit=5
Настройка подробности лога медленных запросов
Есть несколько необязательных элементов информации, которые можно включить в лог медленных запросов для каждого запроса. Эту дополнительную информацию можно включить, настроив системную переменную log_slow_verbosity. Ее можно изменить динамически с помощью SET GLOBAL. Например:
SET GLOBAL log_slow_verbosity='query_plan,explain';
Его также можно установить в группе параметров сервера группе параметров в файле параметров файле параметров перед запуском сервера. Например:
[mariadb] ... log_output=FILE slow_query_log slow_query_log_file=slow-queries.log long_query_time=5.0 log_slow_verbosity=query_plan,explain
Возможно включение вывода EXPLAIN в лог медленных запросов.
Просмотр лога медленных запросов
Логи медленных запросов, записанные в файл, можно просмотреть с помощью любого текстового редактора, или вы можете использовать инструмент mariadb-dumpslow, чтобы упростить процесс, сводя информацию.
Запросы, которые вы найдете в логе, являются ключевыми запросами, которые нужно попытаться оптимизировать, создав более эффективный запрос или используя лучшие индексы.
Для запросов, которые появляются в логе и не могут быть оптимизированы вышеуказанными способами, возможно, потому что они просто очень большие выборки, из-за медленного оборудования или высокой конкуренции за блокировки/ЦП/Ввода-вывода, использование решений фрагментации/кластеризации/балансировки нагрузки, более производительного оборудования или таблиц статистики может помочь в улучшении этих запросов.
Логи медленных запросов, записанные в таблицу, можно просмотреть, обратившись к таблице slow_log.
Переменные, связанные с логом медленных запросов
- slow_query_log - включение/выключение лога медленных запросов. Переименовано в log_slow_query начиная с MariaDB 10.11.0.
- log_output - способ записи вывода
- slow_query_log_file - имя файла лога медленных запросов. Переименовано в log_slow_query_file_name начиная с MariaDB 10.11.0.
- long_query_time - время в секундах/микросекундах, определяющее медленный запрос. Переименовано в log_slow_query_time начиная с MariaDB 10.11.0.
- log_queries_not_using_indexes - нужно ли регистрировать запросы, не использующие индексы
- log_slow_admin_statements - нужно ли регистрировать определенные административные запросы
- log_slow_disabled_statements - типы запросов, которые не должны регистрироваться в логе медленных запросов
- min_examined_row_limit - минимальное количество строк, которые должен проверить запрос, чтобы быть медленным. Переименовано в log_slow_min_examined_row_limit начиная с MariaDB 10.11.0.
- log_slow_rate_limit - разрешает регистрировать часть медленных запросов
- log_slow_verbosity - уровень подробности в логе
- log_slow_filter - ограничение, какие запросы регистрировать
- log_slow_slave_statements - регистрировать медленные запросы, выполняемые потоком репликации в логе медленных запросов, если он открыт.
Вращение лога медленных запросов на Unix и Linux
Дистрибутивы Unix и Linux предлагают утилиту logrotate, которая очень легко вращает файлы логов. См. Вращение логов на Unix и Linux для получения дополнительной информации о том, как использовать эту утилиту для вращения лога медленных запросов.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/slow-query-log-overview/