KILL

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

语法图

KillStmt

KILL - 图1

  1. KillStmt ::= 'KILL' 'TIDB'? ( 'CONNECTION' | 'QUERY' )? CONNECTION_ID

示例

查询当前集群中所有活跃查询,并终止其中某一个连接:

  1. SELECT ID, USER, INSTANCE, INFO FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST;
  1. +---------------------+------+-----------------+-----------------------------------------------------------------------------+
  2. | ID | USER | INSTANCE | INFO |
  3. +---------------------+------+-----------------+-----------------------------------------------------------------------------+
  4. | 8306449708033769879 | root | 127.0.0.1:10082 | select sleep(30), 'foo' |
  5. | 5857102839209263511 | root | 127.0.0.1:10080 | select sleep(50) |
  6. | 5857102839209263513 | root | 127.0.0.1:10080 | SELECT ID, USER, INSTANCE, INFO FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST |
  7. +---------------------+------+-----------------+-----------------------------------------------------------------------------+
  1. KILL 5857102839209263511;
  1. 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 终止查询或连接。

KILL - 图2

注意

当集群中 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 中间有代理时,KILLKILL 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 语句。

另请参阅