title | summary | aliases | ||
---|---|---|---|---|
KILL |
An overview of the usage of KILL for the TiDB database. |
|
The KILL
statement is used to terminate a connection in any TiDB instance in the current TiDB cluster.
KillStmt ::= 'KILL' 'TIDB'? ( 'CONNECTION' | 'QUERY' )? CONNECTION_ID
The following example shows how to get all active queries in the current cluster and terminate any one of them.
{{< copyable "sql" >}}
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 |
+---------------------+------+-----------------+-----------------------------------------------------------------------------+
{{< copyable "sql" >}}
KILL 5857102839209263511;
Query OK, 0 rows affected (0.00 sec)
- The
KILL
statement of MySQL can only terminate a connection in the currently connected MySQL instance, while theKILL
statement of TiDB can terminate a connection in any TiDB instance in the entire cluster. - In v7.2.0 and earlier versions, using the MySQL command line Control+C to terminate a query or connection in TiDB is not supported.
Starting from v7.3.0, TiDB supports generating 32-bit connection IDs, which is enabled by default and controlled by the enable-32bits-connection-id
configuration item. When both the Global Kill feature and 32-bit connection ID are enabled, TiDB generates a 32-bit connection ID and you can terminate queries or connections in the MySQL command-line using Control+C.
Warning:
When the number of TiDB instances in the cluster exceeds 2048 or the concurrent connection count of a single TiDB instance exceeds 1048576, the 32-bit connection ID space becomes insufficient and is automatically upgraded to 64-bit connection IDs. During the upgrade process, existing business and established connections are unaffected. However, subsequent new connections cannot be terminated using Control+C in the MySQL command-line.
Starting from v6.1.0, TiDB supports the Global Kill feature, which is enabled by default and controlled by the enable-global-kill
configuration.
Starting from v7.3.0, TiDB supports generating 32-bit connection IDs, which is enabled by default. When both the Global Kill feature and 32-bit connection ID are enabled, You can terminate queries or connections in the MySQL command-line using Control+C.
Starting from v6.1.0, TiDB supports the Global Kill feature, which is enabled by default.
When the Global Kill feature is enabled, both KILL
and KILL TIDB
statements can terminate queries or connections across instances so you do not need to worry about erroneously terminating queries or connections. When you use a client to connect to any TiDB instance and execute the KILL
or KILL TIDB
statement, the statement will be forwarded to the target TiDB instance. If there is a proxy between the client and the TiDB cluster, the KILL
and KILL TIDB
statements will also be forwarded to the target TiDB instance for execution.
If the Global Kill feature is not enabled or you are using a TiDB version earlier than v6.1.0, note the following:
- By default,
KILL
is not compatible with MySQL. This helps prevent against a case of a connection being terminated by a wrong TiDB server, because it is common to place multiple TiDB servers behind a load balancer. To terminate other connections on the currently connected TiDB instance, you need to add theTIDB
suffix explicitly by executing theKILL TIDB
statement.
- It is STRONGLY NOT RECOMMENDED to set
compatible-kill-query = true
in your configuration file UNLESS you are certain that clients will be always connected to the same TiDB instance. This is because pressing Control+C in the default MySQL client opens a new connection in whichKILL
is executed. If there is a proxy between the client and the TiDB cluster, the new connection might be routed to a different TiDB instance, which possibly kills a different session by mistake.
- The
KILL TIDB
statement is a TiDB extension. The feature of this statement is similar to the MySQLKILL [CONNECTION|QUERY]
command and the MySQL command line Control+C. It is safe to useKILL TIDB
on the same TiDB instance.