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
7 changes: 7 additions & 0 deletions system-variable-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -3992,6 +3992,13 @@ summary: 查看 TiDB 所有的系统变量,以及引用这些变量的文档
- [TiDB 7.1.6 Release Notes](/releases/release-7.1.6.md)
- [TiDB 6.5.0 Release Notes](/releases/release-6.5.0.md)

### tidb_ttl_enable_index_scan

引用该变量的文档:

- [使用 TTL (Time to Live) 定期删除过期数据](/time-to-live.md)
- [系统变量](/system-variables.md#tidb_ttl_enable_index_scan)

### tidb_ttl_job_enable

引用该变量的文档:
Expand Down
9 changes: 9 additions & 0 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -5835,6 +5835,15 @@ Query OK, 0 rows affected, 1 warning (0.00 sec)
- 范围:`[1, 256]`
- 这个变量用于设置每个 TiDB 节点上 TTL 删除任务的最大并发数。更多信息,请参考 [Time to Live](/time-to-live.md)。

### `tidb_ttl_enable_index_scan`

- 作用域:GLOBAL
- 是否持久化到集群:是
- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否
- 默认值:`ON`
- 类型:布尔型
- 这个变量用于控制 TTL 任务是否可以使用以 TTL 列开头且符合条件的二级索引或非聚簇主键索引。设置为 `OFF` 时,TTL 任务按照表键顺序扫描。有关索引适用条件,请参考[使用索引扫描过期行](/time-to-live.md#使用索引扫描过期行)。

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

- 作用域:GLOBAL
Expand Down
19 changes: 18 additions & 1 deletion time-to-live.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,23 @@ ALTER TABLE orders TTL_JOB_INTERVAL = '48h';

TiDB 还会在集群级别限制并发执行的 TTL 子任务数量。你可以通过修改系统变量 [`tidb_ttl_running_tasks`](/system-variables.md#tidb_ttl_running_tasks-从-v700-版本开始引入) 来设置最大并发数量。

### 使用索引扫描过期行

要使用索引扫描,TTL 列必须是索引的第一列。这样,TiDB 可以直接扫描可能包含过期行的索引范围,而不必扫描尚未过期的索引项。

默认情况下,TiDB 会自动选择一个符合条件的索引进行扫描。该行为由全局变量 [`tidb_ttl_enable_index_scan`](/system-variables.md#tidb_ttl_enable_index_scan) 控制,默认开启。当关闭该变量或没有符合条件的索引时,TiDB 会回退到按照表键顺序扫描,并阻止优化器为该扫描选择二级索引。对于使用聚簇主键的表,表键扫描会使用该聚簇主键。

除 TTL 列位于首位外,符合条件的索引还必须满足以下要求:

- 索引是可见的二级索引或非聚簇主键索引,且不是部分索引、全局索引、多值索引、向量搜索索引或全文索引。
- 每个索引列均索引完整的列值,不能使用前缀索引或表达式索引。
- 对于包含多列的唯一索引,除 TTL 列之外的其他列都为 `NOT NULL`。
- 非唯一索引满足以下要求:
- 索引包含全部主键列或完全不包含主键列,不能只包含复合主键中的部分列。
- 如果表的聚簇主键由单个无符号整数列组成,索引必须包含该主键列。
- 如果聚簇主键中的任意列指定了前缀长度,索引必须包含全部主键列。
- 索引列不能是 `SET`、`FLOAT` 或 `DOUBLE` 类型。对于不包含主键列的非唯一索引,主键列也不能是这些类型。

如果想禁止 TTL 任务的执行,除了可以设置表属性 `TTL_ENABLE='OFF'` 外,也可以通过设置全局变量 `tidb_ttl_job_enable` 关闭整个集群的 TTL 任务的执行。

```sql
Expand Down Expand Up @@ -193,7 +210,7 @@ TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关

列 `{last, current}_job_{start_time, finish_time, ttl_expire}` 分别描述了过去和当前 TTL 任务的开始时间、结束时间和过期时间。`last_job_summary` 列描述了上一次 TTL 任务的执行情况,包括总行数、成功行数、失败行数。

+ `mysql.tidb_ttl_task` 表中包含了正在执行的 TTL 子任务。单个 TTL 任务会被拆分为多个子任务,该表中记录了正在执行的这些子任务的信息。
+ `mysql.tidb_ttl_task` 表中包含了正在执行的 TTL 子任务。单个 TTL 任务会被拆分为多个子任务,该表中记录了正在执行的这些子任务的信息。`scan_index_id` 列表示创建任务时选择的扫描路径。非 `NULL` 值是所选索引的 ID,`NULL` 表示该子任务按照表键顺序扫描。
+ `mysql.tidb_ttl_job_history` 表中记录了 TTL 任务的执行历史。TTL 任务的历史记录将被保存 90 天。以一行为例:

```sql
Expand Down
Loading