≫ Профилирование

Профиль запроса

SQL-оператор SHOW PROFILE и опция JSON-интерфейса "profile": true предоставляют подробный профиль выполнения выполненного запроса. В случае SQL профилирование должно быть включено в текущей сессии до выполнения инструктируемого оператора. Это можно сделать с помощью оператора SET profiling=1. По умолчанию профилирование отключено, чтобы избежать возможных последствий для производительности, в результате чего профиль будет пустым, если оно не включено.

Каждый результат профилирования включает следующие поля:

  • Столбец Status кратко описывает конкретное состояние, в котором было затрачено время. См. ниже.
  • Столбец Duration показывает время по настенным часам, в секундах.
  • Столбец Switches отображает количество раз, когда движок запроса переключался в данное состояние. Это лишь логические переключения состояния движка и не переключения контекста на уровне ОС или вызовы функций (хотя некоторые разделы могут фактически соответствовать вызовам функций), и они не оказывают прямого влияния на производительность. В некотором смысле, количество переключений — это просто количество срабатываний соответствующей точки инструментирования.
  • Столбец Percent показывает процент времени, проведённого в этом состоянии.

Состояния в профиле возвращаются в заранее записанном порядке, который примерно соответствует (но не идентичен) фактическому порядку выполнения запроса.

Список состояний может (и будет) меняться со временем по мере уточнения состояний. Вот краткое описание текущих профилируемых состояний.

  • unknown: универсальное состояние для всего прочего. Учитывает ещё не инструментированный код или мелкие разовые задачи, которые не относятся ни к одному другому состоянию, но слишком малы, чтобы выделять для них отдельное состояние.
  • net_read: чтение запроса из сети (т.е. из приложения).
  • io: общее время файлового ввода-вывода.
  • dist_connect: подключение к удалённым агентам в случае распределённой таблицы.
  • sql_parse: разбор синтаксиса SQL.
  • dict_setup: настройка словаря и токенизатора.
  • parse: разбор синтаксиса полнотекстового запроса.
  • transforms: преобразования полнотекстового запроса (подстановки, расширения, упрощения и т.п.).
  • init: инициализация выполнения запроса.
  • open: открытие файлов таблицы.
  • read_docs: время ввода-вывода, затраченное на чтение списков документов.
  • read_hits: время ввода-вывода, затраченное на чтение позиций ключевых слов.
  • get_docs: вычисление совпадающих документов.
  • get_hits: вычисление совпадающих позиций.
  • filter: фильтрация полнотекстовых совпадений.
  • rank: вычисление релевантного ранга.
  • sort: сортировка совпадений.
  • finalize: финализация набора результатов поиска по таблице (выражения последнего этапа и т.п.).
  • dist_wait: ожидание удалённых результатов от агентов в случае распределённой таблицы.
  • aggregate: агрегирование нескольких наборов результатов.
  • net_write: запись набора результатов в сеть.
‹›
  • SQL
  • JSON
📋
SET profiling=1;
SELECT id FROM forum WHERE MATCH('the best') LIMIT 1;
SHOW PROFILE;
‹›
Response
Query OK, 0 rows affected (0.00 sec)
+--------+
| id     |
+--------+
| 241629 |
+--------+
1 row in set (0.35 sec)
+--------------+----------+----------+---------+
| Status       | Duration | Switches | Percent |
+--------------+----------+----------+---------+
| unknown      | 0.000557 | 5        | 0.16    |
| net_read     | 0.000016 | 1        | 0.00    |
| local_search | 0.000076 | 1        | 0.02    |
| sql_parse    | 0.000121 | 1        | 0.03    |
| dict_setup   | 0.000003 | 1        | 0.00    |
| parse        | 0.000072 | 1        | 0.02    |
| transforms   | 0.000331 | 2        | 0.10    |
| init         | 0.001945 | 3        | 0.56    |
| read_docs    | 0.001257 | 76       | 0.36    |
| read_hits    | 0.002598 | 186      | 0.75    |
| get_docs     | 0.089328 | 2691     | 25.80   |
| get_hits     | 0.189626 | 2799     | 54.78   |
| filter       | 0.009369 | 2613     | 2.71    |
| rank         | 0.029669 | 7760     | 8.57    |
| sort         | 0.019070 | 2531     | 5.51    |
| finalize     | 0.000001 | 1        | 0.00    |
| clone_attrs  | 0.002009 | 1        | 0.58    |
| aggregate    | 0.000054 | 2        | 0.02    |
| net_write    | 0.000076 | 2        | 0.02    |
| eval_post    | 0.000001 | 1        | 0.00    |
| total        | 0.346179 | 18678    | 0       |
+--------------+----------+----------+---------+
21 rows in set (0.00 sec)
Last modified: August 28, 2025