Skip to content

Commit

Permalink
docs: suggest for analyze memory quota (pingcap#9690) (pingcap#9699)
Browse files Browse the repository at this point in the history
  • Loading branch information
ti-chi-bot authored Jun 7, 2022
1 parent c14e244 commit 4432cb8
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 12 deletions.
17 changes: 17 additions & 0 deletions statistics.md
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,23 @@ TiDB 支持持久化的配置项包括:
- GlobalStats 会使用表级别的持久化配置
- ANALYZE TABLE ... PARTITION ... WITH ... 所指定的分区配置会被忽略,且不会被持久化

### 统计信息收集的内存限制

> **警告:**
>
> 目前限制 ANALYZE 的内存使用量为实验特性,在生产环境中使用时可能存在内存统计有误差的情况。

TiDB 从 v6.1.0 开始引入了统计信息收集的内存限制,你可以通过 [`tidb_mem_quota_analyze`](/system-variables.md#tidb_mem_quota_analyze-从-v610-版本开始引入) 变量来控制 TiDB 更新统计信息时的最大总内存占用。

要合理地配置 `tidb_mem_quota_analyze` 值,你需要考虑集群的数据。在使用默认采样率的情况下,主要考虑列的数量、列上的值的大小,以及 TiDB 的内存配置。你可参考以下建议来配置变量的最大值和最小值:

> **注意:**
>
> 以下配置建议仅供参考,实际配置需要在真实场景中测试确定。

- 最小值:需要大于 TiDB 从集群上列最多的表收集统计信息时使用的最大内存。一个粗略的参考信息是,在测试集上,20 列的表在默认配置下,统计信息收集的最大内存使用约为 800 MiB;160 列的表在默认配置下,统计信息收集的最大内存使用约为 5 GiB。
- 最大值:需要小于集群在不进行统计信息收集时的内存空余量。

### 查看 ANALYZE 状态

在执行 `ANALYZE` 时,可以通过 SQL 语句来查看当前 `ANALYZE` 的状态。
Expand Down
28 changes: 16 additions & 12 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -407,18 +407,6 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数
- `tidb_auto_analyze_start_time='01:00 +0000'`
- `tidb_auto_analyze_end_time='03:00 +0000'`
### `tidb_mem_quota_analyze` <span class="version-mark">从 v6.1.0 版本开始引入</span>
- 作用域:GLOBAL
- 是否持久化到集群:是
- 默认值:`0`
- 单位:字节
- 这个变量用来控制 TiDB 更新统计信息时的最大总内存占用,包括用户执行的 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md) 和 TiDB 后台自动执行的统计信息更新任务。当总的内存占用超过这个阈值时,用户执行的 `ANALYZE` 会被终止退出,并通过错误信息提示用户尝试更小的采样率或稍后重试。如果 TiDB 后台自动执行的统计信息更新任务因内存超限而退出,且使用的采样率高于默认值,则会使用默认采样率重试一次。当该变量值为负数或零时,TiDB 不对更新统计信息的前后台任务进行内存限制。
> **注意:**
>
> 只有在 TiDB 的启动配置文件中开启了 `run-auto-analyze` 选项,该 TiDB 集群才会触发 `auto_analyze`
### `tidb_max_auto_analyze_time` <span class="version-mark">从 v6.1.0 版本开始引入</span>
- 作用域:GLOBAL
Expand Down Expand Up @@ -1313,6 +1301,22 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)
- 该变量默认值为 `CANCEL`,但在 TiDB v4.0.2 及之前的版本中,默认值为 `LOG`
-v6.1.0 之前这个开关通过 TiDB 配置文件 (`oom-action`) 进行配置,升级到 v6.1.0 时会自动继承原有设置。
### `tidb_mem_quota_analyze` <span class="version-mark">从 v6.1.0 版本开始引入</span>
> **警告:**
>
> 目前限制 ANALYZE 的内存使用量为实验特性,在生产环境中使用时可能存在内存统计有误差的情况。
- 作用域:GLOBAL
- 是否持久化到集群:是
- 默认值:`0`
- 单位:字节
- 这个变量用来控制 TiDB 更新统计信息时的最大总内存占用,包括用户执行的 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md) 和 TiDB 后台自动执行的统计信息更新任务。当总的内存占用超过这个阈值时,用户执行的 `ANALYZE` 会被终止退出,并通过错误信息提示用户尝试更小的采样率或稍后重试。如果 TiDB 后台自动执行的统计信息更新任务因内存超限而退出,且使用的采样率高于默认值,则会使用默认采样率重试一次。当该变量值为负数或零时,TiDB 不对更新统计信息的前后台任务进行内存限制。
> **注意:**
>
> 只有在 TiDB 的启动配置文件中开启了 `run-auto-analyze` 选项,该 TiDB 集群才会触发 `auto_analyze`
### `tidb_mem_quota_apply_cache` <span class="version-mark">从 v5.0 版本开始引入</span>
- 作用域:SESSION | GLOBAL
Expand Down

0 comments on commit 4432cb8

Please sign in to comment.