Spec-Zone.ru › MySQL 9.2

10.15.4 Очистка следа отладки

По умолчанию каждый новый след перезаписывает предыдущий. Таким образом, если утверждение содержит подутверждения (например, вызов хранимых процедур, хранимых функций или триггеров), то верхнее утверждение и подутверждения генерируют каждый по одному следу, но в конце выполнения виден только след последнего подутверждения.

Пользователь, который хочет увидеть след другого подутверждения, может включить или отключить отслеживание для нужного подутверждения, но это требует редактирования кода процедуры, что не всегда возможно. Другое решение — настроить очистку следа отладки. Это делается путем установки системных переменных optimizer_trace_offset и optimizer_trace_limit, например так:

SET optimizer_trace_offset=offset, optimizer_trace_limit=limit;

offset — целое число со знаком (по умолчанию -1); limit — целое положительное число (по умолчанию 1). Такое утверждение SET имеет следующие последствия:

  • Все ранее сохраненные следы очищаются из памяти.

  • Последующий запрос SELECT из таблицы OPTIMIZER_TRACE возвращает первые limit следов из offset самых старых сохраненных следов (если offset ≥ 0), или первые limit следов из -offset самых новых сохраненных следов (если offset < 0).

Примеры:

  • SET optimizer_trace_offset=-1, optimizer_trace_limit=1: Показывается последний след (по умолчанию).

  • SET optimizer_trace_offset=-2, optimizer_trace_limit=1: Показывается предпоследний след.

  • SET optimizer_trace_offset=-5, optimizer_trace_limit=5: Показываются последние пять следов.

Отрицательные значения для offset могут оказаться полезными, когда подутверждения, представляющие интерес, являются последними в хранимой процедуре. Например:

SET optimizer_trace_offset=-5, optimizer_trace_limit=5;

CALL stored_routine(); # more than 5 substatements in this routine

SELECT * FROM information_schema.OPTIMIZER_TRACE; # see only the last 5 traces

Положительное значение offset может быть полезно, когда известно, что интересующие подутверждения — первые в хранимой процедуре.

Чем точнее установлены эти две переменные, тем меньше используется памяти. Например, SET optimizer_trace_offset=0, optimizer_trace_limit=5 требует достаточной памяти для хранения пяти следов, поэтому, если нужны только первые три, лучше использовать SET optimizer_trace_offset=0, optimizer_trace_limit=3, так как отслеживание прекратится после limit следов. Хранимая процедура может содержать цикл, который выполняет много подутверждений и, таким образом, генерирует много следов, что может потребовать много памяти; в таких случаях выбор подходящих значений для offset и limit может ограничить отслеживание, например, одной итерацией цикла. Это также уменьшает влияние отслеживания на скорость выполнения.

Если offset больше или равно 0, в памяти хранятся только limit следов. Если offset меньше 0, это не так: вместо этого в памяти хранятся -offset следов. Даже если limit меньше -offset, исключая последнее утверждение, последнее утверждение всё равно должно отслеживаться, потому что оно будет находиться в пределах предела после выполнения ещё одного утверждения. Поскольку смещение меньше 0 учитывается с конца, «окно» перемещается по мере выполнения дополнительных утверждений.

Использование optimizer_trace_offset и optimizer_trace_limit, которые являются ограничениями на уровне производителя следа, обеспечивает лучшую (большую) скорость и (меньшее) использование памяти, чем установка смещений или пределов на уровне потребителя следа (SQL) с SELECT * FROM OPTIMIZER_TRACE LIMIT limit OFFSET offset, что почти ничего не экономит.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/tuning-trace-purging.html

Spec-Zone.ru

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