Skip to content

Commit 25dc945

Browse files
authored
update tidb_opt_fix_control for v6.5.7 (#15989) (#16016)
1 parent 1b6b5c7 commit 25dc945

5 files changed

+5
-5
lines changed

control-execution-plan.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ SQL 性能调优的前两个章节介绍了如何理解 TiDB 的执行计划以
1010
- 但是使用 Hint 会侵入性地更改 SQL,在一些场景下并不能简单的插入 Hint。在[执行计划管理](/sql-plan-management.md)中,我们会介绍 TiDB 如何使用另一种语法来非侵入地控制执行计划的生成,同时还会介绍后台自动对执行计划进行演进的手段。该手段可用来减轻诸如版本升级等原因造成的执行计划不稳定和集群性能下降的问题。
1111
- 最后在[优化规则及表达式下推的黑名单](/blocklist-control-plan.md)中,我们会介绍黑名单的使用。
1212

13-
除以上手段之外,执行计划还会被一部分系统变量所影响。通过在系统级或会话级对变量进行修改,能够控制执行计划的生成。自 v7.1.0 起,TiDB 引入了一个相对特殊的变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入)。这个变量能够接受多个控制项,用来更细粒度地控制优化器的行为,避免集群升级后优化器行为变化导致的性能回退。详细介绍请参考 [Optimizer Fix Controls](/optimizer-fix-controls.md)
13+
除以上手段之外,执行计划还会被一部分系统变量所影响。通过在系统级或会话级对变量进行修改,能够控制执行计划的生成。自 v7.1.0 起,TiDB 引入了一个相对特殊的变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v657-和-v710-版本开始引入)。这个变量能够接受多个控制项,用来更细粒度地控制优化器的行为,避免集群升级后优化器行为变化导致的性能回退。详细介绍请参考 [Optimizer Fix Controls](/optimizer-fix-controls.md)

optimizer-fix-controls.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ summary: 了解 Optimizer Fix Controls 以及如何使用 `tidb_opt_fix_control`
1414

1515
## `tidb_opt_fix_control` 介绍
1616

17-
从 TiDB v7.1.0 开始,提供了 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入) 系统变量来更细粒度地控制优化器的行为。
17+
从 TiDB v7.1.0 开始,提供了 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v657-和-v710-版本开始引入) 系统变量来更细粒度地控制优化器的行为。
1818

1919
一个 Fix 是用于调整 TiDB 优化器中一处行为的控制项。它以一个数字编号表示,该数字编号对应一个 GitHub Issue,在 Issue 中会有对技术细节的描述。例如 Fix `44262` 对应 [Issue 44262](https://github.com/pingcap/tidb/issues/44262)
2020

releases/release-7.1.0.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。
335335
| [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入) | 新增 | 控制是否开启分布式执行框架。开启分布式执行后,DDL、Import 等支持的后端任务将会由集群中多个 TiDB 节点共同完成。该变量由 `tidb_ddl_distribute_reorg` 改名而来。|
336336
| [`tidb_enable_non_prepared_plan_cache_for_dml`](/system-variables.md#tidb_enable_non_prepared_plan_cache_for_dml-从-v710-版本开始引入) | 新增 | 控制非 Prepare 语句执行计划缓存是否支持 DML 语句。 |
337337
| [`tidb_enable_row_level_checksum`](/system-variables.md#tidb_enable_row_level_checksum-从-v710-版本开始引入) | 新增 | 控制是否开启 TiCDC 单行数据正确性校验。|
338-
| [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入) | 新增 | 通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 |
338+
| [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v657-和-v710-版本开始引入) | 新增 | 通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 |
339339
| [`tidb_plan_cache_invalidation_on_fresh_stats`](/system-variables.md#tidb_plan_cache_invalidation_on_fresh_stats-从-v710-版本开始引入) | 新增 | 控制当某张表上的统计信息更新后,与该表相关的 Plan Cache 是否自动失效。 |
340340
| [`tidb_plan_cache_max_plan_size`](/system-variables.md#tidb_plan_cache_max_plan_size-从-v710-版本开始引入) | 新增 | 控制可以缓存的 Prepare 或非 Prepare 语句执行计划的最大大小。 |
341341
| [`tidb_prefer_broadcast_join_by_exchange_data_size`](/system-variables.md#tidb_prefer_broadcast_join_by_exchange_data_size-从-v710-版本开始引入) | 新增 | 控制是否使用最小网络数据交换策略。使用该策略时,TiDB 会估算 Broadcast Hash Join 和 Shuffled Hash Join 两种算法所需进行网络交换的数据量,并选择网络交换数据量较小的算法。该功能开启后,[`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_size-从-v50-版本开始引入) 和 [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-版本开始引入) 将不再生效。 |

sql-non-prepared-plan-cache.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ TiDB 对参数化后形式相同的查询,只能缓存一个计划。例如,
8888
- 不支持 `ORDER BY` 或者 `GROUP BY` 后直接带数字或者表达式的查询,如 `ORDER BY 1``GROUP BY a+1`。仅支持 `ORDER BY column_name``GROUP BY column_name`
8989
- 不支持过滤条件中包含 `JSON``ENUM``SET``BIT` 类型的列的查询,例如 `SELECT * FROM t WHERE json_col = '{}'`
9090
- 不支持过滤条件中出现 `NULL` 值的查询,例如 `SELECT * FROM t WHERE a is NULL`
91-
- 默认不支持参数化后参数个数超过 200 个的查询,例如 `SELECT * FROM t WHERE a in (1, 2, 3, ... 201)`。从 v7.1.1 开始,你可以通过 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v710-版本开始引入) 系统变量来调整该限制。
91+
- 默认不支持参数化后参数个数超过 200 个的查询,例如 `SELECT * FROM t WHERE a in (1, 2, 3, ... 201)`。从 v7.1.1 开始,你可以通过 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v657-和-v710-版本开始引入) 系统变量来调整该限制。
9292
- 不支持访问分区表、虚拟列、临时表、视图、或内存表的查询,例如 `SELECT * FROM INFORMATION_SCHEMA.COLUMNS`,其中 `COLUMNS` 为 TiDB 内存表。
9393
- 不支持带有 Hint 或有 Binding 的查询。
9494
- 默认不支持 DML 语句或包含 `FOR UPDATE` 的查询语句。若要启用支持,你可以执行 `SET tidb_enable_non_prepared_plan_cache_for_dml = ON`

system-variables.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2918,7 +2918,7 @@ mysql> desc select count(distinct a) from test.t;
29182918
- 这个变量用来控制是否启用 [TiFlash 延迟物化](/tiflash/tiflash-late-materialization.md)功能。注意在 TiFlash [Fast Scan 模式](/tiflash/use-fastscan.md)下,延迟物化功能暂不可用。
29192919
- 当设置该变量为 `OFF` 关闭 TiFlash 延迟物化功能时,如果 `SELECT` 语句中包含过滤条件(`WHERE` 子句),TiFlash 会先扫描查询所需列的全部数据后再进行过滤。当设置该变量为 `ON` 开启 TiFlash 延迟物化功能时,TiFlash 会先扫描下推到 TableScan 算子的过滤条件相关的列数据,过滤得到符合条件的行后,再扫描这些行的其他列数据,继续后续计算,从而减少 IO 扫描和数据处理的计算量。
29202920
2921-
### `tidb_opt_fix_control` <span class="version-mark">从 v7.1.0 版本开始引入</span>
2921+
### `tidb_opt_fix_control` <span class="version-mark">从 v6.5.7 和 v7.1.0 版本开始引入</span>
29222922
29232923
- 作用域:SESSION | GLOBAL
29242924
- 是否持久化到集群:是

0 commit comments

Comments
 (0)