Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#10978
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
  • Loading branch information
CbcWestwolf authored and ti-chi-bot committed Nov 1, 2022
1 parent 3a9cf8c commit 4a10400
Show file tree
Hide file tree
Showing 12 changed files with 132 additions and 25 deletions.
2 changes: 1 addition & 1 deletion character-set-and-collation.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ TiDB 对 GBK 字符集的支持详情见 [GBK](/character-set-gbk.md)。

MySQL 限制字符集 `utf8` 为最多 3 个字节。这足以存储在基本多语言平面 (BMP) 中的字符,但不足以存储表情符号 (emoji) 等字符。因此,建议改用字符集`utf8mb4`

默认情况下,TiDB 同样限制字符集 `utf8` 为最多 3 个字节,以确保 TiDB 中创建的数据可以在 MySQL 中顺利恢复。你可以禁用此功能,方法是在 TiDB 配置文件中将 `check-mb4-value-in-utf8` 的值更改为 `FALSE`
默认情况下,TiDB 同样限制字符集 `utf8` 为最多 3 个字节,以确保 TiDB 中创建的数据可以在 MySQL 中顺利恢复。你可以禁用此功能,方法是将系统变量 [`tidb_check_mb4_value_in_utf8`](/system-variables.md#tidb_check_mb4_value_in_utf8) 的值更改为 `OFF`

以下示例演示了在表中插入 4 字节的表情符号字符(emoji 字符)时的默认行为。`utf8` 字符集下 `INSERT` 语句不能执行,`utf8mb4` 字符集下可以执行 `INSERT` 语句:

Expand Down
10 changes: 5 additions & 5 deletions configure-memory-usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ server-memory-quota = 34359738368
## tidb-server 内存占用过高时的报警

默认配置下,tidb-server 实例会在机器内存使用达到总内存量的 80% 时打印报警日志,并记录相关状态文件。该内存使用率可以通过配置项 [`memory-usage-alarm-ratio`](/tidb-configuration-file.md#memory-usage-alarm-ratio-从-v409-版本开始引入) 进行设置。具体报警规则请参考该配置项的说明部分
默认配置下,tidb-server 实例会在机器内存使用达到总内存量的 80% 时打印报警日志,并记录相关状态文件。该内存使用率可以通过系统变量 [`tidb_memory_usage_alarm_ratio`](/system-variables.md#tidb_memory_usage_alarm_ratio) 进行设置。具体报警规则请参考该变量的说明部分

注意,当触发一次报警后,只有在内存使用率连续低于阈值超过 10 秒并再次达到阈值时,才会再次触发报警。此外,为避免报警时产生的状态文件积累过多,目前只会保留最近 5 次报警时所生成的状态文件。

Expand All @@ -71,8 +71,8 @@ server-memory-quota = 34359738368

```toml
mem-quota-query = 34359738368
[performance]
memory-usage-alarm-ratio = 0.8
[instance]
tidb_memory_usage_alarm_ratio = 0.8
```

2. 创建单表 `CREATE TABLE t(a int);` 并插入 1000 行数据。
Expand All @@ -91,7 +91,7 @@ server-memory-quota = 34359738368
* `system memory total`:表示当前系统的总内存
* `system memory usage`:表示当前系统的内存使用量
* `tidb-server memory usage`:表示 tidb-server 实例的内存使用量
* `memory-usage-alarm-ratio`:表示配置项 [`memory-usage-alarm-ratio`](/tidb-configuration-file.md#memory-usage-alarm-ratio-从-v409-版本开始引入) 的值
* `memory-usage-alarm-ratio`:表示系统变量 [`tidb_memory_usage_alarm_ratio`](/system-variables.md#tidb_memory_usage_alarm_ratio) 的值
* `record path`:表示状态文件存放的目录

5. 通过访问状态文件所在目录(该示例中的目录为 `/tmp/1000_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage/record`),可以得到一组文件,其中包括 `goroutinue`、`heap`、`running_sql` 3 个文件,文件以记录状态文件的时间为后缀。这 3 个文件分别用来记录报警时的 goroutine 栈信息,堆内存使用状态,及正在运行的 SQL 信息。其中 `running_sql` 文件内的日志格式请参考 [`expensive-queries`](/identify-expensive-queries.md)。
Expand All @@ -108,7 +108,7 @@ server-memory-quota = 34359738368

TiDB 支持对执行算子的数据落盘功能。当 SQL 的内存使用超过 Memory Quota 时,tidb-server 可以通过落盘执行算子的中间数据,缓解内存压力。支持落盘的算子有:Sort、MergeJoin、HashJoin、HashAgg。

- 落盘行为由参数 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query)、[`oom-use-tmp-storage`](/tidb-configuration-file.md#oom-use-tmp-storage)、[`tmp-storage-path`](/tidb-configuration-file.md#tmp-storage-path)、[`tmp-storage-quota`](/tidb-configuration-file.md#tmp-storage-quota) 共同控制。
- 落盘行为由参数 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query)、[`tidb_enable_tmp_storage_on_oom`](/system-variables.md#tidb_enable_tmp_storage_on_oom)、[`tmp-storage-path`](/tidb-configuration-file.md#tmp-storage-path)、[`tmp-storage-quota`](/tidb-configuration-file.md#tmp-storage-quota) 共同控制。
- 当落盘被触发时,TiDB 会在日志中打印一条包含关键字 `memory exceeds quota, spill to disk now` 或 `memory exceeds quota, set aggregate mode to spill-mode` 的日志。
- Sort、MergeJoin、HashJoin 落盘是从 v4.0.0 版本开始引入的,HashAgg 落盘是从 v5.2.0 版本开始引入的。
- 当包含 Sort、MergeJoin 或 HashJoin 的 SQL 语句引起内存 OOM 时,TiDB 默认会触发落盘。当包含 HashAgg 算子的 SQL 语句引起内存 OOM 时,TiDB 默认不触发落盘,请设置系统变量 `tidb_executor_concurrency = 1` 来触发 HashAgg 落盘功能。
Expand Down
2 changes: 1 addition & 1 deletion dashboard/dashboard-slow-query.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ summary: 了解如何在 TiDB Dashboard 中查看慢查询。

> **注意:**
>
> 若关闭了慢查询日志,则本功能不可用。慢查询日志默认开启,可通过修改 TiDB 配置 [`enable-slow-log`](/tidb-configuration-file.md#enable-slow-log) 开启或禁用。
> 若关闭了慢查询日志,则本功能不可用。慢查询日志默认开启,可通过修改 TiDB 系统变量 [`tidb_enable_slow_log`](/system-variables.md#tidb_enable_slow_log) 开启或禁用。
## 访问列表页面

Expand Down
2 changes: 1 addition & 1 deletion enable-disk-spill-encrypt.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ summary: 了解如何为 TiDB 落盘文件开启加密。

# 为 TiDB 落盘文件开启加密

当配置项 `oom-use-tmp-storage``true` 时,如果单条 SQL 语句的内存使用超出系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 的限制,某些算子可以将执行时的中间结果作为临时文件落盘保存,直到查询执行完成之后将它们删除。
当系统变量 [`tidb_enable_tmp_storage_on_oom`](/system-variables.md#tidb_enable_tmp_storage_on_oom)`ON` 时,如果单条 SQL 语句的内存使用超出系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 的限制,某些算子可以将执行时的中间结果作为临时文件落盘保存,直到查询执行完成之后将它们删除。

用户可以开启落盘文件加密功能,防止攻击者通过读取临时文件来访问数据。

Expand Down
2 changes: 1 addition & 1 deletion explain-joins.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ TiDB 会按照以下顺序执行 `HashJoin_27` 算子:

### 运行数据

如果在执行操作时,内存使用超过了 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 规定的值(默认为 1GB),且 `oom-use-tmp-storage` 的值为 `true` (默认为 `true`),那么 TiDB 会尝试使用临时存储,在磁盘上创建 Hash Join 的 Build 端。`EXPLAIN ANALYZE` 返回结果中的 `execution info` 一栏记录了有关内存使用情况等运行数据。下面的例子展示了 `tidb_mem_quota_query` 的值分别设为 1GB(默认)及 500MB 时,`EXPLAIN ANALYZE` 的返回结果(当内存配额设为 500MB 时,磁盘用作临时存储区):
如果在执行操作时,内存使用超过了 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 规定的值(默认为 1 GB),且 [`tidb_enable_tmp_storage_on_oom`](/system-variables.md#tidb_enable_tmp_storage_on_oom) 的值为 `ON` (默认为 `ON`),那么 TiDB 会尝试使用临时存储,在磁盘上创建 Hash Join 的 Build 端。`EXPLAIN ANALYZE` 返回结果中的 `execution info` 一栏记录了有关内存使用情况等运行数据。下面的例子展示了 `tidb_mem_quota_query` 的值分别设为 1 GB(默认)及 500 MB 时,`EXPLAIN ANALYZE` 的返回结果(当内存配额设为 500 MB 时,磁盘用作临时存储区):

```sql
EXPLAIN ANALYZE SELECT /*+ HASH_JOIN(t1, t2) */ * FROM t1, t2 WHERE t1.id = t2.id;
Expand Down
2 changes: 1 addition & 1 deletion faq/manage-cluster-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ TiClient Region Error 该指标描述的是在 TiDB-server 作为客户端通过

### TiDB 同时支持的最大并发连接数?

默认情况下,每个 TiDB 服务器的最大连接数没有限制。如有需要,可以在 `config.toml` 文件中设置 `max-server-connections` 来限制最大连接数。如果并发量过大导致响应时间增加,建议通过添加 TiDB 节点进行扩容。
默认情况下,每个 TiDB 服务器的最大连接数没有限制。如有需要,可以在 `config.toml` 文件中设置 `instance.max_connections`(或者系统变量 `max_connections`来限制最大连接数。如果并发量过大导致响应时间增加,建议通过添加 TiDB 节点进行扩容。

### 如何查看某张表创建的时间?

Expand Down
2 changes: 1 addition & 1 deletion faq/sql-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ TiDB 的 `SHOW PROCESSLIST` 与 MySQL 的 `SHOW PROCESSLIST` 显示内容基本

## 在 TiDB 中如何控制或改变 SQL 提交的执行优先级?

TiDB 支持改变 [per-session](/system-variables.md#tidb_force_priority)、[全局](/tidb-configuration-file.md#force-priority)或单个语句的优先级。优先级包括:
TiDB 支持改变 [per-session](/system-variables.md#tidb_force_priority)、[全局](/system-variables.md#tidb_force_priority)或单个语句的优先级。优先级包括:

- HIGH_PRIORITY:该语句为高优先级语句,TiDB 在执行阶段会优先处理这条语句
- LOW_PRIORITY:该语句为低优先级语句,TiDB 在执行阶段会降低这条语句的优先级
Expand Down
4 changes: 2 additions & 2 deletions identify-slow-queries.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ title: 慢查询日志

# 慢查询日志

TiDB 会将执行时间超过 [slow-threshold](/tidb-configuration-file.md#slow-threshold)(默认值为 300 毫秒)的语句输出到 [slow-query-file](/tidb-configuration-file.md#slow-query-file)(默认值:"tidb-slow.log")日志文件中,用于帮助用户定位慢查询语句,分析和解决 SQL 执行的性能问题。
TiDB 会将执行时间超过 [`tidb_enable_slow_log`](/system-variables.md#tidb_enable_slow_log)(默认值为 300 毫秒)的语句输出到 [slow-query-file](/tidb-configuration-file.md#slow-query-file)(默认值:"tidb-slow.log")日志文件中,用于帮助用户定位慢查询语句,分析和解决 SQL 执行的性能问题。

TiDB 默认启用慢查询日志,可以修改配置 [`enable-slow-log`](/tidb-configuration-file.md#enable-slow-log) 来启用或禁用它。
TiDB 默认启用慢查询日志,可以修改系统变量 [`tidb_enable_slow_log`](/system-variables.md#tidb_enable_slow_log) 来启用或禁用它。

## 日志示例

Expand Down
2 changes: 1 addition & 1 deletion security-compatibility-with-mysql.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ title: 与 MySQL 安全特性差异

- 不支持列级别权限设置。
- 不支持密码过期,最后一次密码变更记录以及密码生存期。[#9709](https://github.com/pingcap/tidb/issues/9709)
- 不支持权限属性 `max_questions``max_updated``max_connections` 以及 `max_user_connections`
- 不支持权限属性 `max_questions``max_updated` 以及 `max_user_connections`
- 不支持密码验证。[#9741](https://github.com/pingcap/tidb/issues/9741)

## 可用的身份验证插件
Expand Down
48 changes: 41 additions & 7 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -307,12 +307,12 @@ mysql> SELECT * FROM t1;
### `max_connections`

- 作用域:GLOBAL
- 是否持久化到集群:否
- 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例
- 类型:整数
- 默认值:`0`
- 取值范围:`[0, 100000]`
- 该变量表示 TiDB 实例允许的最大连接数
- 该变量值为 `0` 时表示无限制
- 该变量表示 TiDB 中同时允许的最大客户端连接数,用于资源控制
- 默认情况下,该变量值为 `0` 表示不限制客户端连接数。当本变量的值大于 `0` 且客户端连接数到达此值时,TiDB 服务端将会拒绝新的客户端连接

### `max_execution_time`

Expand Down Expand Up @@ -1013,6 +1013,14 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数
- 默认值:`ON`
- 这个变量用于控制是否让 TiDB 使用并发 DDL 语句。在开启并发 DDL 语句后,DDL 语句的执行流程有所改变,DDL 语句不容易被其他 DDL 语句阻塞,并且能够同时添加多个索引。
### `tidb_enable_ddl`
- 作用域:GLOBAL
- 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例
- 默认值: `ON`
- 可选值:`OFF``ON`
- 用于设置该 TiDB 服务器是否运行 DDL 语句。
### `tidb_enable_enhanced_security`
- 作用域:NONE
Expand Down Expand Up @@ -1233,7 +1241,12 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数
- 是否持久化到集群:是
- 默认值:`ON`
- 这个变量控制是否为读数据的算子开启动态内存控制功能。读数据的算子默认启用 [`tidb_distsql_scan_concurrency`](/system-variables.md#tidb_distsql_scan_concurrency) 所允许的最大线程数来读取数据。当单条 SQL 语句的内存使用每超过 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 一次,读数据的算子会停止一个线程。
<<<<<<< HEAD
- 当读数据的算子只剩 1 个线程且当单条 SQL 语句的内存使用继续超过 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 时,该 SQL 语句会触发其它的内存控制行为,例如[落盘](/tidb-configuration-file.md#oom-use-tmp-storage)。
=======
- 当读数据的算子只剩 1 个线程且当单条 SQL 语句的内存使用继续超过 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 时,该 SQL 语句会触发其它的内存控制行为,例如[落盘](/system-variables.md#tidb_enable_tmp_storage_on_oom)。
- 该变量在单条查询仅涉及读数据的情况下,对内存控制效果较好。若还存在额外的计算操作(如连接、聚合等),打开该变量可能会导致内存不受 `tidb_mem_quota_query` 控制,加剧 OOM 风险。
>>>>>>> 53c0a7adb (config, sysvar: update descriptions about instance sysvars (#10978))
### `tidb_enable_slow_log`
Expand Down Expand Up @@ -1290,6 +1303,29 @@ Query OK, 0 rows affected (0.09 sec)
- 默认值:`ON`
- 这个变量用于动态地控制 TiDB 遥测功能是否开启。设置为 `OFF` 可以关闭 TiDB 遥测功能。当所有 TiDB 实例都设置 [`enable-telemetry`](/tidb-configuration-file.md#enable-telemetry-从-v402-版本开始引入) 为 `false` 时将忽略该系统变量并总是关闭 TiDB 遥测功能。参阅[遥测](/telemetry.md)了解该功能详情。
<<<<<<< HEAD
=======
### `tidb_enable_tiflash_read_for_write_stmt` <span class="version-mark">从 v6.3.0 版本开始引入</span>
> **警告:**
>
> 当前版本中该变量控制的功能尚未完全生效,请保留默认值。
- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 默认值:`OFF`
- 这个变量用于控制写 SQL 中的读取是否会下推到 TiFlash。
### `tidb_enable_tmp_storage_on_oom`
- 作用域:GLOBAL
- 是否持久化到集群:是
- 默认值:`ON`
- 可选值:`OFF``ON`
- 设置是否在单条 SQL 语句的内存使用超出系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 限制时为某些算子启用临时磁盘。
-v6.3.0 之前这个开关可通过 TiDB 配置文件中的 `oom-use-tmp-storage` 项进行配置。在升级到 v6.3.0 及更新的版本后,集群会自动使用原 `oom-use-tmp-storage` 的值来初始化该开关,配置文件中 `oom-use-tmp-storage` 的新设置不再影响该开关。
>>>>>>> 53c0a7adb (config, sysvar: update descriptions about instance sysvars (#10978))
### `tidb_enable_top_sql` <span class="version-mark">从 v5.4.0 版本开始引入</span>
> **警告:**
Expand Down Expand Up @@ -1661,7 +1697,6 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)
### `tidb_last_txn_info` <span class="version-mark">从 v4.0.9 版本开始引入</span>
- 作用域:SESSION
- 是否持久化到集群:否
- 类型:字符串
- 此变量用于获取当前会话中最后一个事务的信息。这是一个只读变量。事务信息包括:
- 事务的范围
Expand Down Expand Up @@ -1796,8 +1831,8 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)
- 作用域:GLOBAL
- 是否持久化到集群:否,仅作用于当前连接的 TiDB 实例
- 默认值:`0.8`
- TiDB 内存使用占总内存的比例超过一定阈值时会报警。该功能的详细介绍和使用方法可以参考 [`memory-usage-alarm-ratio`](/tidb-configuration-file.md#memory-usage-alarm-ratio-从-v409-版本开始引入)。
- 该变量的初始值可通过 [`memory-usage-alarm-ratio`](/tidb-configuration-file.md#memory-usage-alarm-ratio-从-v409-版本开始引入) 进行配置。
- TiDB 内存使用占总内存的比例超过一定阈值时会报警。该功能的详细介绍和使用方法可以参考 [`tidb_memory_usage_alarm_ratio`](/tidb-configuration-file.md#tidb_memory_usage_alarm_ratio)。
- 该变量的初始值可通过 [`tidb_memory_usage_alarm_ratio`](/tidb-configuration-file.md#tidb_memory_usage_alarm_ratio) 进行配置。
### `tidb_merge_join_concurrency`
Expand Down Expand Up @@ -2343,7 +2378,6 @@ explain select * from t where age=5;
### `tidb_read_consistency` <span class="version-mark">New in v5.4.0</span>
- 作用域:SESSION
- 是否持久化到集群:否
- 类型:字符串
- 默认值:`strict`
- 此变量用于控制自动提交的读语句的读一致性。
Expand Down
Loading

0 comments on commit 4a10400

Please sign in to comment.