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

update tidb config and sys vars for v6.1 #9631

Merged
merged 3 commits into from
Jun 6, 2022
Merged
Show file tree
Hide file tree
Changes from all 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
3 changes: 1 addition & 2 deletions benchmark/benchmark-tidb-using-sysbench.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@ aliases: ['/docs-cn/dev/benchmark/benchmark-tidb-using-sysbench/','/docs-cn/dev/

### TiDB 配置

升高日志级别,可以减少打印日志数量,对 TiDB 的性能有积极影响。开启 TiDB 配置中的 `prepared plan cache`,以减少优化执行计划的开销。具体在 TiUP 配置文件中加入:
升高日志级别,可以减少打印日志数量,对 TiDB 的性能有积极影响。具体在 TiUP 配置文件中加入:

```yaml
server_configs:
tidb:
log.level: "error"
prepared-plan-cache.enabled: true
```

### TiKV 配置
Expand Down
1 change: 0 additions & 1 deletion best-practices/three-nodes-hybrid-deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ tikv:
rocksdb.rate-bytes-per-sec: “200M”

tidb:
performance.committer-concurrency: 4
performance.max-procs: 8
```

Expand Down
5 changes: 0 additions & 5 deletions command-line-flags-for-tidb-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,3 @@ aliases: ['/docs-cn/dev/command-line-flags-for-tidb-configuration/','/docs-cn/de

+ 修复模式下需要修复的表名
+ 默认:""

## `--require-secure-transport`

+ 是否要求客户端使用安全传输模式
+ 默认:false
37 changes: 11 additions & 26 deletions configure-memory-usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,52 +5,37 @@ aliases: ['/docs-cn/dev/configure-memory-usage/','/docs-cn/dev/how-to/configure/

# TiDB 内存控制文档

目前 TiDB 已经能够做到追踪单条 SQL 查询过程中的内存使用情况,当内存使用超过一定阈值后也能采取一些操作来预防 OOM 或者排查 OOM 原因。在 TiDB 的配置文件中,我们可以使用如下配置来控制内存使用超阈值时 TiDB 的行为
目前 TiDB 已经能够做到追踪单条 SQL 查询过程中的内存使用情况,当内存使用超过一定阈值后也能采取一些操作来预防 OOM 或者排查 OOM 原因。你可以使用系统变量 [`tidb_mem_oom_action`](/system-variables.md#tidb_mem_oom_action-从-v610-版本开始引入) 来控制查询超过内存限制后所采取的操作

{{< copyable "" >}}

```
# Valid options: ["log", "cancel"]
oom-action = "cancel"
```

- 如果上面的配置项使用的是 "log",那么当一条 SQL 的内存使用超过一定阈值(由 session 变量 `tidb_mem_quota_query` 来控制)后,TiDB 会在 log 文件中打印一条 LOG,然后这条 SQL 继续执行,之后如果发生了 OOM 可以在 LOG 中找到对应的 SQL。
- 如果上面的配置项使用的是 "cancel",那么当一条 SQL 的内存使用超过一定阈值后,TiDB 会立即中断这条 SQL 的执行并给客户端返回一个 error,error 信息中会详细写明这条 SQL 执行过程中各个占用内存比较多的物理执行算子的内存使用情况。
- 如果变量值为 `LOG`,那么当一条 SQL 的内存使用超过一定阈值(由 session 变量 `tidb_mem_quota_query` 控制)后,这条 SQL 会继续执行,但 TiDB 会在 log 文件中打印一条 LOG。
- 如果变量值为 `CANCEL`,那么当一条 SQL 的内存使用超过一定阈值后,TiDB 会立即中断这条 SQL 的执行,并给客户端返回一个错误,错误信息中会详细写明在这条 SQL 执行过程中占用内存的各个物理执行算子的内存使用情况。

## 如何配置一条 SQL 执行过程中的内存使用阈值

可以在配置文件中设置每个 Query 默认的 Memory Quota,例如将其设置为 32GB:

{{< copyable "" >}}

```
mem-quota-query = 34359738368
```

此外还可通过 session 变量 `tidb_mem_quota_query` 来控制一条 Query 中的内存使用。几个使用例子:
使用系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 来配置一条 SQL 执行过程中的内存使用阈值,单位为字节。例如:

配置整条 SQL 的内存使用阈值为 8GB:

{{< copyable "sql" >}}

```sql
set @@tidb_mem_quota_query = 8 << 30;
SET tidb_mem_quota_query = 8 << 30;
```

配置整条 SQL 的内存使用阈值为 8MB:

{{< copyable "sql" >}}

```sql
set @@tidb_mem_quota_query = 8 << 20;
SET tidb_mem_quota_query = 8 << 20;
```

配置整条 SQL 的内存使用阈值为 8KB:

{{< copyable "sql" >}}

```sql
set @@tidb_mem_quota_query = 8 << 10;
SET tidb_mem_quota_query = 8 << 10;
```

## 如何配置 tidb-server 实例使用内存的阈值
Expand Down Expand Up @@ -86,7 +71,7 @@ server-memory-quota = 34359738368
{{< copyable "" >}}

```toml
mem-quota-query = 34359738368 // 将单条 SQL 内存限制调高,以便于构造占用内存较大的 SQL
mem-quota-query = 34359738368
[performance]
memory-usage-alarm-ratio = 0.8
```
Expand Down Expand Up @@ -124,7 +109,7 @@ server-memory-quota = 34359738368

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

- 落盘行为由参数 [`mem-quota-query`](/tidb-configuration-file.md#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)、[`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 会在日志中打印一条包含关键字 `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 All @@ -140,7 +125,7 @@ TiDB 支持对执行算子的数据落盘功能。当 SQL 的内存使用超过
{{< copyable "sql" >}}

```sql
set tidb_mem_quota_query = 1 << 30;
SET tidb_mem_quota_query = 1 << 30;
```

2. 创建单表 `CREATE TABLE t(a int);` 并插入 256 行不同的数据。
Expand All @@ -164,7 +149,7 @@ TiDB 支持对执行算子的数据落盘功能。当 SQL 的内存使用超过
{{< copyable "sql" >}}

```sql
set tidb_executor_concurrency = 1;
SET tidb_executor_concurrency = 1;
```

5. 执行相同的 SQL 语句,不再返回错误,可以执行成功。从详细的执行计划可以看出,HashAgg 使用了 600MB 的硬盘空间。
Expand Down
1 change: 0 additions & 1 deletion dynamic-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,6 @@ select @@tidb_slow_log_threshold;

| 配置项 | 对应变量 | 简介 |
| --- | --- | --- |
| mem-quota-query | tidb_mem_quota_query | 查询语句的内存使用限制 |
| log.enable-slow-log | tidb_enable_slow_log | 慢日志的开关 |
| log.slow-threshold | tidb_slow_log_threshold | 慢日志阈值 |
| log.expensive-threshold | tidb_expensive_query_time_threshold | expensive 查询阈值 |
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 语句的内存使用超出 `mem-quota-query` 的限制,某些算子可以将执行时的中间结果作为临时文件落盘保存,直到查询执行完成之后将它们删除。
当配置项 `oom-use-tmp-storage` 为 `true` 时,如果单条 SQL 语句的内存使用超出系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 的限制,某些算子可以将执行时的中间结果作为临时文件落盘保存,直到查询执行完成之后将它们删除。

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

Expand Down
2 changes: 1 addition & 1 deletion enable-tls-between-clients-and-servers.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ TiDB 服务端支持启用基于 TLS(传输层安全)协议的加密连接

另外,与 MySQL 相同,TiDB 也支持在同一 TCP 端口上开启 TLS 连接或非 TLS 连接。对于开启了 TLS 连接支持的 TiDB 服务端,客户端既可以选择通过加密连接安全地连接到该 TiDB 服务端,也可以选择使用普通的非加密连接。如需使用加密连接,你可以通过以下方式进行配置:

+ 通过在启动参数中配置 `--require-secure-transport` 要求所有用户必须使用加密连接来连接到 TiDB。
+ 通过配置系统变量 `require_secure_transport` 要求所有用户必须使用加密连接来连接到 TiDB。
+ 通过在创建用户 (`create user`),或修改已有用户 (`alter user`) 时指定 `REQUIRE SSL` 要求指定用户必须使用加密连接来连接 TiDB。以创建用户为例:

```sql
Expand Down
2 changes: 1 addition & 1 deletion error-codes.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ TiDB 兼容 MySQL 的错误码,在大多数情况下,返回和 MySQL 一样

* Error Number: 8001

请求使用的内存超过 TiDB 内存使用的阈值限制。出现这种错误,可以通过调整 `mem-quota-query` 来增大单个 SQL 使用的内存上限。
请求使用的内存超过 TiDB 内存使用的阈值限制。出现这种错误,可以通过调整系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 来增大单个 SQL 使用的内存上限。

* Error Number: 8002

Expand Down
2 changes: 2 additions & 0 deletions faq/sql-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ TiDB 支持改变 [per-session](/system-variables.md#tidb_force_priority)、[全

当表的(修改数/当前总行数)大于 `tidb_auto_analyze_ratio` 的时候,会自动触发 `analyze` 语句。`tidb_auto_analyze_ratio` 的默认值为 0.5,即默认开启此功能。为了保险起见,在开启此功能的时候,保证了其最小值为 0.3。但是不能大于等于 `pseudo-estimate-ratio`(默认值为 0.8),否则会有一段时间使用 pseudo 统计信息,建议设置值为 0.5。

你可以用系统变量 [`tidb_enable_auto_analyze`](/system-variables.md#tidb_enable_auto_analyze-从-v610-版本开始引入) 关闭 auto analyze。

## 可以使用 Hints 控制优化器行为吗?

在 TiDB 中,你可以用多种方法控制查询优化器的默认行为,包括使用 [Optimizer Hints](/optimizer-hints.md) 和 [SQL 执行计划管理 (SPM)](/sql-plan-management.md)。基本用法同 MySQL 中的一致,还包含若干 TiDB 特有的用法,示例如下:`select column_name from table_name use index(index_name)where where_condition;`
Expand Down
6 changes: 3 additions & 3 deletions grafana-tidb-dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@ aliases: ['/docs-cn/dev/grafana-tidb-dashboard/','/docs-cn/dev/reference/key-mon
- Transaction Statement Num:事务中的 SQL 语句数量
- Transaction Retry Num:事务重试次数
- Session Retry Error OPS:事务重试时每秒遇到的错误数量,分为重试失败和超过最大重试次数两种类型
- Commit Token Wait Duration:事务提交时的流控队列等待时间。当出现较长等待时,代表提交事务过大,正在限流。如果系统还有资源可以使用,可以通过增大 TiDB 配置文件中 `committer-concurrency` 值来加速提交
- Commit Token Wait Duration:事务提交时的流控队列等待时间。当出现较长等待时,代表提交事务过大,正在限流。如果系统还有资源可以使用,可以通过增大系统变量 `tidb_committer_concurrency` 的值来加速提交
- KV Transaction OPS:每个 TiDB 内部每秒执行的事务数量
- 一个用户的事务,在 TiDB 内部可能会触发多次事务执行,其中包含,内部元数据的读取,用户事务原子性地多次重试执行等
- TiDB 内部的定时任务也会通过事务来操作数据库,这部分也包含在这个面板里
- KV Transaction Duration:每个 TiDB 内部执行事务的耗时
- Transaction Regions Num:事务操作的 Region 数量
- Transaction Regions Num:事务操作的 Region 数量
- Transaction Write KV Num Rate and Sum:事务写入 KV 的速率总和
- Transaction Write KV Num:事务操作的 KV 数量
- Statement Lock Keys:单个语句的加锁个数
Expand All @@ -71,7 +71,7 @@ aliases: ['/docs-cn/dev/grafana-tidb-dashboard/','/docs-cn/dev/reference/key-mon
- Transaction Write Size Bytes:事务写入的数据大小
- Acquire Pessimistic Locks Duration:加锁所消耗的时间
- TTL Lifetime Reach Counter:事务的 TTL 寿命上限。TTL 上限默认值 1 小时,它的含义是从悲观事务第一次加锁,或者乐观事务的第一个 prewrite 开始,超过了 1 小时。可以通过修改 TiDB 配置文件中 `max-txn-ttl` 来改变 TTL 寿命上限
- Load Safepoint OPS:加载 Safepoint 的次数。Safepoint 作用是在事务读数据时,保证不读到 Safepoint 之前的数据,保证数据安全。因为,Safepoint 之前的数据有可能被 GC 清理掉
- Load Safepoint OPS:加载 Safepoint 的次数。Safepoint 作用是在事务读数据时,保证不读到 Safepoint 之前的数据,保证数据安全。因为,Safepoint 之前的数据有可能被 GC 清理掉
- Pessimistic Statement Retry OPS:悲观语句重试次数。当语句尝试加锁时,可能遇到写入冲突,此时,语句会重新获取新的 snapshot 并再次加锁
- Transaction Types Per Seconds:每秒采用两阶段提交 (2PC)、异步提交 (Async Commit) 和一阶段提交 (1PC) 机制的事务数量,提供成功和失败两种数量

Expand Down
2 changes: 1 addition & 1 deletion identify-expensive-queries.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ aliases: ['/docs-cn/dev/identify-expensive-queries/','/docs-cn/dev/how-to/mainta

# 定位消耗系统资源多的查询

TiDB 会将执行时间超过 [`tidb_expensive_query_time_threshold`](/system-variables.md#tidb_expensive_query_time_threshold) 限制(默认值为 60s),或使用内存超过 [`mem-quota-query`](/tidb-configuration-file.md#mem-quota-query) 限制(默认值为 1 GB)的语句输出到 [tidb-server 日志文件](/tidb-configuration-file.md#logfile)(默认文件为 "tidb.log")中,用于在语句执行结束前定位消耗系统资源多的查询语句(以下简称为 expensive query),帮助用户分析和解决语句执行的性能问题。
TiDB 会将执行时间超过 [`tidb_expensive_query_time_threshold`](/system-variables.md#tidb_expensive_query_time_threshold) 限制(默认值为 60s),或使用内存超过 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 限制(默认值为 1 GB)的语句输出到 [tidb-server 日志文件](/tidb-configuration-file.md#logfile)(默认文件为 "tidb.log")中,用于在语句执行结束前定位消耗系统资源多的查询语句(以下简称为 expensive query),帮助用户分析和解决语句执行的性能问题。

注意,expensive query 日志和[慢查询日志](/identify-slow-queries.md)的区别是,慢查询日志是在语句执行完后才打印,expensive query 日志可以将正在执行的语句的相关信息打印出来。当一条语句在执行过程中达到资源使用阈值时(执行时间/使用内存量),TiDB 会即时将这条语句的相关信息写入日志。

Expand Down
2 changes: 1 addition & 1 deletion non-transactional-dml.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ BATCH ON id LIMIT 2 DELETE /*+ USE_INDEX(t)*/ FROM t where v < 6;

非事务 DML 语句中,batch size 越大,拆分出来的 SQL 语句越少,每个 SQL 语句执行起来越慢。最优的 batch size 依据 workload 而定。根据经验值,推荐从 50000 开始尝试。过小和过大的 batch size 都会导致执行效率下降。

每个 batch 的信息存储在内存里,因此 batch 数量过多会显著增加内存消耗。这也是 batch size 不能过小的原因之一。非事务语句用于存储 batch 信息消耗的内存上限与 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 相同,超出这个限制时触发的操作由 [`oom-action`](/tidb-configuration-file.md#oom-action) 配置项控制
每个 batch 的信息存储在内存里,因此 batch 数量过多会显著增加内存消耗。这也是 batch size 不能过小的原因之一。非事务语句用于存储 batch 信息消耗的内存上限与 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 相同,超出这个限制时触发的操作由系统变量 [`tidb_mem_oom_action`](/system-variables.md#tidb_mem_oom_action-从-v610-版本开始引入) 控制

## 使用限制

Expand Down
2 changes: 1 addition & 1 deletion optimizer-hints.md
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 inner join t2 WHERE t1.id = t2.
SELECT /*+ MEMORY_QUOTA(1024 MB) */ * FROM t;
```

除了 Hint 外,系统变量 `tidb_mem_quota_query` 也能限制语句执行的内存使用。
除了 Hint 外,系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 也能限制语句执行的内存使用。

### READ_CONSISTENT_REPLICA()

Expand Down
2 changes: 1 addition & 1 deletion releases/release-4.0.10.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ TiDB 版本:4.0.10

+ Dumpling

- 修改默认设置的 `tidb_mem_quota_query` 的行为以避免 TiDB 内存溢出 [#233](https://github.com/pingcap/dumpling/pull/233)
- 修改默认设置的 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 的行为以避免 TiDB 内存溢出 [#233](https://github.com/pingcap/dumpling/pull/233)

+ Backup & Restore (BR)

Expand Down
2 changes: 1 addition & 1 deletion releases/release-5.0.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ TiDB 引入的 Raft Joint Consensus 算法将成员变更操作中的“添加

### 优化内存管理模块,降低系统 OOM 的风险

跟踪统计聚合函数的内存使用情况,系统默认开启该功能,开启后带有聚合函数的 SQL 语句在执行时,如果当前查询内存总的使用量超过 [`mem-quota-query`](/tidb-configuration-file.md#mem-quota-query) 阈值时,系统自动采用 [`oom-action`](/tidb-configuration-file.md#oom-action) 定义的相应操作。
跟踪统计聚合函数的内存使用情况,系统默认开启该功能,开启后带有聚合函数的 SQL 语句在执行时,如果当前查询内存总的使用量超过 `mem-quota-query` 阈值时,系统自动采用 `oom-action` 定义的相应操作。

### 提升系统在发生网络分区时的可用性

Expand Down
4 changes: 2 additions & 2 deletions releases/release-5.0.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ TiDB 版本:5.0.1

+ TiDB 配置文件

- [`committer-concurrency`](/tidb-configuration-file.md#committer-concurrency) 配置项的默认值由 16 改成 128。
- `committer-concurrency` 配置项的默认值由 16 改成 128。

## 改进提升

+ TiDB

- 支持 `VITESS_HASH()` 函数 [#23915](https://github.com/pingcap/tidb/pull/23915)

+ TiKV
Expand Down
Loading