Профилирование запросов
В MySQL с версии 5.0.37 появился удобный инструмент для профилирования запросов — директивы SHOW PROFILES и SHOW PROFILE.
Директива SHOW PROFILES показывает список запросов, выполненных в текущую сессию и время выполнения каждого запроса.
Число отображаемых запросов определяется переменной сессии profiling_history_size, которая имеет значение по умолчанию 15, максимальное 100. В список попадают все запросы кроме SHOW PROFILES и SHOW PROFILE, включая синтаксически неверные.
Обратите внимание: Директивы SHOW PROFILE и SHOW PROFILES поддерживаются в MySQL Community Server, начиная с версии 5.0.37, а в MySQL Enterprise только начиная с версии 5.1.
По умолчанию профилирование отключено, а переменная сессии profiling имеет значение 0. Для включения профилирования необходимо установить значение этой переменной равным 1:
Query OK, 0 rows affected (0.00 sec)
mysql> create table a1 (id int not null auto_increment);
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql> create table a1 (id int not null auto_increment primary key);
Query OK, 0 rows affected (0.01 sec)
mysql> show profiles;
+----------+------------+--------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+--------------------------------------------------------------+
| 1 | 0.00010300 | create table a1 (id int not null auto_increment) |
| 2 | 0.00443200 | create table a1 (id int not null auto_increment primary key) |
+----------+------------+--------------------------------------------------------------+
2 rows in set (0.00 sec)
Директива SHOW PROFILE показывает подробную информацию об этапах выполнения отдельного запроса.
По умолчанию, выводится информация о последнем запросе. Для указания на конкретный запрос используется опция FOR QUERY n, где значение n соответствует значению Query_ID из списка, формируемого директивой SHOW PROFILES.
В нашем примере команды SHOW PROFILE и SHOW PROFILE FOR QUERY 2 эквивалентны.
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| (initialization) | 0.000039 |
| checking permissions | 0.00004 |
| creating table | 0.004034 |
| After create | 0.000294 |
| query end | 0.000009 |
| freeing items | 0.000012 |
| logging slow query | 0.000004 |
+----------------------+----------+
7 rows in set (0.00 sec)
По умолчанию SHOW PROFILE показывает 2 колонки:
- Status - состояние потока. Значение этой величины соответствует значению State, отображаемому директивой SHOW PROCESSLIST. Полный перечень возможных значений см в официальной документации.
- Duration - время выполнения в секундах.
Обратите внимение
Профилирование действует в течении сессии. По завершении сесссии информация профайлинга теряется.
Информацию, аналогичную результату работы SHOW PROFILE, можно получить из таблицы PROFILING базы INFORMATION_SCHEMA. Например, следующие команды являются эквивалентными:
SELECT STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 2;
Ссылки
- Подробное описание синтаксиса с указанием всех возможных опций см в официальной документации
- Пример использования профайлинга для оптимизации сложных запросов: Using the New MySQL Query Profiler
© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.