7.4.5 Журнал медленных запросов
Журнал медленных запросов содержит SQL-запросы, выполнение которых занимает более long_query_time секунд и требуют проверки по крайней мере min_examined_row_limit строк. Журнал медленных запросов может быть использован для поиска запросов, выполняющихся долго и, следовательно, являющихся кандидатами для оптимизации. Однако, проверка длинного журнала медленных запросов может быть длительным заданием. Чтобы упростить эту задачу, вы можете использовать команду mysqldumpslow для обработки файла журнала медленных запросов и сводки его содержимого. См. Раздел 6.6.10, «mysqldumpslow — Сводка файлов журнала медленных запросов».
Время получения начальных блокировок не учитывается как время выполнения. mysqld записывает оператор в журнал медленных запросов после его выполнения и после того, как все блокировки будут освобождены, поэтому порядок в журнале может отличаться от порядка выполнения.
Параметры журнала медленных запросов
Минимальное и по умолчанию значение long_query_time составляют 0 и 10 соответственно. Значение может быть указано с разрешением до микросекунд.
По умолчанию административные операторы не регистрируются, также как запросы, не использующие индексы для поиска. Это поведение можно изменить, используя log_slow_admin_statements и log_queries_not_using_indexes, как описано ниже.
По умолчанию журнал медленных запросов отключен. Чтобы явно указать начальное состояние журнала медленных запросов, используйте --slow_query_log[={0|1}]. Без аргумента или с аргументом 1, --slow_query_log включает журнал. С аргументом 0 этот параметр отключает журнал. Для указания имени файла журнала, используйте --slow_query_log_file=. Для указания места назначения журнала используйте системную переменную file_namelog_output (как описано в Разделе 7.4.1, «Выбор мест назначения для общего журнала запросов и журнала медленных запросов»).
Если вы указываете место назначения журнала TABLE, см. Журнальные таблицы и ошибки «Слишком много открытых файлов».
Если вы не указываете имя для файла журнала медленных запросов, имя по умолчанию — . Сервер создаёт файл в каталоге данных, если не указан абсолютный путь для другого каталога.host_name-slow.log
Для отключения или включения журнала медленных запросов или изменения имени файла журнала во время работы используйте глобальные системные переменные slow_query_log и slow_query_log_file. Установите slow_query_log в 0, чтобы отключить журнал, или в 1, чтобы включить его. Установите slow_query_log_file для указания имени файла журнала. Если файл журнала уже открыт, он закрывается, и открывается новый файл.
Сервер записывает меньше информации в журнал медленных запросов, если используется параметр --log-short-format.
Чтобы включить медленные административные операторы в журнал медленных запросов, включите системную переменную log_slow_admin_statements. Административные операторы включают ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE и REPAIR TABLE.
Чтобы включить запросы, не использующие индексы для поиска строк, в записываемые в журнал медленных запросов операторы, включите системную переменную log_queries_not_using_indexes. (Даже при включённой переменной сервер не регистрирует запросы, которые не извлекут выгоды от наличия индекса из-за того, что таблица имеет менее двух строк.)
Когда запросы, не использующие индекс, регистрируются, журнал медленных запросов может быстро расти. Можно установить лимит скорости для этих запросов, задав системную переменную log_throttle_queries_not_using_indexes. По умолчанию эта переменная равна 0, что означает отсутствие ограничения. Положительные значения устанавливают лимит на запись в минуту запросов, которые не используют индексы. Первый такой запрос открывает 60-секундное окно, в течение которого сервер регистрирует запросы до заданного лимита, а затем подавляет дополнительные запросы. Если в конце окна подавляются запросы, сервер записывает сводку, указывающую их количество и общее время, потраченное на них. Следующее 60-секундное окно начинается, когда сервер записывает следующий запрос, не использующий индексы.
Сервер использует управляющие параметры в следующем порядке, чтобы определить, следует ли записывать запрос в журнал медленных запросов:
Запрос должен быть либо не административным оператором, либо
log_slow_admin_statementsдолжен быть включен.Запрос должен потребовать не менее
long_query_timeсекунд, илиlog_queries_not_using_indexesдолжен быть включен, и запрос не использовал индексы для поиска строк.Запрос должен проверить не менее
min_examined_row_limitстрок.Запрос не должен быть подавлен в соответствии с настройкой
log_throttle_queries_not_using_indexes.
Системная переменная log_timestamps управляет часовым поясом временных меток в сообщениях, записанных в файл журнала медленных запросов (а также в общий журнал запросов и журнал ошибок). Она не влияет на часовой пояс сообщений общего журнала запросов и журнала медленных запросов, записанных в таблицы журнала, но строки, извлеченные из этих таблиц, можно преобразовать из местного часового пояса в любой желаемый часовой пояс с помощью CONVERT_TZ() или путем настройки сессионной системной переменной time_zone.
По умолчанию реплика не записывает реплицированные запросы в журнал медленных запросов. Чтобы изменить это, включите системную переменную log_slow_replica_statements. Обратите внимание, что если используется репликация на основе строк (binlog_format=ROW), эти системные переменные не имеют эффекта. Запросы добавляются в журнал медленных запросов реплики только тогда, когда они регистрируются в формате оператора в двоичном журнале, то есть, когда binlog_format=STATEMENT установлена или когда binlog_format=MIXED установлена и оператор записан в формате оператора. Медленные запросы, которые регистрируются в формате строки, когда binlog_format=MIXED установлена, или которые регистрируются, когда binlog_format=ROW установлена, не добавляются в журнал медленных запросов реплики, даже если log_slow_replica_statements включён.
Содержание лога медленных запросов
Когда включён лог медленных запросов, сервер записывает вывод в любые места, указанные переменной системы log_output. Если вы включите лог, сервер откроет лог-файл и запишет в него сообщения о запуске. Однако дальнейшая запись запросов в файл не происходит, если не выбрано место назначения лога FILE. Если местом назначения является NONE, сервер не записывает запросы, даже если лог медленных запросов включен. Установка имени файла лога не влияет на запись, если FILE не выбрано в качестве места назначения вывода.
Если лог медленных запросов включён и FILE выбрано в качестве места назначения вывода, каждое предложение, записанное в лог, предваряется строкой, начинающейся с символа #, и содержит следующие поля (все поля находятся в одной строке):
-
Query_time:durationВремя выполнения запроса в секундах.
-
Lock_time:durationВремя получения блокировок в секундах.
-
Rows_sent:NКоличество строк, отправленных клиенту.
-
Rows_examined:Количество строк, просмотренных слоем сервера (не считая обработки внутри движков хранения).
Включение переменной системы log_slow_extra заставляет сервер записывать следующие дополнительные поля в вывод FILE, помимо уже перечисленных (вывод TABLE не затронут). Некоторые описания полей ссылаются на имена переменных состояния. Для получения дополнительной информации см. описания переменных состояния. Однако в логе медленных запросов счётчики являются значениями на уровне каждого запроса, а не кумулятивными значениями на уровне каждой сессии.
-
Thread_id:IDИдентификатор потока запроса.
-
Errno:error_numberНомер ошибки запроса или 0, если ошибка не произошла.
-
Killed:NЕсли запрос был прерван, номер ошибки, указывающий причину, или 0, если запрос завершился нормально.
-
Bytes_received:NЗначение
Bytes_receivedдля запроса. -
Bytes_sent:NЗначение
Bytes_sentдля запроса. -
Read_first:NЗначение
Handler_read_firstдля запроса. -
Read_last:NЗначение
Handler_read_lastдля запроса. -
Read_key:NЗначение
Handler_read_keyдля запроса. -
Read_next:NЗначение
Handler_read_nextдля запроса. -
Read_prev:NЗначение
Handler_read_prevдля запроса. -
Read_rnd:NЗначение
Handler_read_rndдля запроса. -
Read_rnd_next:NЗначение
Handler_read_rnd_nextдля запроса. -
Sort_merge_passes:NЗначение
Sort_merge_passesдля запроса. -
Sort_range_count:NЗначение
Sort_rangeдля запроса. -
Sort_rows:NЗначение
Sort_rowsдля запроса. -
Sort_scan_count:NЗначение
Sort_scanдля запроса. -
Created_tmp_disk_tables:NЗначение
Created_tmp_disk_tablesдля запроса. -
Created_tmp_tables:NЗначение
Created_tmp_tablesдля запроса. -
Start:timestampВремя начала выполнения запроса.
-
End:timestampВремя окончания выполнения запроса.
В данном файле лога медленных запросов могут содержаться строки с и без дополнительных полей, добавленных путём включения log_slow_extra. Анализаторы логов могут определить, содержит ли строка дополнительные поля, по количеству полей.
Каждое предложение, записанное в файл лога медленных запросов, предваряется предложением SET, которое включает отметку времени, указывающую, когда началось выполнение медленного запроса.
Пароли в запросах, записанных в лог медленных запросов, переписываются сервером, чтобы они не появлялись в явном виде в текстовом формате. См. Раздел 8.1.2.3, «Пароли и регистрация».
Запросы, которые невозможно разобрать (например, из-за синтаксических ошибок), не записываются в лог медленных запросов.
© 2025 Oracle
Licensed under the GPLv2 License.