≫ Профилирование
Оператор SQL SHOW PROFILE и опция интерфейса JSON "profile": true предоставляют подробный профиль выполнения выполняемого запроса. В случае SQL профилирование должно быть включено в текущей сессии до выполнения операторa, который необходимо инструментарить. Это можно сделать с помощью оператора 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;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)