你正在查看已归档的 TiDB 文档,该文档不再更新。查看最新 LTS 版本文档 ↗

KILL

KILL 语句可以终止当前 TiDB 集群中任意一个 TiDB 实例中的某个连接,从 v6.2.0 开始,KILL 语句也可以终止正在执行中的 DDL 作业。

语法图

KillStmt
KILLTIDBCONNECTIONQUERYCONNECTION_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 从 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 语句。

另请参阅