SHOW PROFILES

最近更新时间:2026-05-18 17:35:34

我的收藏

功能描述

SHOW PROFILES 显示最近发送到服务器的语句的资源使用情况。SHOW PROFILE 用于查看指定语句各个执行阶段(Status)的耗时分布,便于性能分析与瓶颈定位。
启用 Profiling 功能后,TDSQL Boundless 会记录当前会话执行的语句信息,包括语句 ID、执行耗时和语句文本。

前提条件

执行该功能前,需在当前会话中启用 Profiling:
SET profiling = 1;

语法

SHOW PROFILES;

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
}

示例

示例一:查看最近执行的语句列表

tdsql > SET profiling = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

tdsql > SELECT COUNT(*) FROM test.t1;
+----------+
| COUNT(*) |
+----------+
| 1024 |
+----------+
1 row in set (0.02 sec)

tdsql > SHOW PROFILES;
+----------+------------+------------------------------+
| Query_ID | Duration | Query |
+----------+------------+------------------------------+
| 1 | 0.02158725 | SELECT COUNT(*) FROM test.t1 |
+----------+------------+------------------------------+
1 row in set (0.00 sec)
以上返回结果中的字段描述如下:
Query_ID:语句在当前会话中的编号。
Duration:语句执行总耗时,单位为秒。
Query:语句文本。

示例二:查看指定语句各阶段耗时

tdsql > SHOW PROFILE FOR QUERY 1;
+-----------------------+----------+
| Status | Duration |
+-----------------------+----------+
| starting | 0.000089 |
| Executing hook on txn | 0.000005 |
| starting | 0.000010 |
| checking permissions | 0.000007 |
| Opening tables | 0.000038 |
| init | 0.000034 |
| System lock | 0.000009 |
| Wait gts rsp | 0.001235 |
| Searching range cache | 0.018652 |
| optimizing | 0.000015 |
| statistics | 0.000142 |
| preparing | 0.000023 |
| executing | 0.001120 |
| end | 0.000005 |
| query end | 0.000009 |
| closing tables | 0.000012 |
| freeing items | 0.000056 |
| cleaning up | 0.000017 |
+-----------------------+----------+
18 rows in set (0.00 sec)
以上返回结果中的字段描述如下:
Status:语句执行所处的阶段名称。
Duration:该阶段消耗的时间,单位为秒。
部分关键阶段说明:
Wait gts rsp:等待 GTS(全局时间戳)响应的耗时。
Searching range cache:查找 range cache 的耗时。该状态由 TDSQL Boundless 新增,用于将 range cache 查找耗时从 Wait gts rsp 中独立出来,便于精准定位耗时来源。
System lock:等待系统锁的耗时。
Opening tables:打开表的耗时。

示例三:查看指定语句的 CPU 与 BLOCK IO 信息

tdsql > SHOW PROFILE CPU, BLOCK IO FOR QUERY 1;
+-----------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+-----------------------+----------+----------+------------+--------------+---------------+
| starting | 0.000089 | 0.000076 | 0.000012 | 0 | 0 |
| Wait gts rsp | 0.001235 | 0.000080 | 0.000020 | 0 | 0 |
| Searching range cache | 0.018652 | 0.015230 | 0.003410 | 16 | 0 |
| executing | 0.001120 | 0.001100 | 0.000018 | 0 | 0 |
| cleaning up | 0.000017 | 0.000015 | 0.000002 | 0 | 0 |
+-----------------------+----------+----------+------------+--------------+---------------+
以上返回结果中新增字段描述如下:
CPU_user:用户态 CPU 耗时,单位为秒。
CPU_system:内核态 CPU 耗时,单位为秒。
Block_ops_in:块设备读操作次数。
Block_ops_out:块设备写操作次数。

参数说明

SHOW PROFILE 支持的 type 选项:
ALL:显示所有信息。
BLOCK IO:显示块设备输入和输出操作次数。
CONTEXT SWITCHES:显示自愿与非自愿的上下文切换次数。
CPU:显示用户态与内核态 CPU 耗时。
IPC:显示发送和接收的消息数量。
MEMORY:暂未实现。
PAGE FAULTS:显示主要和次要的缺页次数。
SOURCE:显示函数所在的源文件名、函数名及行号。
SWAPS:显示 swap 次数。

注意事项

SHOW PROFILESSHOW PROFILE 仅显示当前会话执行的语句,会话断开后历史记录会丢失。
通过会话变量 profiling_history_size 控制保留的历史语句数量,默认为15,最大为100。
该功能在 MySQL 官方文档中已被标记为 Deprecated,建议结合 Performance Schema 使用以获得更全面的性能分析能力。