Spec-Zone.ru › MariaDB

Обзор трассировки оптимизатора

MariaDB, начиная с 10.4.3

Трассировка оптимизатора была введена в 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».

Ограничения

В настоящее время хранится только одна трассировка. Невозможно отследить подзапросы хранимой процедуры; отслеживается только запрос на верхнем уровне.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в данном содержании, не обязательно отражают взгляды MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

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