Skip to content

Commit

Permalink
fix: tidb_opt_fix_control is introduced in v6.5.3 (pingcap#16050)
Browse files Browse the repository at this point in the history
  • Loading branch information
Oreoxmt authored and benmaoer committed Jan 22, 2024
1 parent 893eaa2 commit 73be41a
Show file tree
Hide file tree
Showing 6 changed files with 11 additions and 11 deletions.
2 changes: 1 addition & 1 deletion control-execution-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ SQL 性能调优的前两个章节介绍了如何理解 TiDB 的执行计划以
- 但是使用 Hint 会侵入性地更改 SQL,在一些场景下并不能简单的插入 Hint。在[执行计划管理](/sql-plan-management.md)中,我们会介绍 TiDB 如何使用另一种语法来非侵入地控制执行计划的生成,同时还会介绍后台自动对执行计划进行演进的手段。该手段可用来减轻诸如版本升级等原因造成的执行计划不稳定和集群性能下降的问题。
- 最后在[优化规则及表达式下推的黑名单](/blocklist-control-plan.md)中,我们会介绍黑名单的使用。

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

# Optimizer Fix Controls
Expand All @@ -14,7 +14,7 @@ summary: 了解 Optimizer Fix Controls 以及如何使用 `tidb_opt_fix_control`

## `tidb_opt_fix_control` 介绍

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

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

Expand All @@ -26,13 +26,13 @@ SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON';

## Optimizer Fix Controls 参考

### [`44262`](https://github.com/pingcap/tidb/issues/44262) <span class="version-mark">从 v7.2.0 版本开始引入</span>
### [`44262`](https://github.com/pingcap/tidb/issues/44262) <span class="version-mark">从 v6.5.3 和 v7.2.0 版本开始引入</span>

- 默认值:`OFF`
- 可选值:`ON``OFF`
- 是否允许在缺少 [GlobalStats](/statistics.md#动态裁剪模式下的分区表统计信息) 的情况下使用[动态裁剪模式](/partitioned-table.md#动态裁剪模式)访问分区表。

### [`44389`](https://github.com/pingcap/tidb/issues/44389) <span class="version-mark">从 v7.2.0 版本开始引入</span>
### [`44389`](https://github.com/pingcap/tidb/issues/44389) <span class="version-mark">从 v6.5.3 和 v7.2.0 版本开始引入</span>

- 默认值:`OFF`
- 可选值:`ON``OFF`
Expand All @@ -44,13 +44,13 @@ SET SESSION tidb_opt_fix_control = '44262:ON,44389:ON';
- 可选值:`[0, 2147483647]`
- 为了节省内存,对于参数个数超过此开关指定个数的查询,Plan Cache 将不会缓存。`0` 表示无限制。

### [`44830`](https://github.com/pingcap/tidb/issues/44830) <span class="version-mark">从 v7.3.0 版本开始引入</span>
### [`44830`](https://github.com/pingcap/tidb/issues/44830) <span class="version-mark">从 v6.5.7 和 v7.3.0 版本开始引入</span>

- 默认值:`OFF`
- 可选值:`ON``OFF`
- 此开关控制是否让 Plan Cache 对在物理优化阶段形成的 `PointGet` 计划进行缓存。

### [`44855`](https://github.com/pingcap/tidb/issues/44855) <span class="version-mark">从 v7.3.0 版本开始引入</span>
### [`44855`](https://github.com/pingcap/tidb/issues/44855) <span class="version-mark">从 v6.5.4 和 v7.3.0 版本开始引入</span>

- 默认值:`OFF`
- 可选值:`ON``OFF`
Expand Down
2 changes: 1 addition & 1 deletion releases/release-7.1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ TiDB 7.1.0 为长期支持版本 (Long-Term Support Release, LTS)。
| [`tidb_enable_dist_task`](/system-variables.md#tidb_enable_dist_task-从-v710-版本开始引入) | 新增 | 控制是否开启分布式执行框架。开启分布式执行后,DDL、Import 等支持的分布式执行框架任务将会由集群中多个 TiDB 节点共同完成。该变量由 `tidb_ddl_distribute_reorg` 改名而来。|
| [`tidb_enable_non_prepared_plan_cache_for_dml`](/system-variables.md#tidb_enable_non_prepared_plan_cache_for_dml-从-v710-版本开始引入) | 新增 | 控制非 Prepare 语句执行计划缓存是否支持 DML 语句。 |
| [`tidb_enable_row_level_checksum`](/system-variables.md#tidb_enable_row_level_checksum-从-v710-版本开始引入) | 新增 | 控制是否开启 TiCDC 单行数据正确性校验。|
| [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v657-和-v710-版本开始引入) | 新增 | 通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 |
| [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v653-和-v710-版本开始引入) | 新增 | 通过设置该变量,你可以更细粒度地控制优化器的行为,并且避免集群升级后优化器行为变化导致的性能回退。 |
| [`tidb_plan_cache_invalidation_on_fresh_stats`](/system-variables.md#tidb_plan_cache_invalidation_on_fresh_stats-从-v710-版本开始引入) | 新增 | 控制当某张表上的统计信息更新后,与该表相关的 Plan Cache 是否自动失效。 |
| [`tidb_plan_cache_max_plan_size`](/system-variables.md#tidb_plan_cache_max_plan_size-从-v710-版本开始引入) | 新增 | 控制可以缓存的 Prepare 或非 Prepare 语句执行计划的最大大小。 |
| [`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-版本开始引入) 将不再生效。 |
Expand Down
2 changes: 1 addition & 1 deletion releases/release-7.2.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ TiDB 版本:7.2.0

为了生成更合理的执行计划,TiDB 优化器的行为会随产品迭代而不断演进。但在某些特定场景下,这些变化可能引发性能回退。因此 TiDB 引入了 Optimizer Fix Controls 来控制优化器的一部分细粒度行为,你可以对一些新的变化进行回滚或控制。

每一个可控的行为,都有一个与 Fix 号码对应的 GitHub Issue 进行说明。所有可控的行为列举在文档 [Optimizer Fix Controls](/optimizer-fix-controls.md) 中。通过设置系统变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v657-和-v710-版本开始引入) 可以为一个或多个行为设置目标值,进而达到行为控制的目的。
每一个可控的行为,都有一个与 Fix 号码对应的 GitHub Issue 进行说明。所有可控的行为列举在文档 [Optimizer Fix Controls](/optimizer-fix-controls.md) 中。通过设置系统变量 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v653-和-v710-版本开始引入) 可以为一个或多个行为设置目标值,进而达到行为控制的目的。

Optimizer Fix Controls 机制加强了你对 TiDB 优化器的细粒度管控能力,为升级过程引发的性能问题提供了新的修复手段,提升 TiDB 的稳定性。

Expand Down
2 changes: 1 addition & 1 deletion sql-non-prepared-plan-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ TiDB 对参数化后形式相同的查询,只能缓存一个计划。例如,
- 不支持 `ORDER BY` 或者 `GROUP BY` 后直接带数字或者表达式的查询,如 `ORDER BY 1``GROUP BY a+1`。仅支持 `ORDER BY column_name``GROUP BY column_name`
- 不支持过滤条件中包含 `JSON``ENUM``SET``BIT` 类型的列的查询,例如 `SELECT * FROM t WHERE json_col = '{}'`
- 不支持过滤条件中出现 `NULL` 值的查询,例如 `SELECT * FROM t WHERE a is NULL`
- 默认不支持参数化后参数个数超过 200 个的查询,例如 `SELECT * FROM t WHERE a in (1, 2, 3, ... 201)`。从 v7.3.0 开始,你可以通过在 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v657-和-v710-版本开始引入) 系统变量中设置 [`44823`](/optimizer-fix-controls.md#44823-从-v730-版本开始引入) 这个 Fix 来调整该限制。
- 默认不支持参数化后参数个数超过 200 个的查询,例如 `SELECT * FROM t WHERE a in (1, 2, 3, ... 201)`。从 v7.3.0 开始,你可以通过在 [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-从-v653-和-v710-版本开始引入) 系统变量中设置 [`44823`](/optimizer-fix-controls.md#44823-从-v730-版本开始引入) 这个 Fix 来调整该限制。
- 不支持访问分区表、虚拟列、临时表、视图、或内存表的查询,例如 `SELECT * FROM INFORMATION_SCHEMA.COLUMNS`,其中 `COLUMNS` 为 TiDB 内存表。
- 不支持带有 Hint 或有 Binding 的查询。
- 默认不支持 DML 语句或包含 `FOR UPDATE` 的查询语句。若要启用支持,你可以执行 `SET tidb_enable_non_prepared_plan_cache_for_dml = ON`
Expand Down
2 changes: 1 addition & 1 deletion system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -3390,7 +3390,7 @@ mysql> desc select count(distinct a) from test.t;
- 默认值:`OFF`
- 该变量控制非递归的[公共表表达式 (CTE)](/sql-statements/sql-statement-with.md) 是否可以在 TiFlash MPP 执行。默认情况下,未开启该变量时,CTE 在 TiDB 执行,相较于开启该功能,执行性能有较大差距。

### `tidb_opt_fix_control` <span class="version-mark">从 v6.5.7 和 v7.1.0 版本开始引入</span>
### `tidb_opt_fix_control` <span class="version-mark">从 v6.5.3 和 v7.1.0 版本开始引入</span>

- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
Expand Down

0 comments on commit 73be41a

Please sign in to comment.