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