1)由于 TiDB 是分布式数据库,tidb-server 实例是无状态的 SQL 解析和执行引擎,用户使用 MySQL 客户端登录的是哪个 tidb-server,show processlist 就会显示当前连接的这个 tidb-server 中执行的 session 列表,不是整个集群中运行的全部 session 列表;而 MySQL 是单机数据库,show processlist 列出的是当前整个 MySQL 数据库的全部执行 SQL 列表。
2)TiDB 的 show processlist 显示内容比起 MySQL 来讲,多了一个当前 session 使用内存的估算值(单位 Byte)。
- kill
- 可以 kill DML 语句,首先使用 show processlist,找到对应 session 的 id,然后执行 kill tidb [session id]。
- 可以 kill DDL 语句,首先使用 admin show ddl jobs,查找需要 kill 的 DDL job ID,然后执行 admin cancel ddl jobs ‘job_id’ [, ‘job_id’] …。具体可以参考 admin 操作。
- 注意:默认 kill 命令是不会真正执行的,需要开启compatible-kill-query参数的设置才会真正执行,参数含义如下:
- 设置 “kill” 语句的兼容性。
- 默认: false
- 在 TiDB 里面 “kill xxx” 语句和 MySQL 行为不一致。只有执行 “kill tidb xxx” 的时候,才会真正的杀死一条查询。当 compatible-kill-query 设置为 true 的时候,则兼容 MySQL 的行为,不需要 “tidb” 关键字。
- 另外 Ctrl + C 不会停止当前正在执行的 session,因为在 BL 层的时候,如果是通过浮动 IP 连接的 session ,执行事务已经在执行,Ctrl + C 实际就是 session 退出,但是不会停止当前正在执行事务。