KILL
KILL 语句用于终止当前 TiDB 集群中任意 TiDB 实例上的连接。从 TiDB v6.2.0 开始,KILL 语句还可以终止正在执行的 DDL 作业。
语法图
- KillStmt
KillStmt ::= 'KILL' 'TIDB'? ( 'CONNECTION' | 'QUERY' )? CONNECTION_ID
示例
以下示例展示如何查询当前集群中所有正在执行的查询,并终止其中一个查询所在的连接。
SELECT ID, USER, INSTANCE, INFO FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST;
+---------------------+------+-----------------+-----------------------------------------------------------------------------+
| ID | USER | INSTANCE | INFO |
+---------------------+------+-----------------+-----------------------------------------------------------------------------+
| 8306449708033769879 | root | 127.0.0.1:10082 | select sleep(30), 'foo' |
| 5857102839209263511 | root | 127.0.0.1:10080 | select sleep(50) |
| 5857102839209263513 | root | 127.0.0.1:10080 | SELECT ID, USER, INSTANCE, INFO FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST |
+---------------------+------+-----------------+-----------------------------------------------------------------------------+
KILL 5857102839209263511;
Query OK, 0 rows affected (0.00 sec)
MySQL 兼容性
- MySQL 的
KILL语句只能终止当前连接的 MySQL 实例上的连接,而 TiDB 的KILL语句可以终止整个集群中任意 TiDB 实例上的连接。 - TiDB v7.2.0 及之前的版本不支持通过 MySQL 命令行中的 Control+C 终止查询或连接。
行为变更说明
从 v7.3.0 开始,TiDB 支持生成 32 位 connection ID,且默认启用该功能。同时启用 Global Kill 功能和 32 位 connection ID 后,可以在 MySQL 命令行中通过 Control+C 终止查询或连接。
从 v6.1.0 开始,TiDB 支持 Global Kill 功能,且默认启用该功能。
启用 Global Kill 功能后,KILL 和 KILL TIDB 语句均可以跨实例终止查询或连接,无需担心误终止其他查询或连接。当你使用客户端连接到任意 TiDB 实例并执行 KILL 或 KILL TIDB 语句时,该语句会被转发到目标 TiDB 实例。如果客户端与 TiDB 集群之间存在代理,KILL 和 KILL TIDB 语句也会被转发到目标 TiDB 实例执行。
如果未启用 Global Kill 功能,或者使用的是 v6.1.0 之前的 TiDB 版本,需要注意以下事项:
- 默认情况下,
KILL语句与 MySQL 不兼容。由于通常会在负载均衡器后部署多个 TiDB 实例,这种不兼容性有助于防止连接被错误的 TiDB 实例终止。要终止当前连接的 TiDB 实例上的其他连接,需要显式添加TIDB后缀,即执行KILL TIDB语句。
KILL TIDB语句是 TiDB 的扩展语法,其功能与 MySQL 的KILL [CONNECTION|QUERY]命令及 MySQL 命令行中的 Control+C 类似。在同一个 TiDB 实例上,可以安全地使用KILL TIDB语句。