13.7.5.30 Заявление SHOW PROFILE
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type: {
ALL
| BLOCK IO
| CONTEXT SWITCHES
| CPU
| IPC
| MEMORY
| PAGE FAULTS
| SOURCE
| SWAPS
}
Заявления SHOW PROFILE и SHOW PROFILES отображают информацию о профилировании, которая показывает использование ресурсов для заявлений, выполненных в течение текущей сессии.
Заявления SHOW PROFILE и SHOW PROFILES устарели; ожидается их удаление в будущих выпусках MySQL. Используйте схему Performance Schema вместо этого; см. Раздел 25.19.1, «Профилирование запросов с помощью Performance Schema».
Для управления профилированием используйте переменную сессии profiling, значение которой по умолчанию равно 0 (OFF). Включите профилирование, установив profiling в 1 или ON:
mysql> SET profiling = 1;
SHOW PROFILES отображает список последних заявлений, отправленных на сервер. Размер списка контролируется переменной сессии profiling_history_size, значение которой по умолчанию равно 15. Максимальное значение равно 100. Установка значения в 0 фактически отключает профилирование.
Все заявления профилируются, за исключением SHOW
PROFILE и SHOW
PROFILES, поэтому ни одно из этих заявлений не отображается в списке профилей. Неправильно сформированные заявления профилируются. Например, SHOW PROFILING — это незаконное заявление, и при попытке его выполнить возникает синтаксическая ошибка, но оно отображается в списке профилирования.
SHOW PROFILE отображает подробную информацию об одном заявлении. Без условия FOR
QUERY вывод относится к последнему выполненному заявлению. Если включено nFOR QUERY , nSHOW PROFILE отображает информацию для заявления n. Значения n соответствуют значениям Query_ID, отображаемым SHOW PROFILES.
Может быть указано условие LIMIT
, чтобы ограничить вывод до row_countrow_count строк. Если указано LIMIT, OFFSET
можно добавить, чтобы начать вывод с offsetoffset строки полного набора строк.
По умолчанию SHOW PROFILE отображает столбцы Status и Duration. Значения Status похожи на значения State, отображаемые SHOW PROCESSLIST, хотя могут быть незначительные различия в интерпретации для некоторых значений состояния (см. Раздел 8.14, «Просмотр информации о потоке сервера (процессе)»).
Для отображения определенных дополнительных типов информации можно указать необязательные значения type:
ALLотображает всю информациюBLOCK IOотображает подсчеты операций ввода-вывода блокировокCONTEXT SWITCHESотображает подсчеты добровольных и принудительных переключений контекстаCPUотображает время использования процессора пользователем и системойIPCотображает подсчеты отправленных и полученных сообщенийMEMORYв настоящее время не реализованоPAGE FAULTSотображает подсчеты основных и второстепенных страниц ошибокSOURCEотображает имена функций из исходного кода вместе с именем и номером строки файла, в котором находится функцияSWAPSотображает подсчеты обмена
Профилирование выполняется в рамках каждой сессии. По завершении сессии информация о профилировании теряется.
mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
| 0 |
+-------------+
1 row in set (0.00 sec)
mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> DROP TABLE IF EXISTS t1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE TABLE T1 (id INT);
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW PROFILES;
+----------+----------+--------------------------+
| Query_ID | Duration | Query |
+----------+----------+--------------------------+
| 0 | 0.000088 | SET PROFILING = 1 |
| 1 | 0.000136 | DROP TABLE IF EXISTS t1 |
| 2 | 0.011947 | CREATE TABLE t1 (id INT) |
+----------+----------+--------------------------+
3 rows in set (0.00 sec)
mysql> SHOW PROFILE;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| checking permissions | 0.000040 |
| creating table | 0.000056 |
| After create | 0.011363 |
| query end | 0.000375 |
| freeing items | 0.000089 |
| logging slow query | 0.000019 |
| cleaning up | 0.000005 |
+----------------------+----------+
7 rows in set (0.00 sec)
mysql> SHOW PROFILE FOR QUERY 1;
+--------------------+----------+
| Status | Duration |
+--------------------+----------+
| query end | 0.000107 |
| freeing items | 0.000008 |
| logging slow query | 0.000015 |
| cleaning up | 0.000006 |
+--------------------+----------+
4 rows in set (0.00 sec)
mysql> SHOW PROFILE CPU FOR QUERY 2;
+----------------------+----------+----------+------------+
| Status | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| checking permissions | 0.000040 | 0.000038 | 0.000002 |
| creating table | 0.000056 | 0.000028 | 0.000028 |
| After create | 0.011363 | 0.000217 | 0.001571 |
| query end | 0.000375 | 0.000013 | 0.000028 |
| freeing items | 0.000089 | 0.000010 | 0.000014 |
| logging slow query | 0.000019 | 0.000009 | 0.000010 |
| cleaning up | 0.000005 | 0.000003 | 0.000002 |
+----------------------+----------+----------+------------+
7 rows in set (0.00 sec)
Профилирование частично функционально на некоторых архитектурах. Для значений, зависящих от системного вызова getrusage(), на системах, таких как Windows, которые не поддерживают этот вызов, возвращается NULL. Кроме того, профилирование выполняется по процессам, а не по потокам. Это означает, что деятельность в потоках сервера, отличных от вашего, может повлиять на информацию о времени, которую вы видите.
Информация о профилировании также доступна из таблицы INFORMATION_SCHEMA PROFILING. См. Раздел 24.3.19, «Таблица INFORMATION_SCHEMA PROFILING». Например, следующие запросы эквивалентны:
SHOW PROFILE FOR QUERY 2;
SELECT STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 2 ORDER BY SEQ;
© 2025 Oracle
Licensed under the GPLv2 License.