Обзор трассировки оптимизатора
Трассировка оптимизатора была введена в MariaDB 10.4.3.
Использование
Эта функция создаёт трассировку в формате JSON для любых запросов SELECT/UPDATE/DELETE, содержащих информацию о решениях, принятых оптимизатором во время фазы оптимизации (выбор метода доступа к таблице, различные затраты, преобразования и т. д.). Эта функция помогает понять, почему оптимизатор принял те или иные решения и почему отверг другие.
Связанные системные переменные
-
optimizer_trace=’enabled=on/off’
- Значение по умолчанию — выключено
-
optimizer_trace_max_mem_size= значение
- Значение по умолчанию: 1048576
INFORMATION_SCHEMA.OPTIMIZER_TRACE
Каждое подключение хранит трассировку последнего выполненного запроса. Трассировку можно просмотреть, прочитав таблицу Information Schema OPTIMIZER_TRACE.
Структура таблицы трассировки оптимизатора:
SHOW CREATE TABLE INFORMATION_SCHEMA.OPTIMIZER_TRACE \G
*************************** 1. row ***************************
Table: OPTIMIZER_TRACE
Create Table: CREATE TEMPORARY TABLE `OPTIMIZER_TRACE` (
`QUERY` longtext NOT NULL DEFAULT '',
`TRACE` longtext NOT NULL DEFAULT '',
`MISSING_BYTES_BEYOND_MAX_MEM_SIZE` int(20) NOT NULL DEFAULT 0,
`INSUFFICIENT_PRIVILEGES` tinyint(1) NOT NULL DEFAULT 0
) ENGINE=Aria DEFAULT CHARSET=utf8 PAGE_CHECKSUM=0
Содержание трассировки оптимизатора
См. Руководство по трассировке оптимизатора для обзора того, что можно найти в трассировке.
Отслеживаемые запросы
Сюда относятся запросы SELECT, UPDATE, DELETE, а также их варианты с несколькими таблицами, и все они с префиксом EXPLAIN и ANALYZE.
Включение трассировки оптимизатора
Чтобы включить трассировку оптимизатора, выполните:
SET optimizer_trace='enabled=on';
Использование памяти
Каждая трассировка хранится как строка. Она расширяется (с помощью realloc()) по мере продвижения оптимизации и добавляет к ней данные. Переменная optimizer_trace_max_mem_size устанавливает предел общего объёма памяти, используемой текущей трассировкой. Если этот предел достигнут, текущая трассировка не расширяется (поэтому она будет неполной), и столбец MISSING_BYTES_BEYOND_MAX_MEM_SIZE покажет количество недостающих байтов в этой трассировке.
Проверка привилегий
В сложных сценариях, когда запрос использует представления или хранимые процедуры с SQL SECURITY DEFINER, возможно, пользователю будет отказано в просмотре трассировки его запроса, поскольку у него недостаточно дополнительных привилегий к этим объектам. В этом случае трассировка будет отображаться как пустая, а столбец INSUFFICIENT_PRIVILEGES будет показывать «1».
Ограничения
В настоящее время хранится только одна трассировка. Невозможно отследить подзапросы хранимой процедуры; отслеживается только запрос на верхнем уровне.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/optimizer-trace/