Spec-Zone.ru › MySQL 8.4

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-8.4-en/slow-query-log.html

Spec-Zone.ru

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