Skip to content
Open
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
2 changes: 1 addition & 1 deletion best-practices/tidb-best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ TiDB 支持完整的二级索引,并且是全局索引,很多查询可以通

+ 通过索引保证结果顺序

索引除了可以用来过滤数据之外,还能用来对数据排序,首先按照索引的顺序获取行 ID,然后再按照行 ID 的返回顺序返回行的内容,这样可以保证返回结果按照索引列有序。前面提到了扫索引和获取 Row 之间是并行 + Pipeline 模式,如果要求按照索引的顺序返回 Row,那么这两次查询之间的并发度设置的太高并不会降低延迟,所以默认的并发度比较保守。可以通过 [tidb_index_serial_scan_concurrency](/system-variables.md#tidb_index_serial_scan_concurrency) 变量进行并发度调整
索引除了可以用来过滤数据之外,还能用来对数据排序,TiDB 首先按照索引的顺序获取行 ID,然后再按照这些行 ID 的顺序返回行的内容,这样可以保证返回结果按照索引列有序。前面提到了扫索引和获取 Row 之间是并行 + Pipeline 模式,如果要求按照索引的顺序返回 Row,那么这两次查询之间的并发度设置的太高并不会降低延迟,所以默认的并发度比较保守。可以通过调整 [`tidb_executor_concurrency`](/system-variables.md#tidb_executor_concurrency-new-in-v50) 来提高并发度

+ 逆序索引

Expand Down
2 changes: 1 addition & 1 deletion sql-statements/sql-statement-show-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ SHOW GLOBAL VARIABLES LIKE 'tidb%';
| tidb_backoff_weight | 2 |
| tidb_batch_commit | 0 |
| tidb_batch_delete | 0 |
| tidb_build_stats_concurrency | 4 |
| tidb_build_stats_concurrency | 2 |
| tidb_capture_plan_baselines | off |
| tidb_check_mb4_value_in_utf8 | 1 |
| tidb_checksum_table_concurrency | 4 |
Expand Down
20 changes: 13 additions & 7 deletions statistics.md
Original file line number Diff line number Diff line change
Expand Up @@ -688,23 +688,29 @@ mysql> SHOW WARNINGS;

#### `tidb_build_stats_concurrency`

`ANALYZE` 任务在执行时会被切分成一个个小任务,每个任务只负责某一个列或者索引的统计信息收集。你可以使用 [`tidb_build_stats_concurrency`](/system-variables.md#tidb_build_stats_concurrency) 控制可以同时执行的小任务的数量,其默认值是 `2`。TiDB v7.4.0 及其之前版本中,默认值为 `4`。
该变量控制手动收集统计信息时,构建统计信息的并发度,例如可以同时处理的表或分区的分析任务的数量。其默认值是 `2`。TiDB v7.4.0 及之前的版本中,其默认值为 `4`。

#### `tidb_build_sampling_stats_concurrency`

在执行 `ANALYZE` 普通列任务的时候,你可以使用 [`tidb_build_sampling_stats_concurrency`](/system-variables.md#tidb_build_sampling_stats_concurrency-从-v750-版本开始引入) 控制执行采样任务的并发数量,其默认值是 `2`。
该变量控制 `ANALYZE` 在以下方面的并发情况:

- 合并从不同 Region 收集的样本时的并发度。
- 针对特殊索引(例如基于生成虚拟列的索引)的并发度,例如 TiDB 可同时为多少个特殊索引收集统计信息。

其默认值为 `2`。

#### `tidb_analyze_partition_concurrency`

在执行 `ANALYZE` 任务的时候,你可以使用 [`tidb_analyze_partition_concurrency`](/system-variables.md#tidb_analyze_partition_concurrency) 控制对分区表统计信息进行读写的并发度,其默认值是 `2`。TiDB v7.4.0 及其之前版本中,默认值为 `1`。
该变量控制保存 `ANALYZE` 结果(将 TopN 和直方图写入系统表)的并发度。其默认值为 `2`。TiDB v7.4.0 及之前的版本中,其默认值为 `1`。

#### `tidb_distsql_scan_concurrency`
#### `tidb_analyze_distsql_scan_concurrency`

在执行 `ANALYZE` 普通列任务的时候,你可以使用 [`tidb_distsql_scan_concurrency`](/system-variables.md#tidb_distsql_scan_concurrency) 控制一次读取的 Region 数量,其默认值是 `15`。修改该变量的值会影响查询性能,请谨慎调整。
该变量控制 `ANALYZE` 在以下方面的并发情况:

#### `tidb_index_serial_scan_concurrency`
- 扫描 TiKV Region 的并发度。
- 为特殊索引(基于虚拟列生成的索引)扫描 Region 的并发度。

在执行 `ANALYZE` 索引列任务的时候,你可以使用 [`tidb_index_serial_scan_concurrency`](/system-variables.md#tidb_index_serial_scan_concurrency) 控制一次读取的 Region 数量,其默认值是 `1`。修改该变量的值会影响查询性能,请谨慎调整
其默认值为 `4`

## 另请参阅

Expand Down
32 changes: 21 additions & 11 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -1029,13 +1029,19 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数

### `tidb_analyze_distsql_scan_concurrency` <span class="version-mark">从 v7.6.0 版本开始引入</span>

> **注意:**
>
> 在 v7.6.0 之前的版本中,常规 `ANALYZE` 的 Region 扫描由 `tidb_distsql_scan_concurrency` 控制,而索引统计信息的扫描由 `tidb_index_serial_scan_concurrency` 控制。因此,对于这些版本,如需调整扫描 TiKV Region 的并发,可考虑修改 `tidb_distsql_scan_concurrency` 的值。

- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 类型:整数型
- 默认值:`4`
- 范围:`[0, 4294967295]`。在 v8.2.0 之前版本中,最小值为 `1`。当设置为 `0` 时,TiDB 会根据集群规模自适应调整并发度。
- 这个变量用来设置执行 `ANALYZE` 时 `scan` 操作的并发度。
- 这个变量控制 `ANALYZE` 在以下方面的并发情况:
- 扫描 TiKV Region 的并发度。
- 为特殊索引(例如,基于虚拟列生成的索引)扫描 Region 的并发度。

### `tidb_analyze_partition_concurrency`

Expand All @@ -1044,7 +1050,7 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 默认值:`2`。TiDB v7.4.0 及其之前版本默认值为 `1`。
- 范围:`[1, 128]`。在 v8.4.0 之前版本中,取值范围是 `[1, 18446744073709551615]`。
- 这个变量用于 TiDB analyze 分区表时,写入分区表统计信息的并发度
- 对于手动 `ANALYZE` 和自动 `ANALYZE`,该变量控制保存 `ANALYZE` 结果的并发度,包括将 TopN 和直方图写入系统表的并发度

### `tidb_analyze_version` <span class="version-mark">从 v5.1.0 版本开始引入</span>

Expand Down Expand Up @@ -1085,7 +1091,7 @@ mysql> SELECT @@tidb_analyze_skip_column_types;
+----------------------------------+
| @@tidb_analyze_skip_column_types |
+----------------------------------+
| json,blob,mediumblob,longblob |
| json,blob,mediumblob,longblob,mediumtext,longtext |
+----------------------------------+
1 row in set (0.00 sec)

Expand Down Expand Up @@ -1183,7 +1189,7 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
- 类型:整数型
- 默认值:`1`
- 范围:`[1, 256]`
- 这个变量用来设置执行统计信息自动更新的并发度
- 该变量控制自动收集统计信息时,构建统计信息的并发度,例如可以同时处理的表或分区的分析任务的数量

### `tidb_backoff_lock_fast`

Expand Down Expand Up @@ -1292,8 +1298,7 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
- 单位:线程
- 默认值:`2`。TiDB v7.4.0 及其之前版本默认值为 `4`。
- 取值范围:`[1, 256]`
- 这个变量用来设置 ANALYZE 语句执行时并发度。
- 当这个变量被设置得更大时,会对其它的查询语句执行性能产生一定影响。
- 该变量控制手动收集统计信息时,构建统计信息的并发度,例如可以同时处理的表或分区的分析任务的数量。

### `tidb_build_sampling_stats_concurrency` <span class="version-mark">从 v7.5.0 版本开始引入</span>

Expand All @@ -1304,8 +1309,9 @@ mysql> SELECT job_info FROM mysql.analyze_jobs ORDER BY end_time DESC LIMIT 1;
- 单位:线程
- 默认值:`2`
- 取值范围:`[1, 256]`
- 这个变量用来设置 `ANALYZE` 过程中的采样并发度。
- 当这个变量被设置得更大时,会对其它的查询语句执行性能产生一定影响。
- 这个变量控制 `ANALYZE` 在以下方面的并发情况:
- 合并从不同 Region 收集的样本的并发度。
- 针对特殊索引(例如,基于生成虚拟列的索引)的并发度,例如 TiDB 可同时为多少个特殊索引收集统计信息。

### `tidb_capture_plan_baselines` <span class="version-mark">从 v4.0 版本开始引入</span>

Expand Down Expand Up @@ -2760,7 +2766,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 类型:布尔型
- 默认值:`OFF`
- 该变量用于控制在悲观事务中,外键约束检查对父表中的行加锁时是否使用共享锁(而非排他锁)。开启后,多个并发事务可以同时对同一父表行执行外键检查而不互相阻塞,从而降低锁冲突并提升子表并发写入性能。
- 该变量用于控制在悲观事务中,外键约束检查对父表中的行加锁时是否使用共享锁(而非排他锁)。开启后,多个并发事务可以同时对同一父表行执行外键检查而不互相阻塞,从而降低锁冲突并提升子表并发写入性能。

### `tidb_gc_concurrency` <span class="version-mark">从 v5.0 版本开始引入</span>

Expand Down Expand Up @@ -3134,14 +3140,18 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)

### `tidb_index_serial_scan_concurrency`

> **警告:**
>
> 该变量已废弃,不再控制执行行为。顺序索引扫描目前可通过 [`tidb_executor_concurrency`](#tidb_executor_concurrency-new-in-v50) 控制并发度,而索引读取则可通过 [`ANALYZE TABLE`](/sql-statements/sql-statement-analyze-table.md) 的 [`tidb_analyze_distsql_scan_concurrency`](#tidb_analyze_distsql_scan_concurrency-new-in-v760) 控制并发度。

- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:是
- 类型:整数型
- 默认值:`1`
- 范围:`[1, 256]`
- 单位:线程
- 这个变量用来设置顺序 scan 操作的并发度,AP 类应用适合较大的值,TP 类应用适合较小的值
- 该变量仅为向后兼容而保留。你可以通过调整 [`tidb_executor_concurrency`](#tidb_executor_concurrency-new-in-v50) 控制顺序索引扫描并发度,或通过调整 [`tidb_analyze_distsql_scan_concurrency`](#tidb_analyze_distsql_scan_concurrency-new-in-v760) 调优索引统计信息收集

### `tidb_init_chunk_size`

Expand Down Expand Up @@ -3545,7 +3555,7 @@ v5.0 后,用户仍可以单独修改以上系统变量(会有废弃警告)
- 是否持久化到集群:是
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 默认值:`1`
- 这个变量用于 TiDB analyze 分区表时,对分区表统计信息进行合并时的并发度
- 这个变量控制合并分区表中 TopN 结果的并发度

### `tidb_enable_async_merge_global_stats` <span class="version-mark">从 v7.5.0 版本开始引入</span>

Expand Down
1 change: 0 additions & 1 deletion troubleshoot-tidb-oom.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ OOM 常见的故障现象包括(但不限于):

- 调小同时读取的 Region 的数量,或降低算子并发度,以避免因高并发导致的内存问题。对应的系统变量包括:
- [`tidb_distsql_scan_concurrency`](/system-variables.md#tidb_distsql_scan_concurrency)
- [`tidb_index_serial_scan_concurrency`](/system-variables.md#tidb_index_serial_scan_concurrency)
- [`tidb_executor_concurrency`](/system-variables.md#tidb_executor_concurrency-从-v50-版本开始引入)

- 问题发生时间附近,session 的并发度过高,此时可能需要添加节点进行扩容。
Expand Down
Loading