diff --git a/configure-memory-usage.md b/configure-memory-usage.md index 01df8b446537..9b378d3e1a5f 100644 --- a/configure-memory-usage.md +++ b/configure-memory-usage.md @@ -109,7 +109,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-从-v630-版本开始引入)、[`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 落盘功能。 diff --git a/enable-disk-spill-encrypt.md b/enable-disk-spill-encrypt.md index 5fde11354890..e911a1e8b391 100644 --- a/enable-disk-spill-encrypt.md +++ b/enable-disk-spill-encrypt.md @@ -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-从-v630-版本开始引入) 为 `true` 时,如果单条 SQL 语句的内存使用超出系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 的限制,某些算子可以将执行时的中间结果作为临时文件落盘保存,直到查询执行完成之后将它们删除。 用户可以开启落盘文件加密功能,防止攻击者通过读取临时文件来访问数据。 diff --git a/explain-joins.md b/explain-joins.md index ce28e3653b8c..41759593fa10 100644 --- a/explain-joins.md +++ b/explain-joins.md @@ -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) 规定的值(默认为 1GB),且 [`tidb_enable_tmp_storage_on_oom`](/system-variables.md#tidb_enable_tmp_storage_on_oom-从-v630-版本开始引入) 的值为 `true` (默认为 `true`),那么 TiDB 会尝试使用临时存储,在磁盘上创建 Hash Join 的 Build 端。`EXPLAIN ANALYZE` 返回结果中的 `execution info` 一栏记录了有关内存使用情况等运行数据。下面的例子展示了 `tidb_mem_quota_query` 的值分别设为 1GB(默认)及 500MB 时,`EXPLAIN ANALYZE` 的返回结果(当内存配额设为 500MB 时,磁盘用作临时存储区): ```sql EXPLAIN ANALYZE SELECT /*+ HASH_JOIN(t1, t2) */ * FROM t1, t2 WHERE t1.id = t2.id; diff --git a/system-variables.md b/system-variables.md index a4b8ea833785..078de0dc8f04 100644 --- a/system-variables.md +++ b/system-variables.md @@ -914,7 +914,7 @@ 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) 一次,读数据的算子会停止一个线程。 -- 当读数据的算子只剩 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-从-v630-版本开始引入)。 ### `tidb_enable_slow_log` @@ -1418,6 +1418,15 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告) - 单位:秒 - 这个变量设置了查询 `METRIC_SCHEMA` 时生成的 Prometheus 语句的 step。 +### `tidb_enable_tmp_storage_on_oom` 从 v6.3.0 版本开始引入 + +- 作用域: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 时会自动继承原有设置。 + ### `tidb_multi_statement_mode` 从 v4.0.11 版本开始引入 - 作用域:SESSION | GLOBAL diff --git a/tidb-configuration-file.md b/tidb-configuration-file.md index ce681e11986d..490aee7d02e8 100644 --- a/tidb-configuration-file.md +++ b/tidb-configuration-file.md @@ -24,16 +24,11 @@ TiDB 配置文件比命令行参数支持更多的选项。你可以在 [config/ + 最大值(64 位平台):`18446744073709551615` + 最大值(32 位平台):`4294967295` -### `oom-use-tmp-storage` - -+ 设置是否在单条 SQL 语句的内存使用超出系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 限制时为某些算子启用临时磁盘。 -+ 默认值:true - ### `tmp-storage-path` + 单条 SQL 语句的内存使用超出系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 限制时,某些算子的临时磁盘存储位置。 + 默认值:`<操作系统临时文件夹>/<操作系统用户ID>_tidb/MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=/tmp-storage`。其中 `MC4wLjAuMDo0MDAwLzAuMC4wLjA6MTAwODA=` 是对 `:/:` 进行 `Base64` 编码的输出结果。 -+ 此配置仅在 `oom-use-tmp-storage` 为 true 时有效。 ++ 此配置仅在 [`tidb_enable_tmp_storage_on_oom`](/system-variables.md#tidb_enable_tmp_storage_on_oom-从-v630-版本开始引入) 为 true 时有效。 ### `tmp-storage-quota`