Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add docs for 32bits global kill #14666

Merged
merged 8 commits into from
Aug 3, 2023
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions sql-statements/sql-statement-kill.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,23 @@ Query OK, 0 rows affected (0.00 sec)
## MySQL 兼容性

- MySQL 的 `KILL` 语句仅能终止当前连接的 MySQL 实例上的连接,TiDB 的 `KILL` 语句能终止整个集群中任意一个 TiDB 实例上的连接。
- 暂时不支持使用 MySQL 命令行 <kbd>ctrl</kbd>+<kbd>c</kbd> 终止查询或连接。
- v7.2.0 及之前的版本不支持使用 MySQL 命令行 <kbd>Control+C</kbd> 终止查询或连接。

## 行为变更说明

TiDB 从 v7.3.0 起支持生成 32 位 connection ID(由 [`enable-32bits-connection-id`](/tidb-configuration-file.md#enable-32bits-connection-id-从-v730-版本开始引入) 配置项控制,默认启用)。同时启用 Global Kill 功能和 32 位 connection ID 后,TiDB 将生成 32 位的 connection ID,从而支持在 MySQL 命令行中通过 <kbd>Control+C</kbd> 终止查询或连接。

> **注意:**
>
> 当集群中 TiDB 实例数量超过 2048 或者单个 TiDB 实例的同时连接数超过 1048576 时,由于 32 位 connection ID 空间不足,将自动升级为 64 位 connection ID。该升级过程不影响业务和已建立的连接,但后续的新建连接将无法通过 MySQL 命令行 <kbd>Control+C</kbd> 终止。

TiDB 从 v6.1.0 起新增 Global Kill 功能(由 [`enable-global-kill`](/tidb-configuration-file.md#enable-global-kill-从-v610-版本开始引入) 配置项控制,默认启用)。启用 Global Kill 功能时,`KILL` 语句和 `KILL TIDB` 语句均能跨节点终止查询或连接,且无需担心错误地终止其他查询或连接。当你使用客户端连接到任何一个 TiDB 节点执行 `KILL` 语句或 `KILL TIDB` 语句时,该语句会被转发给对应的 TiDB 节点。当客户端和 TiDB 中间有代理时,`KILL` 及 `KILL TIDB` 语句也会被转发给对应的 TiDB 节点执行。

pingyu marked this conversation as resolved.
Show resolved Hide resolved
对于 TiDB v6.1.0 之前的版本,或未启用 Global Kill 功能时:

- `KILL` 语句与 MySQL 不兼容,负载均衡器后面通常放有多个 TiDB 服务器,这种不兼容有助于防止在错误的 TiDB 服务器上终止连接。你需要显式地增加 `TIDB` 后缀,通过执行 `KILL TIDB` 语句来终止当前连接的 TiDB 实例上的其他连接。
- **强烈不建议**在配置文件里设置 [`compatible-kill-query = true`](/tidb-configuration-file.md#compatible-kill-query),**除非**你确定客户端将始终连接到同一个 TiDB 节点。这是因为当你在默认的 MySQL 客户端按下 <kbd>ctrl</kbd>+<kbd>c</kbd> 时,客户端会开启一个新连接,并在这个新连接中执行 `KILL` 语句。此时,如果客户端和 TiDB 中间有代理,新连接可能会被路由到其他的 TiDB 节点,从而错误地终止其他会话。
- `KILL TIDB` 语句是 TiDB 的扩展语法,其功能与 MySQL 命令 `KILL [CONNECTION|QUERY]` 和 MySQL 命令行 <kbd>ctrl</kbd>+<kbd>c</kbd> 相同。在同一个 TiDB 节点上,你可以安全地使用 `KILL TIDB` 语句。
- **强烈不建议**在配置文件里设置 [`compatible-kill-query = true`](/tidb-configuration-file.md#compatible-kill-query),**除非**你确定客户端将始终连接到同一个 TiDB 节点。这是因为当你在默认的 MySQL 客户端按下 <kbd>Control+C</kbd> 时,客户端会开启一个新连接,并在这个新连接中执行 `KILL` 语句。此时,如果客户端和 TiDB 中间有代理,新连接可能会被路由到其他的 TiDB 节点,从而错误地终止其他会话。
- `KILL TIDB` 语句是 TiDB 的扩展语法,其功能与 MySQL 命令 `KILL [CONNECTION|QUERY]` 和 MySQL 命令行 <kbd>Control+C</kbd> 相同。在同一个 TiDB 节点上,你可以安全地使用 `KILL TIDB` 语句。

## 另请参阅

Expand Down
13 changes: 12 additions & 1 deletion tidb-configuration-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,18 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/

+ 用于开启 Global Kill(跨节点终止查询或连接)功能。
+ 默认值:true
+ 当该配置项值为 `true` 时,`KILL` 语句和 `KILL TIDB` 语句均能跨节点终止查询或连接,无需担心错误地终止其他查询或连接。当你使用客户端连接到任何一个 TiDB 节点执行 `KILL` 语句或 `KILL TIDB` 语句时,该语句会被转发给对应的 TiDB 节点。当客户端和 TiDB 中间有代理时,`KILL` 语句或 `KILL TIDB` 语句也会被转发给对应的 TiDB 节点执行。目前暂时不支持在 `enable-global-kill` 为 `true` 时用 MySQL 命令行 <kbd>ctrl</kbd>+<kbd>c</kbd> 终止查询或连接。关于 `KILL` 语句的更多信息,请参考 [KILL [TIDB]](/sql-statements/sql-statement-kill.md)。
+ 当该配置项值为 `true` 时,`KILL` 语句和 `KILL TIDB` 语句均能跨节点终止查询或连接,无需担心错误地终止其他查询或连接。当你使用客户端连接到任何一个 TiDB 节点执行 `KILL` 语句或 `KILL TIDB` 语句时,该语句会被转发给对应的 TiDB 节点。当客户端和 TiDB 中间有代理时,`KILL` 语句或 `KILL TIDB` 语句也会被转发给对应的 TiDB 节点执行。关于 `KILL` 语句的更多信息,请参考 [KILL [TIDB]](/sql-statements/sql-statement-kill.md)。
pingyu marked this conversation as resolved.
Show resolved Hide resolved
+ TiDB 从 v7.3.0 开始支持在 `enable-global-kill = true` 和 `enable-32bits-connection-id = true` 时使用 MySQL 命令行 <kbd>Control+C</kbd> 终止查询或连接。
pingyu marked this conversation as resolved.
Show resolved Hide resolved

### `enable-32bits-connection-id` <span class="version-mark">从 v7.3.0 版本开始引入</span>

+ 用于控制是否开启生成 32 位 connection ID 的功能。
+ 默认值:`true`
+ 当该配置项值以及 `enable-global-kill` 为 `true` 时,生成 32 位 connection ID,从而支持在 MySQL 命令行中通过 <kbd>Control+C</kbd> 终止查询或连接。
pingyu marked this conversation as resolved.
Show resolved Hide resolved

> **注意:**
>
> 当集群中 TiDB 实例数量超过 2048 或者单个 TiDB 实例的同时连接数超过 1048576 后,由于 32 位 connection ID 空间不足,将自动升级为 64 位 connection ID。升级过程中业务以及已建立的连接不受影响,但后续的新建连接将无法通过 MySQL 命令行 <kbd>Control+C</kbd> 终止。

### `initialize-sql-file` <span class="version-mark">从 v6.6.0 版本开始引入</span>

Expand Down