From 9a76fe53ba804e0630ba66a95aa0ea2317c6eef8 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Wed, 23 Nov 2022 16:13:21 +0800 Subject: [PATCH 01/60] Add the doc for the TTL feature --- ttl-table.md | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 ttl-table.md diff --git a/ttl-table.md b/ttl-table.md new file mode 100644 index 000000000000..580323beb7d7 --- /dev/null +++ b/ttl-table.md @@ -0,0 +1,106 @@ +--- +title: TTL 支持 +summary: 介绍如何通过 SQL 来管理表数据的生命周期 +--- + +# TTL 支持 + +TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动删除过期的数据来防止存储空间的无限增长。此功能在一些场景很有用,比如:定期删除验证码记录等。 + +> **警告:** +> +> 当前该功能为实验特性,不建议在生产环境中使用。 + +## 语法 + +### 创建具有 TTL 属性的表 + +可以通过以下语句创建一个具有 TTL 属性的表: + +```sql +CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP +) TTL = `created_at` + INTERVAL 3 MONTH; +``` + +上面的例子创建了一张表 `t1`, 并指定了 `create_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 + +在创建表的时候,我们也可以额外设置 `TTL_ENABLE` 属性来开启/关闭清理过期数据的功能,比如: + + +```sql +CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP +) TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'; +``` + +如果 `TTL_ENABLE` 被设置成了 `OFF`,则即使设置了其他 TTL 选项,当前表也不会自动清理过期数据。在缺省条件下,`TTL_ENABLE` 被默认设置为 `ON`。 + +TTL 支持注释语法,比如对于上述语句也可以写作: + +```sql +CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP +) /*T![ttl] TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'*/; +``` + +### 修改表的 TTL 属性 + +支持通过 ALTER 语句修改表的 TTL 属性。比如: + +```sql +ALTER TABLE t1 TTL = `created_at` + INTERVAL 1 MONTH; +``` + +上面的语句即支持修改已有的 TTL 属性的表,也支持将一张非 TTL 的表设置为具有 TTL 属性的表。 + +对于 TTL 表,也可以单独修改 `TTL_ENABLE` 的值: + +```sql +ALTER TABLE t1 TTL_ENABLE = 'OFF'; +``` + +如果想清除一张表的所有 TTL 属性,则可以执行: + +``` +ALTER TABLE t1 REMOVE TTL; +``` + +## TTL 任务 + +对于每张设置了 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据。可以通过设置全局变量 `tidb_ttl_job_run_interval` 来自定义任务的执行周期,比如下面的例子里后台清理任务被设置为每 24 小时执行一次: + +``` +SET @@global.tidb_ttl_job_run_interval = '24h'; +``` + +如果想禁止 TTL 任务的执行,除了可以设置表属性 `TTL_ENABLE='OFF'` 外,也可以通过设置全局变量 `tidb_ttl_job_enable` 关闭整个集群的 TTL 任务的执行。 + +``` +SET @@global.tidb_ttl_job_enable = OFF; +``` + +在某些场景下,我们可能希望只允许在某个时间窗口内调度后台的 TTL 任务,此时可以设置全局变量 `tidb_ttl_job_schedule_window_start_time` 和 `tidb_ttl_job_schedule_window_end_time` 来指定时间窗口,比如: + +``` +SET @@global.tidb_ttl_job_schedule_window_start_time = '01:00 +0000'; +SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; +``` + +则只允许 UTC 时间的凌晨 1 点到 5 点调度 TTL 任务。默认情况下的时间窗口设置为 `00:00 +0000` 到 `23:59 +0000`,即允许所有时段的任务调度。 + +## 工具兼容性 + +作为实验特性,暂时不兼容包括 BR, Lightning, TiCDC 在内的数据导入导出以及同步工具。 + +## 使用限制 + +目前,TTL 特性具有以下限制: + +* 不允许在临时表上设置 TTL 属性,包括本地临时表和全局临时表。 +* 具有 TTL 属性的表不支持作为外键约束的主表被其他表引用。 +* 不保证所有过期数据立即被删除,过期数据被删除的时间取决于后台清理任务的调度周期和调度窗口。 +* 目前单个表的清理任务同时只能在一个 TiDB 节点运行,这在某些场景下(比如表特别大的情况)可能会产生性能瓶颈。此问题会在后续版本中优化。 From 7deb140107773fac5d15658da8a8effc1b12f993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Fri, 25 Nov 2022 14:16:28 +0800 Subject: [PATCH 02/60] Update ttl-table.md Co-authored-by: Ran --- ttl-table.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ttl-table.md b/ttl-table.md index 580323beb7d7..d37655d2c6fb 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -24,7 +24,7 @@ CREATE TABLE t1 ( ) TTL = `created_at` + INTERVAL 3 MONTH; ``` -上面的例子创建了一张表 `t1`, 并指定了 `create_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 +上面的例子创建了一张表 `t1`, 并指定了 `created_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 在创建表的时候,我们也可以额外设置 `TTL_ENABLE` 属性来开启/关闭清理过期数据的功能,比如: From b354be666ceab543c19454617ad7927e44607310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Fri, 25 Nov 2022 14:16:36 +0800 Subject: [PATCH 03/60] Update ttl-table.md Co-authored-by: Ran --- ttl-table.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ttl-table.md b/ttl-table.md index d37655d2c6fb..7ecc403169be 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -26,8 +26,7 @@ CREATE TABLE t1 ( 上面的例子创建了一张表 `t1`, 并指定了 `created_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 -在创建表的时候,我们也可以额外设置 `TTL_ENABLE` 属性来开启/关闭清理过期数据的功能,比如: - +在创建表的时候,你也可以额外设置 `TTL_ENABLE` 属性来开启或关闭清理过期数据的功能,比如: ```sql CREATE TABLE t1 ( From b6add50f112c27e84f02fd243b800a5773d11383 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 25 Nov 2022 14:20:48 +0800 Subject: [PATCH 04/60] update doc --- ttl-table.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ttl-table.md b/ttl-table.md index 7ecc403169be..0cbfd5aabe23 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -37,7 +37,7 @@ CREATE TABLE t1 ( 如果 `TTL_ENABLE` 被设置成了 `OFF`,则即使设置了其他 TTL 选项,当前表也不会自动清理过期数据。在缺省条件下,`TTL_ENABLE` 被默认设置为 `ON`。 -TTL 支持注释语法,比如对于上述语句也可以写作: +为了与 Mysql 兼容,TTL 也支持注释语法,比如对于上述语句也可以写作: ```sql CREATE TABLE t1 ( @@ -46,6 +46,8 @@ CREATE TABLE t1 ( ) /*T![ttl] TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'*/; ``` +在 TiDB 环境下,上述两个语句等价。在 Mysql 环境中,会自动忽略注释中的内容,并创建普通的表。 + ### 修改表的 TTL 属性 支持通过 ALTER 语句修改表的 TTL 属性。比如: From d6a962c27ad848e5d8cefda43b24b7d6f1923e7a Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 25 Nov 2022 17:45:41 +0800 Subject: [PATCH 05/60] add sysvar and update synatx tree --- sql-statements/sql-statement-alter-table.md | 5 + sql-statements/sql-statement-create-table.md | 1 + system-variables.md | 106 +++++++++++++++++++ 3 files changed, 112 insertions(+) diff --git a/sql-statements/sql-statement-alter-table.md b/sql-statements/sql-statement-alter-table.md index 0216b561c590..5b0506aa0bd1 100644 --- a/sql-statements/sql-statement-alter-table.md +++ b/sql-statements/sql-statement-alter-table.md @@ -49,6 +49,11 @@ AlterTableSpec ::= | 'SECONDARY_UNLOAD' | ( 'AUTO_INCREMENT' | 'AUTO_ID_CACHE' | 'AUTO_RANDOM_BASE' | 'SHARD_ROW_ID_BITS' ) EqOpt LengthNum | ( 'CACHE' | 'NOCACHE' ) +| ( + 'TTL' EqOpt TimeColumnName '+' 'INTERVAL' Expression TimeUnit (TTLEnable EqOpt ( 'ON' | 'OFF' ))? + | 'REMOVE' 'TTL' + | TTLEnable EqOpt ( 'ON' | 'OFF' ) + ) | PlacementPolicyOption PlacementPolicyOption ::= diff --git a/sql-statements/sql-statement-create-table.md b/sql-statements/sql-statement-create-table.md index 91f99e1d0c6e..234a9c951ac5 100644 --- a/sql-statements/sql-statement-create-table.md +++ b/sql-statements/sql-statement-create-table.md @@ -83,6 +83,7 @@ TableOption ::= | 'SECONDARY_ENGINE' EqOpt ( 'NULL' | StringName ) | 'UNION' EqOpt '(' TableNameListOpt ')' | 'ENCRYPTION' EqOpt EncryptionOpt +| 'TTL' EqOpt TimeColumnName '+' 'INTERVAL' Expression TimeUnit (TTLEnable EqOpt ( 'ON' | 'OFF' ))? | PlacementPolicyOption OnCommitOpt ::= diff --git a/system-variables.md b/system-variables.md index fe953b0646f4..2ca5e4c23613 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3155,6 +3155,112 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > > 如果 PD leader 的 TSO RPC 延迟升高,但其现象并非由 CPU 使用率达到瓶颈而导致(可能存在网络等问题),此时,调高 `tidb_tso_client_batch_max_wait_time` 可能会导致 TiDB 的语句执行延迟上升,影响集群的 QPS 表现。 +### `tidb_ttl_delete_rate_limit` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`0` +- 范围:`[0, 9223372036854775807]` +- 这个变量用来对每个节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许的最大的 DELETE 语句执行次数。当此变量设置为 `0` 时,则表示不做限制。 + +### `tidb_ttl_delete_batch_size` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`100` +- 范围:`[1, 10240]` +- 这个变量用于设置 TTL 任务中单个删除事务中的最大行数。 + +### `tidb_ttl_delete_worker_count` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`4` +- 范围:`[1, 1024]` +- 这个变量用于设置每个 TiDB 节点 TTL 删除任务的最大并发数。 + +### `tidb_ttl_job_enable` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:ON +- 可选值:`OFF`, `ON` +- 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止过期数据的清理。 + +### `tidb_ttl_scan_batch_size` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`500` +- 范围:`[1, 10240]` +- 这个变量用于设置 TTL 任务中用来扫描过期数据的每个 SELECT 语句的 LIMIT 的值。 + +### `tidb_ttl_scan_worker_count` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`4` +- 范围:`[1, 1024]` +- 这个变量用于设置每个 TiDB 节点 TTL 扫描任务的最大并发数。 + +### `tidb_ttl_job_run_interval` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`1h0m0s` +- 范围:`[10m0s, 8760h0m0s]` +- 这个变量用于控制 TTL 后台清理任务的调度周期。比如,如果当前值设置成了 `1h0m0s`,则代表每张设置了 TTL 属性的表或者分区会每小时清理一次过期数据。 + +### `tidb_ttl_job_schedule_window_start_time` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`00:00 +0000` +- 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。 + +### `tidb_ttl_job_schedule_window_end_time` 从 v6.5.0 版本开始引入 + +> **警告:** +> +> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 默认值:`23:59 +0000` +- 这个变量用于控制 TTL 后台清理任务的调度窗口的结束时间。 + ### `tidb_txn_assertion_level` 从 v6.0.0 版本开始引入 - 作用域:SESSION | GLOBAL From dff99855e20ea7d446cdc23ebb4b204546987bf2 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 28 Nov 2022 13:36:57 +0800 Subject: [PATCH 06/60] Apply suggestions from code review --- system-variables.md | 4 ++-- ttl-table.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/system-variables.md b/system-variables.md index 2ca5e4c23613..967105ee7947 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3199,7 +3199,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 -- 默认值:ON +- 默认值:`ON` - 可选值:`OFF`, `ON` - 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止过期数据的清理。 @@ -3213,7 +3213,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`500` - 范围:`[1, 10240]` -- 这个变量用于设置 TTL 任务中用来扫描过期数据的每个 SELECT 语句的 LIMIT 的值。 +- 这个变量用于设置 TTL 任务中用来扫描过期数据的每个 `SELECT` 语句的 `LIMIT` 的值。 ### `tidb_ttl_scan_worker_count` 从 v6.5.0 版本开始引入 diff --git a/ttl-table.md b/ttl-table.md index 0cbfd5aabe23..3bc7dc6c27f9 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -37,7 +37,7 @@ CREATE TABLE t1 ( 如果 `TTL_ENABLE` 被设置成了 `OFF`,则即使设置了其他 TTL 选项,当前表也不会自动清理过期数据。在缺省条件下,`TTL_ENABLE` 被默认设置为 `ON`。 -为了与 Mysql 兼容,TTL 也支持注释语法,比如对于上述语句也可以写作: +为了与 MySQL 兼容,TTL 也支持注释语法,比如对于上述语句也可以写作: ```sql CREATE TABLE t1 ( @@ -72,7 +72,7 @@ ALTER TABLE t1 REMOVE TTL; ## TTL 任务 -对于每张设置了 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据。可以通过设置全局变量 `tidb_ttl_job_run_interval` 来自定义任务的执行周期,比如下面的例子里后台清理任务被设置为每 24 小时执行一次: +对于每张设置了 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据。你可以通过设置全局变量 [`tidb_ttl_job_run_interval`](/system-variables.md#tidb_ttl_job_run_interval-从-v650-版本开始引入) 来自定义任务的执行周期,比如下面的例子里后台清理任务被设置为每 24 小时执行一次: ``` SET @@global.tidb_ttl_job_run_interval = '24h'; From d9e0fe6d81b343783c94c189ab8d81c036a5c60c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Tue, 29 Nov 2022 12:47:31 +0800 Subject: [PATCH 07/60] Update system-variables.md Co-authored-by: Ran --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 967105ee7947..53c2afc42c3e 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3165,7 +3165,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`0` - 范围:`[0, 9223372036854775807]` -- 这个变量用来对每个节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许的最大的 DELETE 语句执行次数。当此变量设置为 `0` 时,则表示不做限制。 +- 这个变量用来对每个节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许 `DELETE` 语句执行的最大次数。当此变量设置为 `0` 时,则表示不做限制。 ### `tidb_ttl_delete_batch_size` 从 v6.5.0 版本开始引入 From 7de8cd0d8752f7bf5dea96f23658b3cb66864f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Tue, 29 Nov 2022 12:47:39 +0800 Subject: [PATCH 08/60] Update system-variables.md Co-authored-by: Ran --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 53c2afc42c3e..74631a928925 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3200,7 +3200,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`ON` -- 可选值:`OFF`, `ON` +- 类型:布尔型 - 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止过期数据的清理。 ### `tidb_ttl_scan_batch_size` 从 v6.5.0 版本开始引入 From 6d70a0212e8523833c2dd2764b547a9301a879d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Tue, 29 Nov 2022 12:47:57 +0800 Subject: [PATCH 09/60] Update ttl-table.md Co-authored-by: Ran --- ttl-table.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ttl-table.md b/ttl-table.md index 3bc7dc6c27f9..ae4801fd208a 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -13,6 +13,8 @@ TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL ## 语法 +你可以通过 [`CREATE TABLE`](/sql-statements/sql-statement-create-table.md) 或 [`ALTER TABLE`](/sql-statements/sql-statement-alter-table.md) 语句来配置表的 TTL 功能。 + ### 创建具有 TTL 属性的表 可以通过以下语句创建一个具有 TTL 属性的表: From a21a0c90ce8528afab174780682db177d2ca230c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Tue, 29 Nov 2022 12:48:12 +0800 Subject: [PATCH 10/60] Update ttl-table.md Co-authored-by: Ran --- ttl-table.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ttl-table.md b/ttl-table.md index ae4801fd208a..5dbe374a6c1c 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -48,7 +48,7 @@ CREATE TABLE t1 ( ) /*T![ttl] TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'*/; ``` -在 TiDB 环境下,上述两个语句等价。在 Mysql 环境中,会自动忽略注释中的内容,并创建普通的表。 +在 TiDB 环境中,使用 Table Option 和注释来配置 TTL 是等价的。在 MySQL 环境中,会自动忽略注释中的内容,并创建普通的表。 ### 修改表的 TTL 属性 From 9ee8cb0b9faf981ef6987117820f52a709db2931 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Wed, 30 Nov 2022 14:05:16 +0800 Subject: [PATCH 11/60] update --- system-variables.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/system-variables.md b/system-variables.md index 2ca5e4c23613..e9a97c6f0cb6 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3246,6 +3246,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL +- 类型:时间 - 是否持久化到集群:是 - 默认值:`00:00 +0000` - 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。 @@ -3257,6 +3258,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL +- 类型:时间 - 是否持久化到集群:是 - 默认值:`23:59 +0000` - 这个变量用于控制 TTL 后台清理任务的调度窗口的结束时间。 From 695958746cb13fa827eaec6e4d4baac9b74e8d82 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Wed, 30 Nov 2022 14:10:43 +0800 Subject: [PATCH 12/60] update doc --- experimental-features.md | 1 + system-variables.md | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/experimental-features.md b/experimental-features.md index 00478135dcb7..76a05b7076f7 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -40,6 +40,7 @@ aliases: ['/docs-cn/dev/experimental-features-4.0/','/zh/tidb/dev/experimental-f + [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)(v6.3.0 实验特性) + [`AUTO_INCREMENT` MySQL 兼容模式](/auto-increment.md#mysql-兼容模式)(v6.4.0 实验特性) + [将集群的数据恢复到特定的时间点 `FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md)。(v6.4.0 实验特性) ++ [TTL 支持](/ttl-table.md)。(v6.5.1 实验特性) ## 存储 diff --git a/system-variables.md b/system-variables.md index c1d6aea6da20..8f06df6bb3f7 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3155,7 +3155,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > > 如果 PD leader 的 TSO RPC 延迟升高,但其现象并非由 CPU 使用率达到瓶颈而导致(可能存在网络等问题),此时,调高 `tidb_tso_client_batch_max_wait_time` 可能会导致 TiDB 的语句执行延迟上升,影响集群的 QPS 表现。 -### `tidb_ttl_delete_rate_limit` 从 v6.5.0 版本开始引入 +### `tidb_ttl_delete_rate_limit` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3167,7 +3167,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[0, 9223372036854775807]` - 这个变量用来对每个节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许 `DELETE` 语句执行的最大次数。当此变量设置为 `0` 时,则表示不做限制。 -### `tidb_ttl_delete_batch_size` 从 v6.5.0 版本开始引入 +### `tidb_ttl_delete_batch_size` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3179,7 +3179,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 10240]` - 这个变量用于设置 TTL 任务中单个删除事务中的最大行数。 -### `tidb_ttl_delete_worker_count` 从 v6.5.0 版本开始引入 +### `tidb_ttl_delete_worker_count` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3191,7 +3191,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 1024]` - 这个变量用于设置每个 TiDB 节点 TTL 删除任务的最大并发数。 -### `tidb_ttl_job_enable` 从 v6.5.0 版本开始引入 +### `tidb_ttl_job_enable` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3203,7 +3203,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 类型:布尔型 - 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止过期数据的清理。 -### `tidb_ttl_scan_batch_size` 从 v6.5.0 版本开始引入 +### `tidb_ttl_scan_batch_size` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3215,7 +3215,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 10240]` - 这个变量用于设置 TTL 任务中用来扫描过期数据的每个 `SELECT` 语句的 `LIMIT` 的值。 -### `tidb_ttl_scan_worker_count` 从 v6.5.0 版本开始引入 +### `tidb_ttl_scan_worker_count` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3227,7 +3227,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 1024]` - 这个变量用于设置每个 TiDB 节点 TTL 扫描任务的最大并发数。 -### `tidb_ttl_job_run_interval` 从 v6.5.0 版本开始引入 +### `tidb_ttl_job_run_interval` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3239,7 +3239,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[10m0s, 8760h0m0s]` - 这个变量用于控制 TTL 后台清理任务的调度周期。比如,如果当前值设置成了 `1h0m0s`,则代表每张设置了 TTL 属性的表或者分区会每小时清理一次过期数据。 -### `tidb_ttl_job_schedule_window_start_time` 从 v6.5.0 版本开始引入 +### `tidb_ttl_job_schedule_window_start_time` 从 v6.5.1 版本开始引入 > **警告:** > @@ -3251,7 +3251,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 默认值:`00:00 +0000` - 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。 -### `tidb_ttl_job_schedule_window_end_time` 从 v6.5.0 版本开始引入 +### `tidb_ttl_job_schedule_window_end_time` 从 v6.5.1 版本开始引入 > **警告:** > From 6f9013177107267b488ebfec7a8bd18e2403d388 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Wed, 30 Nov 2022 16:33:58 +0800 Subject: [PATCH 13/60] update worker size --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index 8f06df6bb3f7..15ce87f1e67d 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3188,7 +3188,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`4` -- 范围:`[1, 1024]` +- 范围:`[1, 256]` - 这个变量用于设置每个 TiDB 节点 TTL 删除任务的最大并发数。 ### `tidb_ttl_job_enable` 从 v6.5.1 版本开始引入 @@ -3224,7 +3224,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`4` -- 范围:`[1, 1024]` +- 范围:`[1, 256]` - 这个变量用于设置每个 TiDB 节点 TTL 扫描任务的最大并发数。 ### `tidb_ttl_job_run_interval` 从 v6.5.1 版本开始引入 From 3900eb4f6a598b0bbbd7d0610e36a8037a038d64 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 2 Dec 2022 10:59:30 +0800 Subject: [PATCH 14/60] update --- system-variables.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/system-variables.md b/system-variables.md index 15ce87f1e67d..8289d41350e8 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3155,7 +3155,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > > 如果 PD leader 的 TSO RPC 延迟升高,但其现象并非由 CPU 使用率达到瓶颈而导致(可能存在网络等问题),此时,调高 `tidb_tso_client_batch_max_wait_time` 可能会导致 TiDB 的语句执行延迟上升,影响集群的 QPS 表现。 -### `tidb_ttl_delete_rate_limit` 从 v6.5.1 版本开始引入 +### `tidb_ttl_delete_rate_limit` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3167,7 +3167,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[0, 9223372036854775807]` - 这个变量用来对每个节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许 `DELETE` 语句执行的最大次数。当此变量设置为 `0` 时,则表示不做限制。 -### `tidb_ttl_delete_batch_size` 从 v6.5.1 版本开始引入 +### `tidb_ttl_delete_batch_size` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3179,7 +3179,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 10240]` - 这个变量用于设置 TTL 任务中单个删除事务中的最大行数。 -### `tidb_ttl_delete_worker_count` 从 v6.5.1 版本开始引入 +### `tidb_ttl_delete_worker_count` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3191,7 +3191,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 256]` - 这个变量用于设置每个 TiDB 节点 TTL 删除任务的最大并发数。 -### `tidb_ttl_job_enable` 从 v6.5.1 版本开始引入 +### `tidb_ttl_job_enable` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3203,7 +3203,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 类型:布尔型 - 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止过期数据的清理。 -### `tidb_ttl_scan_batch_size` 从 v6.5.1 版本开始引入 +### `tidb_ttl_scan_batch_size` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3215,7 +3215,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 10240]` - 这个变量用于设置 TTL 任务中用来扫描过期数据的每个 `SELECT` 语句的 `LIMIT` 的值。 -### `tidb_ttl_scan_worker_count` 从 v6.5.1 版本开始引入 +### `tidb_ttl_scan_worker_count` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3227,7 +3227,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[1, 256]` - 这个变量用于设置每个 TiDB 节点 TTL 扫描任务的最大并发数。 -### `tidb_ttl_job_run_interval` 从 v6.5.1 版本开始引入 +### `tidb_ttl_job_run_interval` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3239,7 +3239,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 范围:`[10m0s, 8760h0m0s]` - 这个变量用于控制 TTL 后台清理任务的调度周期。比如,如果当前值设置成了 `1h0m0s`,则代表每张设置了 TTL 属性的表或者分区会每小时清理一次过期数据。 -### `tidb_ttl_job_schedule_window_start_time` 从 v6.5.1 版本开始引入 +### `tidb_ttl_job_schedule_window_start_time` 从 v6.5.0 版本开始引入 > **警告:** > @@ -3251,7 +3251,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 默认值:`00:00 +0000` - 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。 -### `tidb_ttl_job_schedule_window_end_time` 从 v6.5.1 版本开始引入 +### `tidb_ttl_job_schedule_window_end_time` 从 v6.5.0 版本开始引入 > **警告:** > From 7001e6194ef62eaed1be381ae0b1b6264f30deb3 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 2 Dec 2022 13:48:36 +0800 Subject: [PATCH 15/60] Apply suggestions from code review --- ttl-table.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ttl-table.md b/ttl-table.md index 5dbe374a6c1c..f9ca74020f45 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -5,7 +5,7 @@ summary: 介绍如何通过 SQL 来管理表数据的生命周期 # TTL 支持 -TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动删除过期的数据来防止存储空间的无限增长。此功能在一些场景很有用,比如:定期删除验证码记录等。 +TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动删除过期的数据来防止存储空间的无限增长。此功能在一些场景可以有效节省存储空间,比如定期删除验证码记录等。 > **警告:** > @@ -52,13 +52,13 @@ CREATE TABLE t1 ( ### 修改表的 TTL 属性 -支持通过 ALTER 语句修改表的 TTL 属性。比如: +支持通过 `ALTER TABLE` 语句修改表的 TTL 属性。比如: ```sql ALTER TABLE t1 TTL = `created_at` + INTERVAL 1 MONTH; ``` -上面的语句即支持修改已有的 TTL 属性的表,也支持将一张非 TTL 的表设置为具有 TTL 属性的表。 +上面的语句既支持修改已配置 TTL 属性的表,也支持将一张非 TTL 的表设置为具有 TTL 属性的表。 对于 TTL 表,也可以单独修改 `TTL_ENABLE` 的值: @@ -68,7 +68,7 @@ ALTER TABLE t1 TTL_ENABLE = 'OFF'; 如果想清除一张表的所有 TTL 属性,则可以执行: -``` +```sql ALTER TABLE t1 REMOVE TTL; ``` @@ -86,14 +86,14 @@ SET @@global.tidb_ttl_job_run_interval = '24h'; SET @@global.tidb_ttl_job_enable = OFF; ``` -在某些场景下,我们可能希望只允许在某个时间窗口内调度后台的 TTL 任务,此时可以设置全局变量 `tidb_ttl_job_schedule_window_start_time` 和 `tidb_ttl_job_schedule_window_end_time` 来指定时间窗口,比如: +在某些场景下,你可能希望只允许在某个时间窗口内调度后台的 TTL 任务,此时可以设置全局变量 [`tidb_ttl_job_schedule_window_start_time`](/system-variables.md#tidb_ttl_job_schedule_window_start_time-从-v650-版本开始引入) 和 [`tidb_ttl_job_schedule_window_end_time`](/system-variables.md#tidb_ttl_job_schedule_window_end_time-从-v650-版本开始引入) 来指定时间窗口,比如: ``` SET @@global.tidb_ttl_job_schedule_window_start_time = '01:00 +0000'; SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; ``` -则只允许 UTC 时间的凌晨 1 点到 5 点调度 TTL 任务。默认情况下的时间窗口设置为 `00:00 +0000` 到 `23:59 +0000`,即允许所有时段的任务调度。 +上述语句只允许在 UTC 时间的凌晨 1 点到 5 点调度 TTL 任务。默认情况下的时间窗口设置为 `00:00 +0000` 到 `23:59 +0000`,即允许所有时段的任务调度。 ## 工具兼容性 From 485c7651d599ceba9f083d2a62dd4313cfb0c7b8 Mon Sep 17 00:00:00 2001 From: Ran Date: Fri, 2 Dec 2022 13:52:21 +0800 Subject: [PATCH 16/60] refine languages in syntax example --- ttl-table.md | 82 ++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/ttl-table.md b/ttl-table.md index f9ca74020f45..c83698789a12 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -17,78 +17,78 @@ TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL ### 创建具有 TTL 属性的表 -可以通过以下语句创建一个具有 TTL 属性的表: +- 创建一个具有 TTL 属性的表: -```sql -CREATE TABLE t1 ( - id int PRIMARY KEY, - created_at TIMESTAMP -) TTL = `created_at` + INTERVAL 3 MONTH; -``` + ```sql + CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP + ) TTL = `created_at` + INTERVAL 3 MONTH; + ``` -上面的例子创建了一张表 `t1`, 并指定了 `created_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 + 上面的例子创建了一张表 `t1`, 并指定了 `created_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 -在创建表的时候,你也可以额外设置 `TTL_ENABLE` 属性来开启或关闭清理过期数据的功能,比如: +- 设置 `TTL_ENABLE` 属性来开启或关闭清理过期数据的功能: -```sql -CREATE TABLE t1 ( - id int PRIMARY KEY, - created_at TIMESTAMP -) TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'; -``` + ```sql + CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP + ) TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'; + ``` -如果 `TTL_ENABLE` 被设置成了 `OFF`,则即使设置了其他 TTL 选项,当前表也不会自动清理过期数据。在缺省条件下,`TTL_ENABLE` 被默认设置为 `ON`。 + 如果 `TTL_ENABLE` 被设置成了 `OFF`,则即使设置了其他 TTL 选项,当前表也不会自动清理过期数据。在缺省条件下,`TTL_ENABLE` 被默认设置为 `ON`。 -为了与 MySQL 兼容,TTL 也支持注释语法,比如对于上述语句也可以写作: +- 为了与 MySQL 兼容,你也可以使用注释语法来设置 TTL: -```sql -CREATE TABLE t1 ( - id int PRIMARY KEY, - created_at TIMESTAMP -) /*T![ttl] TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'*/; -``` + ```sql + CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP + ) /*T![ttl] TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'*/; + ``` -在 TiDB 环境中,使用 Table Option 和注释来配置 TTL 是等价的。在 MySQL 环境中,会自动忽略注释中的内容,并创建普通的表。 + 在 TiDB 环境中,使用 Table Option 和注释来配置 TTL 是等价的。在 MySQL 环境中,会自动忽略注释中的内容,并创建普通的表。 ### 修改表的 TTL 属性 -支持通过 `ALTER TABLE` 语句修改表的 TTL 属性。比如: +- 通过 `ALTER TABLE` 语句修改表的 TTL 属性: -```sql -ALTER TABLE t1 TTL = `created_at` + INTERVAL 1 MONTH; -``` + ```sql + ALTER TABLE t1 TTL = `created_at` + INTERVAL 1 MONTH; + ``` -上面的语句既支持修改已配置 TTL 属性的表,也支持将一张非 TTL 的表设置为具有 TTL 属性的表。 + 上面的语句既支持修改已配置 TTL 属性的表,也支持将一张非 TTL 的表设置为具有 TTL 属性的表。 -对于 TTL 表,也可以单独修改 `TTL_ENABLE` 的值: +- 单独修改 TTL 表的 `TTL_ENABLE` 值: -```sql -ALTER TABLE t1 TTL_ENABLE = 'OFF'; -``` + ```sql + ALTER TABLE t1 TTL_ENABLE = 'OFF'; + ``` -如果想清除一张表的所有 TTL 属性,则可以执行: +- 清除一张表的所有 TTL 属性: -```sql -ALTER TABLE t1 REMOVE TTL; -``` + ```sql + ALTER TABLE t1 REMOVE TTL; + ``` ## TTL 任务 对于每张设置了 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据。你可以通过设置全局变量 [`tidb_ttl_job_run_interval`](/system-variables.md#tidb_ttl_job_run_interval-从-v650-版本开始引入) 来自定义任务的执行周期,比如下面的例子里后台清理任务被设置为每 24 小时执行一次: -``` +```sql SET @@global.tidb_ttl_job_run_interval = '24h'; ``` -如果想禁止 TTL 任务的执行,除了可以设置表属性 `TTL_ENABLE='OFF'` 外,也可以通过设置全局变量 `tidb_ttl_job_enable` 关闭整个集群的 TTL 任务的执行。 +如果想禁止 TTL 任务的执行,除了可以设置表属性 `TTL_ENABLE='OFF'` 外,也可以通过设置全局变量 `tidb_ttl_job_enable` 关闭整个集群的 TTL 任务的执行。 -``` +```sql SET @@global.tidb_ttl_job_enable = OFF; ``` 在某些场景下,你可能希望只允许在某个时间窗口内调度后台的 TTL 任务,此时可以设置全局变量 [`tidb_ttl_job_schedule_window_start_time`](/system-variables.md#tidb_ttl_job_schedule_window_start_time-从-v650-版本开始引入) 和 [`tidb_ttl_job_schedule_window_end_time`](/system-variables.md#tidb_ttl_job_schedule_window_end_time-从-v650-版本开始引入) 来指定时间窗口,比如: -``` +```sql SET @@global.tidb_ttl_job_schedule_window_start_time = '01:00 +0000'; SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; ``` From 890baec9b6ad829665f4433ad800445038558c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Fri, 2 Dec 2022 14:03:23 +0800 Subject: [PATCH 17/60] Update system-variables.md Co-authored-by: Ran --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 8289d41350e8..773e540b0241 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3201,7 +3201,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`ON` - 类型:布尔型 -- 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止过期数据的清理。 +- 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止清理过期数据。 ### `tidb_ttl_scan_batch_size` 从 v6.5.0 版本开始引入 From 0f3c2de3ee235c2bf28ae8cd789812525b2cc76b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Fri, 2 Dec 2022 14:03:30 +0800 Subject: [PATCH 18/60] Update system-variables.md Co-authored-by: Ran --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 773e540b0241..113bc12251cb 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3189,7 +3189,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`4` - 范围:`[1, 256]` -- 这个变量用于设置每个 TiDB 节点 TTL 删除任务的最大并发数。 +- 这个变量用于设置每个 TiDB 节点上 TTL 删除任务的最大并发数。 ### `tidb_ttl_job_enable` 从 v6.5.0 版本开始引入 From 3f31766d425d8beb2416e0d35f3d350563a38d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Fri, 2 Dec 2022 14:03:39 +0800 Subject: [PATCH 19/60] Update system-variables.md Co-authored-by: Ran --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 113bc12251cb..b270d71218e2 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3177,7 +3177,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`100` - 范围:`[1, 10240]` -- 这个变量用于设置 TTL 任务中单个删除事务中的最大行数。 +- 这个变量用于设置 TTL 任务中单个删除事务中允许删除的最大行数。 ### `tidb_ttl_delete_worker_count` 从 v6.5.0 版本开始引入 From fea3824372215171c4e3da89ef54105468d6d5e6 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 2 Dec 2022 14:53:49 +0800 Subject: [PATCH 20/60] update --- TOC.md | 1 + system-variables.md | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/TOC.md b/TOC.md index b4a293d58d40..f4114c4fafde 100644 --- a/TOC.md +++ b/TOC.md @@ -38,6 +38,7 @@ - [更新数据](/develop/dev-guide-update-data.md) - [删除数据](/develop/dev-guide-delete-data.md) - [预处理语句](/develop/dev-guide-prepared-statement.md) + - [TTL 支持](/ttl-table.md) - 数据读取 - [单表读取](/develop/dev-guide-get-data-from-single-table.md) - [多表连接查询](/develop/dev-guide-join-tables.md) diff --git a/system-variables.md b/system-variables.md index 8289d41350e8..a981c322b77b 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3237,7 +3237,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`1h0m0s` - 范围:`[10m0s, 8760h0m0s]` -- 这个变量用于控制 TTL 后台清理任务的调度周期。比如,如果当前值设置成了 `1h0m0s`,则代表每张设置了 TTL 属性的表或者分区会每小时清理一次过期数据。 +- 这个变量用于控制 TTL 后台清理任务的调度周期。比如,如果当前值设置成了 `1h0m0s`,则代表每张设置了 TTL 属性的表会每小时清理一次过期数据。 ### `tidb_ttl_job_schedule_window_start_time` 从 v6.5.0 版本开始引入 @@ -3249,7 +3249,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 类型:时间 - 是否持久化到集群:是 - 默认值:`00:00 +0000` -- 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。 +- 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。请谨慎调整此参数,过小的窗口有可能会造成无法完成过期数据的清理。 ### `tidb_ttl_job_schedule_window_end_time` 从 v6.5.0 版本开始引入 @@ -3261,7 +3261,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 类型:时间 - 是否持久化到集群:是 - 默认值:`23:59 +0000` -- 这个变量用于控制 TTL 后台清理任务的调度窗口的结束时间。 +- 这个变量用于控制 TTL 后台清理任务的调度窗口的结束时间。请谨慎调整此参数,过小的窗口有可能会造成无法完成过期数据的清理。 ### `tidb_txn_assertion_level` 从 v6.0.0 版本开始引入 From 5753e23cda2477900e03d3f0c245e91313acc808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 10:46:54 +0800 Subject: [PATCH 21/60] Update ttl-table.md Co-authored-by: Feng Liyuan --- ttl-table.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ttl-table.md b/ttl-table.md index c83698789a12..ecb1cce35721 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -1,5 +1,5 @@ --- -title: TTL 支持 +title: Time to live (TTL) summary: 介绍如何通过 SQL 来管理表数据的生命周期 --- From 265328731963228607b59acea36e979318a90d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 10:47:07 +0800 Subject: [PATCH 22/60] Update ttl-table.md Co-authored-by: Feng Liyuan --- ttl-table.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ttl-table.md b/ttl-table.md index ecb1cce35721..57bbae57ebf6 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -3,7 +3,7 @@ title: Time to live (TTL) summary: 介绍如何通过 SQL 来管理表数据的生命周期 --- -# TTL 支持 +# Time to live (TTL) TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动删除过期的数据来防止存储空间的无限增长。此功能在一些场景可以有效节省存储空间,比如定期删除验证码记录等。 From d83588e66308bac65758a4aaf99d98a9a33867c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 10:47:25 +0800 Subject: [PATCH 23/60] Update ttl-table.md Co-authored-by: Feng Liyuan --- ttl-table.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ttl-table.md b/ttl-table.md index 57bbae57ebf6..daa81517f793 100644 --- a/ttl-table.md +++ b/ttl-table.md @@ -5,7 +5,13 @@ summary: 介绍如何通过 SQL 来管理表数据的生命周期 # Time to live (TTL) -TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动删除过期的数据来防止存储空间的无限增长。此功能在一些场景可以有效节省存储空间,比如定期删除验证码记录等。 +TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动检查并删除过期的行数据。此功能在一些场景可以有效节省存储空间、提升性能。一些常见的使用场景: + +* 定期删除验证码、短网址记录 +* 定期删除不需要的历史订单 +* 自动删除计算的中间结果 + +TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户周期性且及时地清理不需要的数据。TTL 并不保证所有过期数据立即被删除,过期数据被删除的时间取决于后台清理任务的调度周期和调度窗口。 > **警告:** > From 69f687c5f3d99762345290df2b43b4d88c411f50 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Mon, 5 Dec 2022 10:49:15 +0800 Subject: [PATCH 24/60] update --- ttl-table.md => ttl-time-to-live.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ttl-table.md => ttl-time-to-live.md (100%) diff --git a/ttl-table.md b/ttl-time-to-live.md similarity index 100% rename from ttl-table.md rename to ttl-time-to-live.md From ea3b8e3a30868e644e512b5d43f85128c0e7dd57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 11:04:58 +0800 Subject: [PATCH 25/60] Update TOC.md Co-authored-by: Feng Liyuan --- TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TOC.md b/TOC.md index f4114c4fafde..8e578ba96839 100644 --- a/TOC.md +++ b/TOC.md @@ -38,7 +38,7 @@ - [更新数据](/develop/dev-guide-update-data.md) - [删除数据](/develop/dev-guide-delete-data.md) - [预处理语句](/develop/dev-guide-prepared-statement.md) - - [TTL 支持](/ttl-table.md) + - [Time to live (TTL)](/ttl-table.md) - 数据读取 - [单表读取](/develop/dev-guide-get-data-from-single-table.md) - [多表连接查询](/develop/dev-guide-join-tables.md) From 88be9aaae520b250471e775f3daf5fec8dbf6e93 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 5 Dec 2022 14:05:50 +0800 Subject: [PATCH 26/60] modify filename --- TOC.md | 2 +- ttl-time-to-live.md => time-to-live.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename ttl-time-to-live.md => time-to-live.md (94%) diff --git a/TOC.md b/TOC.md index 8e578ba96839..0bc6acfe7251 100644 --- a/TOC.md +++ b/TOC.md @@ -38,7 +38,7 @@ - [更新数据](/develop/dev-guide-update-data.md) - [删除数据](/develop/dev-guide-delete-data.md) - [预处理语句](/develop/dev-guide-prepared-statement.md) - - [Time to live (TTL)](/ttl-table.md) + - [Time to Live](/time-to-live.md) - 数据读取 - [单表读取](/develop/dev-guide-get-data-from-single-table.md) - [多表连接查询](/develop/dev-guide-join-tables.md) diff --git a/ttl-time-to-live.md b/time-to-live.md similarity index 94% rename from ttl-time-to-live.md rename to time-to-live.md index daa81517f793..8f418d0f59da 100644 --- a/ttl-time-to-live.md +++ b/time-to-live.md @@ -1,11 +1,11 @@ --- -title: Time to live (TTL) +title: Time to Live summary: 介绍如何通过 SQL 来管理表数据的生命周期 --- -# Time to live (TTL) +# Time to Live -TTL 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动检查并删除过期的行数据。此功能在一些场景可以有效节省存储空间、提升性能。一些常见的使用场景: +Time to Live (TTL) 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动检查并删除过期的行数据。此功能在一些场景可以有效节省存储空间、提升性能。一些常见的使用场景: * 定期删除验证码、短网址记录 * 定期删除不需要的历史订单 From a5e78e47d615902212d7dd6798890bbeedef7ac4 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 5 Dec 2022 14:11:50 +0800 Subject: [PATCH 27/60] fix lint --- experimental-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental-features.md b/experimental-features.md index 76a05b7076f7..7356160e72f1 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -40,7 +40,7 @@ aliases: ['/docs-cn/dev/experimental-features-4.0/','/zh/tidb/dev/experimental-f + [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)(v6.3.0 实验特性) + [`AUTO_INCREMENT` MySQL 兼容模式](/auto-increment.md#mysql-兼容模式)(v6.4.0 实验特性) + [将集群的数据恢复到特定的时间点 `FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md)。(v6.4.0 实验特性) -+ [TTL 支持](/ttl-table.md)。(v6.5.1 实验特性) ++ [TTL 支持](/time-to-live.md)。(v6.5.0 实验特性) ## 存储 From 3a63dc96c11dbd4f8cedcbfa82ad8fa81bd8c477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:44:48 +0800 Subject: [PATCH 28/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 8f418d0f59da..1c301b7774e7 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -58,7 +58,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 ### 修改表的 TTL 属性 -- 通过 `ALTER TABLE` 语句修改表的 TTL 属性: +- 修改表的 TTL 属性: ```sql ALTER TABLE t1 TTL = `created_at` + INTERVAL 1 MONTH; From a7c053b78a5254ed5dd689304e0014b3df9b855f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:44:55 +0800 Subject: [PATCH 29/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 1c301b7774e7..fa7b258eef2a 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -54,7 +54,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 ) /*T![ttl] TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'*/; ``` - 在 TiDB 环境中,使用 Table Option 和注释来配置 TTL 是等价的。在 MySQL 环境中,会自动忽略注释中的内容,并创建普通的表。 + 在 TiDB 环境中,使用表的 TTL 属性和注释语法来配置 TTL 是等价的。在 MySQL 环境中,会自动忽略注释中的内容,并创建普通的表。 ### 修改表的 TTL 属性 From 1eb231fc0eb51118c54ef68ecf6210b6bd1f6990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:45:05 +0800 Subject: [PATCH 30/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index fa7b258eef2a..3f8cf98b8c59 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -103,7 +103,7 @@ SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; ## 工具兼容性 -作为实验特性,暂时不兼容包括 BR, Lightning, TiCDC 在内的数据导入导出以及同步工具。 +作为实验特性,TTL 特性暂时不兼容包括 BR、TiDB Lightning、TiCDC 在内的数据导入导出以及同步工具。 ## 使用限制 From 45a46e1a67dea785712ceaf3a10636011b5471c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:45:28 +0800 Subject: [PATCH 31/60] Update system-variables.md Co-authored-by: Grace Cai --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 677fabd4136a..9aa2e1824d48 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3261,7 +3261,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 类型:时间 - 是否持久化到集群:是 - 默认值:`23:59 +0000` -- 这个变量用于控制 TTL 后台清理任务的调度窗口的结束时间。请谨慎调整此参数,过小的窗口有可能会造成无法完成过期数据的清理。 +- 这个变量用于控制 TTL 后台清理任务的调度窗口的结束时间。请谨慎调整此参数,过小的窗口有可能会造成过期数据的清理无法完成。 ### `tidb_txn_assertion_level` 从 v6.0.0 版本开始引入 From b3dd69436368d1f7d83f658980e1946bfee88568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:45:40 +0800 Subject: [PATCH 32/60] Update system-variables.md Co-authored-by: Grace Cai --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 9aa2e1824d48..577279de66ca 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3249,7 +3249,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 类型:时间 - 是否持久化到集群:是 - 默认值:`00:00 +0000` -- 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。请谨慎调整此参数,过小的窗口有可能会造成无法完成过期数据的清理。 +- 这个变量用于控制 TTL 后台清理任务的调度窗口的起始时间。请谨慎调整此参数,过小的窗口有可能会造成过期数据的清理无法完成。 ### `tidb_ttl_job_schedule_window_end_time` 从 v6.5.0 版本开始引入 From 961c83e74284beeb4d4ce7d9cefaa9557ffcf6b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:45:54 +0800 Subject: [PATCH 33/60] Update system-variables.md Co-authored-by: Grace Cai --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 577279de66ca..9c3294f1b4fc 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3165,7 +3165,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`0` - 范围:`[0, 9223372036854775807]` -- 这个变量用来对每个节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许 `DELETE` 语句执行的最大次数。当此变量设置为 `0` 时,则表示不做限制。 +- 这个变量用来对每个 TiDB 节点的 TTL 删除操作进行限流。其值代表了在 TTL 任务中单个节点每秒允许 `DELETE` 语句执行的最大次数。当此变量设置为 `0` 时,则表示不做限制。 ### `tidb_ttl_delete_batch_size` 从 v6.5.0 版本开始引入 From 8e83b251661a7514f372e63acfd1e93c6caa3a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:46:25 +0800 Subject: [PATCH 34/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 3f8cf98b8c59..b3af01a7928d 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -64,7 +64,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 ALTER TABLE t1 TTL = `created_at` + INTERVAL 1 MONTH; ``` - 上面的语句既支持修改已配置 TTL 属性的表,也支持将一张非 TTL 的表设置为具有 TTL 属性的表。 + 上面的语句既支持修改已配置 TTL 属性的表,也支持为一张非 TTL 的表添加 TTL 属性。 - 单独修改 TTL 表的 `TTL_ENABLE` 值: From 693ab902c99212804e8c60f601e57a2560743412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:47:14 +0800 Subject: [PATCH 35/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index b3af01a7928d..60002ced1a75 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -43,7 +43,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 ) TTL = `created_at` + INTERVAL 3 MONTH TTL_ENABLE = 'OFF'; ``` - 如果 `TTL_ENABLE` 被设置成了 `OFF`,则即使设置了其他 TTL 选项,当前表也不会自动清理过期数据。在缺省条件下,`TTL_ENABLE` 被默认设置为 `ON`。 + 如果 `TTL_ENABLE` 被设置成了 `OFF`,则即使设置了其他 TTL 选项,当前表也不会自动清理过期数据。对于一个设置了 TTL 属性的表,`TTL_ENABLE` 在缺省条件下默认为 `ON`。 - 为了与 MySQL 兼容,你也可以使用注释语法来设置 TTL: From d982e3c3f6a82197d5debccaad39cefcbb582525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:51:01 +0800 Subject: [PATCH 36/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 60002ced1a75..0c2bae844ede 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -5,7 +5,9 @@ summary: 介绍如何通过 SQL 来管理表数据的生命周期 # Time to Live -Time to Live (TTL) 提供了行级别的生命周期控制策略。在 TiDB 中,设置了 TTL 属性的表会根据配置自动检查并删除过期的行数据。此功能在一些场景可以有效节省存储空间、提升性能。一些常见的使用场景: +Time to Live (TTL) 提供了行级别的生命周期控制策略。通过为表设置 TTL 属性,TiDB 可以在不影响在线读写负载的前提下,周期性地自动检查并清理表中的过期数据。此功能在一些场景可以有效节省存储空间、提升性能。 + +TTL 常见的使用场景: * 定期删除验证码、短网址记录 * 定期删除不需要的历史订单 From decbeed4ad3d6c102ced041abd15ea2f481d34db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:52:45 +0800 Subject: [PATCH 37/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 0c2bae844ede..6e63fd4f279e 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -94,7 +94,7 @@ SET @@global.tidb_ttl_job_run_interval = '24h'; SET @@global.tidb_ttl_job_enable = OFF; ``` -在某些场景下,你可能希望只允许在某个时间窗口内调度后台的 TTL 任务,此时可以设置全局变量 [`tidb_ttl_job_schedule_window_start_time`](/system-variables.md#tidb_ttl_job_schedule_window_start_time-从-v650-版本开始引入) 和 [`tidb_ttl_job_schedule_window_end_time`](/system-variables.md#tidb_ttl_job_schedule_window_end_time-从-v650-版本开始引入) 来指定时间窗口,比如: +在某些场景下,你可能希望只允许在每天的某个时间段内调度后台的 TTL 任务,此时可以设置全局变量 [`tidb_ttl_job_schedule_window_start_time`](/system-variables.md#tidb_ttl_job_schedule_window_start_time-从-v650-版本开始引入) 和 [`tidb_ttl_job_schedule_window_end_time`](/system-variables.md#tidb_ttl_job_schedule_window_end_time-从-v650-版本开始引入) 来指定时间窗口,比如: ```sql SET @@global.tidb_ttl_job_schedule_window_start_time = '01:00 +0000'; From d23f9fb1898c595615741d8ff085bf1e7a201985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Mon, 5 Dec 2022 17:52:55 +0800 Subject: [PATCH 38/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 6e63fd4f279e..aba2aac0c350 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -82,7 +82,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 ## TTL 任务 -对于每张设置了 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据。你可以通过设置全局变量 [`tidb_ttl_job_run_interval`](/system-variables.md#tidb_ttl_job_run_interval-从-v650-版本开始引入) 来自定义任务的执行周期,比如下面的例子里后台清理任务被设置为每 24 小时执行一次: +对于每张设置了 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据。你可以通过设置全局变量 [`tidb_ttl_job_run_interval`](/system-variables.md#tidb_ttl_job_run_interval-从-v650-版本开始引入) 来自定义任务的执行周期,比如通过下面的语句将后台清理任务设置为每 24 小时执行一次: ```sql SET @@global.tidb_ttl_job_run_interval = '24h'; From 15582602dfcca21833e31975c4f630e1e71353a8 Mon Sep 17 00:00:00 2001 From: Feng Liyuan Date: Tue, 6 Dec 2022 17:46:48 +0800 Subject: [PATCH 39/60] Apply suggestions from code review --- time-to-live.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/time-to-live.md b/time-to-live.md index aba2aac0c350..6c1d9f0c410c 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -5,7 +5,7 @@ summary: 介绍如何通过 SQL 来管理表数据的生命周期 # Time to Live -Time to Live (TTL) 提供了行级别的生命周期控制策略。通过为表设置 TTL 属性,TiDB 可以在不影响在线读写负载的前提下,周期性地自动检查并清理表中的过期数据。此功能在一些场景可以有效节省存储空间、提升性能。 +Time to Live (TTL) 提供了行级别的生命周期控制策略。通过为表设置 TTL 属性,TiDB 可以周期性地自动检查并清理表中的过期数据。此功能在一些场景可以有效节省存储空间、提升性能。 TTL 常见的使用场景: @@ -13,7 +13,7 @@ TTL 常见的使用场景: * 定期删除不需要的历史订单 * 自动删除计算的中间结果 -TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户周期性且及时地清理不需要的数据。TTL 并不保证所有过期数据立即被删除,过期数据被删除的时间取决于后台清理任务的调度周期和调度窗口。 +TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户周期性且及时地清理不需要的数据。TTL 会以表为单位,并发地分发不同的任务到不同的 tidb-server 节点上,进行并行删除处理。TTL 并不保证所有过期数据立即被删除,也就是说即使数据过期了,客户端仍然有可能在这之后的一段时间内读到过期的数据,直到其真正的被后台处理任务删除。 > **警告:** > From 3d9d0da73cb56b2ba264dfab9ad512a628716349 Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 6 Dec 2022 18:04:57 +0800 Subject: [PATCH 40/60] Apply suggestions from code review Co-authored-by: Grace Cai --- system-variables.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/system-variables.md b/system-variables.md index 9c3294f1b4fc..3cddfa2ca6ab 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3159,7 +3159,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 是否持久化到集群:是 @@ -3171,7 +3171,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 是否持久化到集群:是 @@ -3183,7 +3183,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 是否持久化到集群:是 @@ -3195,7 +3195,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 是否持久化到集群:是 @@ -3207,7 +3207,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 是否持久化到集群:是 @@ -3219,7 +3219,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 是否持久化到集群:是 @@ -3231,7 +3231,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 是否持久化到集群:是 @@ -3243,7 +3243,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 类型:时间 @@ -3255,7 +3255,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **警告:** > -> TTL 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 +> [TTL](/time-to-live.md) 目前为实验性特性,此变量定义可能在之后发生变化或者删除。 - 作用域:GLOBAL - 类型:时间 From cba6bf1b3797ecb23486b662a63aa968f1f765e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Thu, 8 Dec 2022 10:05:57 +0800 Subject: [PATCH 41/60] Update time-to-live.md Co-authored-by: Feng Liyuan --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 6c1d9f0c410c..bf3d55aee93d 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -3,7 +3,7 @@ title: Time to Live summary: 介绍如何通过 SQL 来管理表数据的生命周期 --- -# Time to Live +# 使用 TTL (Time to Live) 来周期性地删除过期数据 Time to Live (TTL) 提供了行级别的生命周期控制策略。通过为表设置 TTL 属性,TiDB 可以周期性地自动检查并清理表中的过期数据。此功能在一些场景可以有效节省存储空间、提升性能。 From 03d497e26c559d693d385ee4ca5fc88f21d2ed80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Thu, 8 Dec 2022 10:06:08 +0800 Subject: [PATCH 42/60] Update TOC.md Co-authored-by: Feng Liyuan --- TOC.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TOC.md b/TOC.md index 0bc6acfe7251..9b44889efd74 100644 --- a/TOC.md +++ b/TOC.md @@ -37,8 +37,8 @@ - [插入数据](/develop/dev-guide-insert-data.md) - [更新数据](/develop/dev-guide-update-data.md) - [删除数据](/develop/dev-guide-delete-data.md) + - [使用 TTL (Time to Live) 来周期性地删除过期数据](/time-to-live.md) - [预处理语句](/develop/dev-guide-prepared-statement.md) - - [Time to Live](/time-to-live.md) - 数据读取 - [单表读取](/develop/dev-guide-get-data-from-single-table.md) - [多表连接查询](/develop/dev-guide-join-tables.md) From 6d22473aae4ef85a143311d5567cdd970a392b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Thu, 8 Dec 2022 10:06:20 +0800 Subject: [PATCH 43/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index bf3d55aee93d..52fe1c95166a 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -114,4 +114,4 @@ SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; * 不允许在临时表上设置 TTL 属性,包括本地临时表和全局临时表。 * 具有 TTL 属性的表不支持作为外键约束的主表被其他表引用。 * 不保证所有过期数据立即被删除,过期数据被删除的时间取决于后台清理任务的调度周期和调度窗口。 -* 目前单个表的清理任务同时只能在一个 TiDB 节点运行,这在某些场景下(比如表特别大的情况)可能会产生性能瓶颈。此问题会在后续版本中优化。 +* 目前单个表的清理任务同时只能在同一个 TiDB 节点运行,这在某些场景下(比如表特别大的情况)可能会产生性能瓶颈。此问题会在后续版本中优化。 From 510dd2cc96e1971afb3edd230bb736caa91af089 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Thu, 8 Dec 2022 10:11:21 +0800 Subject: [PATCH 44/60] update --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index fd2010293dd8..7d14a9076f6c 100644 --- a/system-variables.md +++ b/system-variables.md @@ -3248,7 +3248,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 是否持久化到集群:是 - 默认值:`ON` - 类型:布尔型 -- 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止清理过期数据。 +- 这个变量用于控制是否启动 TTL 后台清理任务。如果设置为 `OFF`,所有具有 TTL 属性的表会自动停止对过期数据的清理。 ### `tidb_ttl_scan_batch_size` 从 v6.5.0 版本开始引入 From f88b2888e9613c5befab6f556f2eccf79be727af Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Thu, 8 Dec 2022 10:12:51 +0800 Subject: [PATCH 45/60] update --- experimental-features.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experimental-features.md b/experimental-features.md index d36f40137766..a19a0e1c98c0 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -35,7 +35,7 @@ aliases: ['/docs-cn/dev/experimental-features-4.0/','/zh/tidb/dev/experimental-f + [表级锁 (Table Lock)](/tidb-configuration-file.md#enable-table-lock-从-v400-版本开始引入)(v4.0.0 实验特性) + [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区)(v6.3.0 实验特性) + [将集群的数据恢复到特定的时间点 `FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md)。(v6.4.0 实验特性) -+ [Time to Live](/time-to-live.md)。(v6.5.0 实验特性) ++ [使用 TTL (Time to Live) 来周期性地删除过期数据](/time-to-live.md)。(v6.5.0 实验特性) + [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md)(v6.5.0 实验特性) ## 存储 From b4bdca50bfd9300c31de8db7f3c150dcb240c352 Mon Sep 17 00:00:00 2001 From: Ran Date: Thu, 8 Dec 2022 12:52:00 +0800 Subject: [PATCH 46/60] Update time-to-live.md --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 52fe1c95166a..ec075ddf557c 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -1,5 +1,5 @@ --- -title: Time to Live +title: 使用 TTL (Time to Live) 来周期性地删除过期数据 summary: 介绍如何通过 SQL 来管理表数据的生命周期 --- From c8e13548a691fd4d7451e0545ce48ffa10026862 Mon Sep 17 00:00:00 2001 From: Feng Liyuan Date: Mon, 19 Dec 2022 17:09:00 +0800 Subject: [PATCH 47/60] Update time-to-live.md --- time-to-live.md | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/time-to-live.md b/time-to-live.md index ec075ddf557c..9bbae26fa225 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -80,6 +80,56 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 ALTER TABLE t1 REMOVE TTL; ``` +### TTL 和数据类型的默认值 + +TTL 可以和[数据类型的默认值](/data-type-default-values.md)一起使用。以下是两种常见的用法示例: + + * 使用 `DEFAULT CURRENT_TIMESTAMP` 来指定某一列的默认值为当前创建时间,并用这一列作为 TTL 的时间列: + + ```sql + CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) TTL = `created_at` + INTERVAL 3 MONTH; + ``` + + * 指定某一列的默认值为当前的创建时间和更新时间: + + ```sql + CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + ) TTL = `created_at` + INTERVAL 3 MONTH; + ``` + +### TTL 和生成列 + +TTL 可以和[生成列](/generated-columns.md)(实验特性)一起使用,用来表达更加复杂的过期规则。例如: + + ```sql + CREATE TABLE message ( + id int PRIMARY KEY, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + image bool, + expire_at TIMESTAMP AS (IF(image, + created_at + INTERVAL 5 DAY, + created_at + INTERVAL 30 DAY + )) + ) TTL = `expire_at` + INTERVAL 0 DAY; + ``` + +上述语句的消息以 `expire_at` 列来作为过期时间,并按照消息类型来设定。如果是图片,则 5 天后过期,不然就 30 天后过期。 + +TTL 还可以和 [JSON 类型](/data-type-json.md) 一起使用。例如: + + ```sql + CREATE TABLE orders ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + order_info JSON, + created_at DATE AS (JSON_EXTRACT(order_info, '$.created_at')) VIRTUAL + ) TTL = `created_at` + INTERVAL 3 month; + ``` + ## TTL 任务 对于每张设置了 TTL 属性的表,TiDB 内部会定期调度后台任务来清理过期的数据。你可以通过设置全局变量 [`tidb_ttl_job_run_interval`](/system-variables.md#tidb_ttl_job_run_interval-从-v650-版本开始引入) 来自定义任务的执行周期,比如通过下面的语句将后台清理任务设置为每 24 小时执行一次: From 16d9b5bc6d76fe388feafe2a69124ffd0131a2cb Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 19 Dec 2022 17:26:47 +0800 Subject: [PATCH 48/60] Update time-to-live.md Co-authored-by: bb7133 --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 9bbae26fa225..501fa5a84f57 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -13,7 +13,7 @@ TTL 常见的使用场景: * 定期删除不需要的历史订单 * 自动删除计算的中间结果 -TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户周期性且及时地清理不需要的数据。TTL 会以表为单位,并发地分发不同的任务到不同的 tidb-server 节点上,进行并行删除处理。TTL 并不保证所有过期数据立即被删除,也就是说即使数据过期了,客户端仍然有可能在这之后的一段时间内读到过期的数据,直到其真正的被后台处理任务删除。 +TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户周期性且及时地清理不需要的数据。TTL 会以表为单位,并发地分发不同的任务到不同的 TiDB Server 节点上,进行并行删除处理。TTL 并不保证所有过期数据立即被删除,也就是说即使数据过期了,客户端仍然有可能在这之后的一段时间内读到过期的数据,直到其真正的被后台处理任务删除。 > **警告:** > From 06ba4b896140f93d58ed2165f43f573b7b565927 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 19 Dec 2022 17:26:58 +0800 Subject: [PATCH 49/60] Update time-to-live.md Co-authored-by: bb7133 --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 501fa5a84f57..90ee5f89a471 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -164,4 +164,4 @@ SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; * 不允许在临时表上设置 TTL 属性,包括本地临时表和全局临时表。 * 具有 TTL 属性的表不支持作为外键约束的主表被其他表引用。 * 不保证所有过期数据立即被删除,过期数据被删除的时间取决于后台清理任务的调度周期和调度窗口。 -* 目前单个表的清理任务同时只能在同一个 TiDB 节点运行,这在某些场景下(比如表特别大的情况)可能会产生性能瓶颈。此问题会在后续版本中优化。 +* 目前单个表的清理任务同时只能在同一个 TiDB Server 节点运行,这在某些场景下(比如表特别大的情况)可能会产生性能瓶颈。此问题会在后续版本中优化。 From d4fa5f0a9202b4600c3ce1f6672d74d2dd59f1c1 Mon Sep 17 00:00:00 2001 From: Ran Date: Tue, 20 Dec 2022 12:16:28 +0800 Subject: [PATCH 50/60] fix lint --- time-to-live.md | 64 ++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/time-to-live.md b/time-to-live.md index 90ee5f89a471..49657871faea 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -84,51 +84,51 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 TTL 可以和[数据类型的默认值](/data-type-default-values.md)一起使用。以下是两种常见的用法示例: - * 使用 `DEFAULT CURRENT_TIMESTAMP` 来指定某一列的默认值为当前创建时间,并用这一列作为 TTL 的时间列: +* 使用 `DEFAULT CURRENT_TIMESTAMP` 来指定某一列的默认值为当前创建时间,并用这一列作为 TTL 的时间列: - ```sql - CREATE TABLE t1 ( - id int PRIMARY KEY, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - ) TTL = `created_at` + INTERVAL 3 MONTH; - ``` + ```sql + CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) TTL = `created_at` + INTERVAL 3 MONTH; + ``` - * 指定某一列的默认值为当前的创建时间和更新时间: +* 指定某一列的默认值为当前的创建时间和更新时间: - ```sql - CREATE TABLE t1 ( - id int PRIMARY KEY, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - ) TTL = `created_at` + INTERVAL 3 MONTH; - ``` + ```sql + CREATE TABLE t1 ( + id int PRIMARY KEY, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + ) TTL = `created_at` + INTERVAL 3 MONTH; + ``` ### TTL 和生成列 TTL 可以和[生成列](/generated-columns.md)(实验特性)一起使用,用来表达更加复杂的过期规则。例如: - ```sql - CREATE TABLE message ( - id int PRIMARY KEY, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - image bool, - expire_at TIMESTAMP AS (IF(image, - created_at + INTERVAL 5 DAY, - created_at + INTERVAL 30 DAY - )) - ) TTL = `expire_at` + INTERVAL 0 DAY; - ``` +```sql +CREATE TABLE message ( + id int PRIMARY KEY, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + image bool, + expire_at TIMESTAMP AS (IF(image, + created_at + INTERVAL 5 DAY, + created_at + INTERVAL 30 DAY + )) +) TTL = `expire_at` + INTERVAL 0 DAY; +``` 上述语句的消息以 `expire_at` 列来作为过期时间,并按照消息类型来设定。如果是图片,则 5 天后过期,不然就 30 天后过期。 TTL 还可以和 [JSON 类型](/data-type-json.md) 一起使用。例如: - ```sql - CREATE TABLE orders ( - id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, - order_info JSON, - created_at DATE AS (JSON_EXTRACT(order_info, '$.created_at')) VIRTUAL - ) TTL = `created_at` + INTERVAL 3 month; - ``` +```sql +CREATE TABLE orders ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, + order_info JSON, + created_at DATE AS (JSON_EXTRACT(order_info, '$.created_at')) VIRTUAL +) TTL = `created_at` + INTERVAL 3 month; +``` ## TTL 任务 From c99d6ae05057aa3091b14ba8f6a9d95becb0d432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Thu, 22 Dec 2022 14:28:45 +0800 Subject: [PATCH 51/60] Update time-to-live.md Co-authored-by: Grace Cai --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 49657871faea..5f9de1a10528 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -34,7 +34,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 ) TTL = `created_at` + INTERVAL 3 MONTH; ``` - 上面的例子创建了一张表 `t1`, 并指定了 `created_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 + 上面的例子创建了一张表 `t1`,并指定了 `created_at` 为 TTL 的时间列,表示数据的创建时间。同时,它还通过 `INTERVAL 3 MONTH` 设置了表中行的最长存活时间为 3 个月。超过了此时长的过期数据会在之后被删除。 - 设置 `TTL_ENABLE` 属性来开启或关闭清理过期数据的功能: From ae3c97ca3e5343496cbdb98bd49a778baccb9b5e Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Thu, 22 Dec 2022 15:29:39 +0800 Subject: [PATCH 52/60] update --- TOC.md | 2 +- experimental-features.md | 2 +- time-to-live.md | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/TOC.md b/TOC.md index f840ef5cba85..78b559c16c7c 100644 --- a/TOC.md +++ b/TOC.md @@ -37,7 +37,7 @@ - [插入数据](/develop/dev-guide-insert-data.md) - [更新数据](/develop/dev-guide-update-data.md) - [删除数据](/develop/dev-guide-delete-data.md) - - [使用 TTL (Time to Live) 来周期性地删除过期数据](/time-to-live.md) + - [使用 TTL (Time to Live) 定期删除过期数据](/time-to-live.md) - [预处理语句](/develop/dev-guide-prepared-statement.md) - 数据读取 - [单表读取](/develop/dev-guide-get-data-from-single-table.md) diff --git a/experimental-features.md b/experimental-features.md index 8c89c5fd5018..4abca6f7d9f6 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -34,7 +34,7 @@ aliases: ['/docs-cn/dev/experimental-features-4.0/','/zh/tidb/dev/experimental-f + [Cascades Planner](/system-variables.md#tidb_enable_cascades_planner):基于 Cascades 框架的自顶向下查询优化器。(v3.0 实验特性) + [表级锁 (Table Lock)](/tidb-configuration-file.md#enable-table-lock-从-v400-版本开始引入)(v4.0.0 实验特性) + [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区)(v6.3.0 实验特性) -+ [使用 TTL (Time to Live) 来周期性地删除过期数据](/time-to-live.md)。(v6.5.0 实验特性) ++ [使用 TTL (Time to Live) 定期删除过期数据](/time-to-live.md)。(v6.5.0 实验特性) + [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md)(v6.5.0 实验特性) ## 存储 diff --git a/time-to-live.md b/time-to-live.md index 5f9de1a10528..48239c6d0939 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -1,9 +1,9 @@ --- -title: 使用 TTL (Time to Live) 来周期性地删除过期数据 +title: 使用 TTL (Time to Live) 定期删除过期数据 summary: 介绍如何通过 SQL 来管理表数据的生命周期 --- -# 使用 TTL (Time to Live) 来周期性地删除过期数据 +# 使用 TTL (Time to Live) 定期删除过期数据 Time to Live (TTL) 提供了行级别的生命周期控制策略。通过为表设置 TTL 属性,TiDB 可以周期性地自动检查并清理表中的过期数据。此功能在一些场景可以有效节省存储空间、提升性能。 @@ -153,6 +153,16 @@ SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; 上述语句只允许在 UTC 时间的凌晨 1 点到 5 点调度 TTL 任务。默认情况下的时间窗口设置为 `00:00 +0000` 到 `23:59 +0000`,即允许所有时段的任务调度。 +## 监控与图表 + +TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关指标的可视化图表。你可以 TiDB -> TTL 的面板下看到这些信息,包括: + +- `TTL QPS By Type`:TTL 任务产生的不同类型语句的 QPS 信息。 +- `TTL Processed Rows Per Second`:TTL 任务每秒处理的过期数据的行数。 +- `TTL Scan/Delete Query Duration`:TTL 的扫描/删除语句的执行时间。 +- `TTL Scan/Delete Worker Time By Phase`:TTL 内部工作线程的不同阶所占用的时间。 +- `TTL Job Count By Status`:当前正在执行的 TTL 任务的数量。 + ## 工具兼容性 作为实验特性,TTL 特性暂时不兼容包括 BR、TiDB Lightning、TiCDC 在内的数据导入导出以及同步工具。 From c4ea41b66822f007de0de20b2d4e7e9397ea17db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Thu, 22 Dec 2022 15:30:00 +0800 Subject: [PATCH 53/60] Update time-to-live.md Co-authored-by: Ran --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 48239c6d0939..f5bcf01b6a36 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -84,7 +84,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 TTL 可以和[数据类型的默认值](/data-type-default-values.md)一起使用。以下是两种常见的用法示例: -* 使用 `DEFAULT CURRENT_TIMESTAMP` 来指定某一列的默认值为当前创建时间,并用这一列作为 TTL 的时间列: +* 使用 `DEFAULT CURRENT_TIMESTAMP` 来指定某一列的默认值为该行的创建时间,并用这一列作为 TTL 的时间列,创建时间超过 3 个月的数据将被标记为过期: ```sql CREATE TABLE t1 ( From b3ea817c7564a63d5c4a2cbcaeda69ac75e2bd7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Thu, 22 Dec 2022 15:30:09 +0800 Subject: [PATCH 54/60] Update time-to-live.md Co-authored-by: Ran --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index f5bcf01b6a36..6cf5d433c9e5 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -93,7 +93,7 @@ TTL 可以和[数据类型的默认值](/data-type-default-values.md)一起使 ) TTL = `created_at` + INTERVAL 3 MONTH; ``` -* 指定某一列的默认值为当前的创建时间和更新时间: +* 指定某一列的默认值为该行的创建时间或更新时间,并用这一列作为 TTL 的时间列,创建时间或更新时间超过 3 个月的数据将被标记为过期: ```sql CREATE TABLE t1 ( From 911dace10e21bf4c2b8e933cbc50d0d84de8b9b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Fri, 23 Dec 2022 15:40:32 +0800 Subject: [PATCH 55/60] Update time-to-live.md Co-authored-by: Ran --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index 6cf5d433c9e5..93cac7840392 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -160,7 +160,7 @@ TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关 - `TTL QPS By Type`:TTL 任务产生的不同类型语句的 QPS 信息。 - `TTL Processed Rows Per Second`:TTL 任务每秒处理的过期数据的行数。 - `TTL Scan/Delete Query Duration`:TTL 的扫描/删除语句的执行时间。 -- `TTL Scan/Delete Worker Time By Phase`:TTL 内部工作线程的不同阶所占用的时间。 +- `TTL Scan/Delete Worker Time By Phase`:TTL 内部工作线程的不同阶段所占用的时间。 - `TTL Job Count By Status`:当前正在执行的 TTL 任务的数量。 ## 工具兼容性 From 173efef7bb04c4f3933c7c00ae988609a30b9ae0 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 23 Dec 2022 16:53:38 +0800 Subject: [PATCH 56/60] update --- grafana-tidb-dashboard.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/grafana-tidb-dashboard.md b/grafana-tidb-dashboard.md index 2d23e41f2cf2..d04f0eeeea12 100644 --- a/grafana-tidb-dashboard.md +++ b/grafana-tidb-dashboard.md @@ -169,3 +169,10 @@ aliases: ['/docs-cn/dev/grafana-tidb-dashboard/','/docs-cn/dev/reference/key-mon - Wait Duration 95: 批量消息处理的等待时间。 - Batch Client Unavailable Duration 95:批处理客户端的不可用时长。 - No Available Connection Counter:批处理客户端不可用的连接数。 + +- TTL + - TTL QPS By Type:TTL 任务产生的不同类型语句的 QPS 信息。 + - TTL Processed Rows Per Second:TTL 任务每秒处理的过期数据的行数。 + - TTL Scan/Delete Query Duration:TTL 的扫描/删除语句的执行时间。 + - TTL Scan/Delete Worker Time By Phase:TTL 内部工作线程的不同阶段所占用的时间。 + - TTL Job Count By Status:当前正在执行的 TTL 任务的数量。 From 65f661c19c3827f7996dd48f8e8be379dbcc4c73 Mon Sep 17 00:00:00 2001 From: Chao Wang Date: Fri, 23 Dec 2022 16:56:05 +0800 Subject: [PATCH 57/60] update --- time-to-live.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/time-to-live.md b/time-to-live.md index 93cac7840392..33e411d3c8dd 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -155,13 +155,7 @@ SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; ## 监控与图表 -TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关指标的可视化图表。你可以 TiDB -> TTL 的面板下看到这些信息,包括: - -- `TTL QPS By Type`:TTL 任务产生的不同类型语句的 QPS 信息。 -- `TTL Processed Rows Per Second`:TTL 任务每秒处理的过期数据的行数。 -- `TTL Scan/Delete Query Duration`:TTL 的扫描/删除语句的执行时间。 -- `TTL Scan/Delete Worker Time By Phase`:TTL 内部工作线程的不同阶段所占用的时间。 -- `TTL Job Count By Status`:当前正在执行的 TTL 任务的数量。 +TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关指标的可视化图表。你可以 TiDB -> TTL 的面板下看到这些信息。指标详情见:[`TiDB 重要监控指标详解`](/grafana-tidb-dashboard.md) 中 `TTL` 的那一部分。 ## 工具兼容性 From bb0dc5a199821c0b24178711917d32a665a9465b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=B6=85?= Date: Fri, 23 Dec 2022 16:57:30 +0800 Subject: [PATCH 58/60] Update time-to-live.md Co-authored-by: Feng Liyuan --- time-to-live.md | 1 + 1 file changed, 1 insertion(+) diff --git a/time-to-live.md b/time-to-live.md index 33e411d3c8dd..f7ef96028567 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -18,6 +18,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 > **警告:** > > 当前该功能为实验特性,不建议在生产环境中使用。 +> TTL 无法在 [Serverless Tier clusters](https://docs.pingcap.com/tidbcloud/select-cluster-tier#serverless-tier-beta) 上使用 ## 语法 From 270e73adfb6fb9630a9f85471edcc14c8050d4b5 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 26 Dec 2022 10:54:24 +0800 Subject: [PATCH 59/60] Update time-to-live.md --- time-to-live.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time-to-live.md b/time-to-live.md index f7ef96028567..a242dd531bef 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -156,7 +156,7 @@ SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; ## 监控与图表 -TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关指标的可视化图表。你可以 TiDB -> TTL 的面板下看到这些信息。指标详情见:[`TiDB 重要监控指标详解`](/grafana-tidb-dashboard.md) 中 `TTL` 的那一部分。 +TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关指标的可视化图表。你可以 TiDB -> TTL 的面板下看到这些信息。指标详情见 [TiDB 重要监控指标详解](/grafana-tidb-dashboard.md) 中的 `TTL` 部分。 ## 工具兼容性 From ee73b9f2c6ebef45d6f5aaa216e35311ba2f91f9 Mon Sep 17 00:00:00 2001 From: Ran Date: Mon, 26 Dec 2022 11:11:06 +0800 Subject: [PATCH 60/60] Apply suggestions from code review Co-authored-by: Grace Cai --- time-to-live.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/time-to-live.md b/time-to-live.md index a242dd531bef..ce1be4878a31 100644 --- a/time-to-live.md +++ b/time-to-live.md @@ -18,7 +18,7 @@ TTL 设计的目标是在不影响在线读写负载的前提下,帮助用户 > **警告:** > > 当前该功能为实验特性,不建议在生产环境中使用。 -> TTL 无法在 [Serverless Tier clusters](https://docs.pingcap.com/tidbcloud/select-cluster-tier#serverless-tier-beta) 上使用 +> TTL 无法在 [Serverless Tier clusters](https://docs.pingcap.com/tidbcloud/select-cluster-tier#serverless-tier-beta) 上使用。 ## 语法 @@ -156,7 +156,7 @@ SET @@global.tidb_ttl_job_schedule_window_end_time = '05:00 +0000'; ## 监控与图表 -TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关指标的可视化图表。你可以 TiDB -> TTL 的面板下看到这些信息。指标详情见 [TiDB 重要监控指标详解](/grafana-tidb-dashboard.md) 中的 `TTL` 部分。 +TiDB 会定时采集 TTL 的运行时信息,并在 Grafana 中提供了相关指标的可视化图表。你可以在 TiDB -> TTL 的面板下看到这些信息。指标详情见 [TiDB 重要监控指标详解](/grafana-tidb-dashboard.md) 中的 `TTL` 部分。 ## 工具兼容性