功能
INFORMATION_SCHEMA.PROCESSLIST 表用于展示实例内当前所有会话(线程)的运行状态信息,可用于查看会话连接情况、定位慢查询、排查长事务等场景。该表在原生 MySQL
PROCESSLIST 的基础上扩展了 TIME_MS、ROWS_SENT、ROWS_EXAMINED、TID 等字段,提供更精细的会话运行时观测能力。说明:
未授予
PROCESS 权限的用户,仅能查看自身会话的信息。授予
PROCESS 权限后,可查看实例内全部会话的信息。可通过
SHOW PROCESSLIST、SHOW FULL PROCESSLIST 语句获取类似信息,其中 INFO 列在 SHOW PROCESSLIST 中最多显示100个字符,在 SHOW FULL PROCESSLIST 和 INFORMATION_SCHEMA.PROCESSLIST 中完整显示。字段说明
字段名 | 类型 | 描述 |
ID | bigint unsigned | 会话连接 ID,对应 CONNECTION_ID() 返回值,可用作 KILL 语句的参数。 |
USER | varchar(32) | 发起该会话的 MySQL 用户名。系统会话显示为 system user,未完成认证的会话显示为 unauthenticated user。 |
HOST | varchar(261) | 发起该会话的客户端主机名或 IP 地址,格式为 host_name:port 或 ip:port。 |
DB | varchar(64) | 该会话当前使用的默认数据库名。若未选择默认数据库,取值为 NULL。 |
COMMAND | varchar(16) | 该会话正在执行的命令类型,常见取值包括 Sleep、Query、Connect、Binlog Dump、Killed 等。 |
TIME | int | 当前 COMMAND 已持续的时间,单位为秒。 |
STATE | varchar(64) | 线程正在进行的动作、事件或状态,用于描述会话当前所处的执行阶段。取值为 NULL 表示无状态信息。 |
INFO | varchar(65535) | 该会话正在执行的 SQL 语句。若未执行任何语句,取值为 NULL。 |
TIME_MS | bigint | 当前 COMMAND 已持续的时间,单位为毫秒,提供比 TIME 字段更高精度的计时。 |
ROWS_SENT | bigint unsigned | 该会话当前语句已经向客户端返回的行数。 |
ROWS_EXAMINED | bigint unsigned | 该会话当前语句已经扫描的行数,可用于辅助定位执行效率异常的 SQL。 |
TID | bigint unsigned | 该会话对应的协程 ID(即 bthread 的 ID),若该会话没有使用协程,取值为 0。用于在系统侧排查线程级问题。 |
示例
查询当前实例所有会话信息:
tdsql> SELECT * FROM information_schema.PROCESSLIST\\G*************************** 1. row ***************************ID: 2155297USER: testHOST: 10.10.10.10:59078DB: __tdsql_recycle_bin__COMMAND: QueryTIME: 0STATE: executingINFO: SELECT * FROM `information_schema`.`PROCESSLIST`TIME_MS: 2ROWS_SENT: 0ROWS_EXAMINED: 0TID: 268435659*************************** 2. row ***************************ID: 2149066USER: tdsql3_sys_localHOST: localhostDB: NULLCOMMAND: SleepTIME: 9STATE: NULLINFO: NULLTIME_MS: 8726ROWS_SENT: 4ROWS_EXAMINED: 4TID: 4217659552 rows in set (0.01 sec)
查询执行时长超过10秒的会话:
SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFOFROM information_schema.PROCESSLISTWHERE COMMAND <> 'Sleep' AND TIME > 10ORDER BY TIME DESC;
根据 ID 终止指定会话:
KILL 2155297;