Spec-Zone.ru › MySQL 9.2

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_name. Для указания места назначения журнала используйте системную переменную log_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-секундное окно начинается, когда сервер записывает следующий запрос, не использующий индексы.

Сервер использует управляющие параметры в следующем порядке, чтобы определить, следует ли записывать запрос в журнал медленных запросов:

  1. Запрос должен быть либо не административным оператором, либо log_slow_admin_statements должен быть включен.

  2. Запрос должен потребовать не менее long_query_time секунд, или log_queries_not_using_indexes должен быть включен, и запрос не использовал индексы для поиска строк.

  3. Запрос должен проверить не менее min_examined_row_limit строк.

  4. Запрос не должен быть подавлен в соответствии с настройкой 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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/slow-query-log.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API