KILL
KILL
语句可以终止当前 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 实例上的连接。 - v7.2.0 及之前的版本不支持使用 MySQL 命令行 Control+C 终止查询或连接。
行为变更说明
TiDB 从 v7.3.0 起支持生成 32 位 connection ID(由 enable-32bits-connection-id 配置项控制,默认启用)。同时启用 Global Kill 功能和 32 位 connection ID 后,TiDB 将生成 32 位的 connection ID,从而支持在 MySQL 命令行中通过 Control+C 终止查询或连接。
注意
当集群中 TiDB 实例数量超过 2048 或者单个 TiDB 实例的同时连接数超过 1048576 时,由于 32 位 connection ID 空间不足,将自动升级为 64 位 connection ID。该升级过程不影响业务和已建立的连接,但后续的新建连接将无法通过 MySQL 命令行 Control+C 终止。
TiDB 从 v6.1.0 起新增 Global Kill 功能(由 enable-global-kill 配置项控制,默认启用)。启用 Global Kill 功能时,KILL
语句和 KILL TIDB
语句均能跨节点终止查询或连接,且无需担心错误地终止其他查询或连接。当你使用客户端连接到任何一个 TiDB 节点执行 KILL
语句或 KILL TIDB
语句时,该语句会被转发给对应的 TiDB 节点。当客户端和 TiDB 中间有代理时,KILL
及 KILL TIDB
语句也会被转发给对应的 TiDB 节点执行。
对于 TiDB v6.1.0 之前的版本,或未启用 Global Kill 功能时:
KILL
语句与 MySQL 不兼容,负载均衡器后面通常放有多个 TiDB 服务器,这种不兼容有助于防止在错误的 TiDB 服务器上终止连接。你需要显式地增加TIDB
后缀,通过执行KILL TIDB
语句来终止当前连接的 TiDB 实例上的其他连接。- 强烈不建议在配置文件里设置 compatible-kill-query = true,除非你确定客户端将始终连接到同一个 TiDB 节点。这是因为当你在默认的 MySQL 客户端按下 Control+C 时,客户端会开启一个新连接,并在这个新连接中执行
KILL
语句。此时,如果客户端和 TiDB 中间有代理,新连接可能会被路由到其他的 TiDB 节点,从而错误地终止其他会话。 KILL TIDB
语句是 TiDB 的扩展语法,其功能与 MySQL 命令KILL [CONNECTION|QUERY]
和 MySQL 命令行 Control+C 相同。在同一个 TiDB 节点上,你可以安全地使用KILL TIDB
语句。