From a84669bb42ae7646f9111a6e648f1b41f08d054c Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Wed, 19 Oct 2022 21:14:55 +0900 Subject: [PATCH 01/38] tiflash results materialization --- tiflash/tiflash-results-materialization.md | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tiflash/tiflash-results-materialization.md diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md new file mode 100644 index 000000000000..24e39d0891cc --- /dev/null +++ b/tiflash/tiflash-results-materialization.md @@ -0,0 +1,50 @@ +--- +title: TiFlash 计算结果物化 +summary: 介绍如何在同一个事务处理中物化保存 TiFlash 的计算结果。本功能为实验功能。 +--- + +# TiFlash 计算结果物化 + +本文介绍如何在同一个事务处理中实现 TiFlash 计算结果的物化保存。 + +## 支持下推的算子 + +TiFlash 查询的结果可以通过 `INSERT INTO SELECT` 语句保存在一个 TiDB 表中: + +```sql +INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] + [INTO] tbl_name + [PARTITION (partition_name [, partition_name] ...)] + [(col_name [, col_name] ...)] + SELECT ... + [ON DUPLICATE KEY UPDATE assignment_list]value: + {expr | DEFAULT} + +assignment: + col_name = valueassignment_list: + assignment [, assignment] ... +``` + + +## 使用场景和限制 + +### Execution of query +* SELECT sub-statement will be executed by TiFlash + 1. Optimizer automatically chooses TiFlash + 2. Users can use "tidb_enforce_mpp = TRUE" (existing variable) to force the query making use of TiFlash (when necesary, say, the optimizer cannot choose the right plan) +* The results of SELECT will be handled by a single TiDB server (the most spared one if possible) +* The whole statement should hold ACID properties as other TiDB txn +System Limitation for the size of records returned by SELECT +* The results size of TiFlash selection has a limitation: Txn-max = 1 GB. +Conceptually, Txn size should be inside the O(100 MB) scope (roughly less than 1 million rows). +* If the SELECT returns more data than Txn-max, the whole txn will be abandoned + * Give the error message: "The query produced a too large intermediate result and thus failed" +* Concurrency Constraints (maximum supported concurrent queries: C_max ) + * C_max is not an enforced value, but a recommended/reference value to users + * When txn size = Txn-Max, C_max = 10 + * When txn size = 100 MB, C_max = 30 +### User Scenarios / Story +1. Much more efficient BI solution +Many BI applications need to repeatedly run the same query as end users may refresh the dashboard at any time. However, this is not an efficient way because the results are no different in a short time. This new feature allows persistent results for BI and avoids most meaningless queries and thus saves system resources and can also boot the BI performance; +2. Serve downstream online services +TiFlash cannot serve online services because the concurrency is not that high (typically 30 ~ 50 QPS). By this feature, application developers can easily persistent analytical results inside TiDB and update when necessary, so that the application can use TiDB to serve the online services that access the results table in a very high concurrency. It became a closure inside TiDB without using 3rd party systems. From b2e0826b259fa18ffddcc90f6e7dbd7a4a32e183 Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Wed, 19 Oct 2022 22:18:27 +0900 Subject: [PATCH 02/38] add line breaks --- tiflash/tiflash-results-materialization.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 24e39d0891cc..ede49beef8f6 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -29,6 +29,7 @@ assignment: ## 使用场景和限制 ### Execution of query + * SELECT sub-statement will be executed by TiFlash 1. Optimizer automatically chooses TiFlash 2. Users can use "tidb_enforce_mpp = TRUE" (existing variable) to force the query making use of TiFlash (when necesary, say, the optimizer cannot choose the right plan) @@ -43,7 +44,9 @@ Conceptually, Txn size should be inside the O(100 MB) scope (roughly less than 1 * C_max is not an enforced value, but a recommended/reference value to users * When txn size = Txn-Max, C_max = 10 * When txn size = 100 MB, C_max = 30 + ### User Scenarios / Story + 1. Much more efficient BI solution Many BI applications need to repeatedly run the same query as end users may refresh the dashboard at any time. However, this is not an efficient way because the results are no different in a short time. This new feature allows persistent results for BI and avoids most meaningless queries and thus saves system resources and can also boot the BI performance; 2. Serve downstream online services From d8e0d7e29bab80fa870ccd41c456a9035590150d Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Fri, 21 Oct 2022 17:18:27 +0900 Subject: [PATCH 03/38] update contents --- tiflash/tiflash-results-materialization.md | 51 ++++++++++++---------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index ede49beef8f6..c064aad68c0b 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -28,26 +28,31 @@ assignment: ## 使用场景和限制 -### Execution of query - -* SELECT sub-statement will be executed by TiFlash - 1. Optimizer automatically chooses TiFlash - 2. Users can use "tidb_enforce_mpp = TRUE" (existing variable) to force the query making use of TiFlash (when necesary, say, the optimizer cannot choose the right plan) -* The results of SELECT will be handled by a single TiDB server (the most spared one if possible) -* The whole statement should hold ACID properties as other TiDB txn -System Limitation for the size of records returned by SELECT -* The results size of TiFlash selection has a limitation: Txn-max = 1 GB. -Conceptually, Txn size should be inside the O(100 MB) scope (roughly less than 1 million rows). -* If the SELECT returns more data than Txn-max, the whole txn will be abandoned - * Give the error message: "The query produced a too large intermediate result and thus failed" -* Concurrency Constraints (maximum supported concurrent queries: C_max ) - * C_max is not an enforced value, but a recommended/reference value to users - * When txn size = Txn-Max, C_max = 10 - * When txn size = 100 MB, C_max = 30 - -### User Scenarios / Story - -1. Much more efficient BI solution -Many BI applications need to repeatedly run the same query as end users may refresh the dashboard at any time. However, this is not an efficient way because the results are no different in a short time. This new feature allows persistent results for BI and avoids most meaningless queries and thus saves system resources and can also boot the BI performance; -2. Serve downstream online services -TiFlash cannot serve online services because the concurrency is not that high (typically 30 ~ 50 QPS). By this feature, application developers can easily persistent analytical results inside TiDB and update when necessary, so that the application can use TiDB to serve the online services that access the results table in a very high concurrency. It became a closure inside TiDB without using 3rd party systems. + +### 执行过程 + + +* SELECT 子句在 TiFlash 上执行,一般情况下优化器会自动选择,需要用户手动干预时可以通过设置 "tidb_enforce_mpp = TRUE" 来强制查询计划走 TiFlash +* SELECT 子句返回的结果首先回到集群中某单一 TiDB Server 节点,然后写入目标表(可以有 TiFlash 副本) +* 整条语句的执行保证 ACID 特性 + + +### 限制 +* 对写入部分事务大小(SELECT 子句返回的结果集)的硬性限制为 1 GB,推荐的使用场景是 100 MB以下。 + +* 若 SELECT 返回结果大小超过了 1GB,那么整条语句将会被强制终止 + * 用户会得到以下出错信息: "The query produced a too large intermediate result and thus failed" +* 并发限制 + * 目前并没有硬性限制,但是推荐用户考虑一下用法 + * 当“写事务”较大时,例如接近 1GB, 建议控制并发不超过 10 + * 当“写事务”较小时,例如小于 100MB, 建议控制并发不超过 30 + * 请基于测试和具体情况做出合理选择 + + +### 典型和推荐的使用场景 + +1. 更高效的 BI 解决方案 +很多报表类应用有较重的分析查询,如果有很多用户在同时打开和刷新报表则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如某报表 A 分析每日的销售利润,使用本功能保存了每日的分析结果在某结果记录表 T 中,那么在生成报表 B 分析过去一月窗口的销售利润时,可以直接使用 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 + +2. 使用 TiFlash 服务在线应用 +TiFlash 通常可以支持的并发请求视数据量和查询复杂度不同,但一般不会超过 100 QPS。用户可以通过保存 TiFlash 查询结果的方式,使用结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5s 间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 From 9ee8b4a30e8da552a1267dcb0ea17d9035cd71f4 Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Fri, 21 Oct 2022 17:30:20 +0900 Subject: [PATCH 04/38] fix line breaks --- tiflash/tiflash-results-materialization.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index c064aad68c0b..e746b96fac43 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -38,6 +38,7 @@ assignment: ### 限制 + * 对写入部分事务大小(SELECT 子句返回的结果集)的硬性限制为 1 GB,推荐的使用场景是 100 MB以下。 * 若 SELECT 返回结果大小超过了 1GB,那么整条语句将会被强制终止 @@ -52,7 +53,9 @@ assignment: ### 典型和推荐的使用场景 1. 更高效的 BI 解决方案 + 很多报表类应用有较重的分析查询,如果有很多用户在同时打开和刷新报表则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如某报表 A 分析每日的销售利润,使用本功能保存了每日的分析结果在某结果记录表 T 中,那么在生成报表 B 分析过去一月窗口的销售利润时,可以直接使用 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 2. 使用 TiFlash 服务在线应用 + TiFlash 通常可以支持的并发请求视数据量和查询复杂度不同,但一般不会超过 100 QPS。用户可以通过保存 TiFlash 查询结果的方式,使用结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5s 间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 From d75a9cba92efc88045a7904b895ec404c9bd5a31 Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Fri, 21 Oct 2022 17:40:04 +0900 Subject: [PATCH 05/38] reformat --- tiflash/tiflash-results-materialization.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index e746b96fac43..de470a5c6c3e 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -25,18 +25,14 @@ assignment: assignment [, assignment] ... ``` - ## 使用场景和限制 - ### 执行过程 - * SELECT 子句在 TiFlash 上执行,一般情况下优化器会自动选择,需要用户手动干预时可以通过设置 "tidb_enforce_mpp = TRUE" 来强制查询计划走 TiFlash * SELECT 子句返回的结果首先回到集群中某单一 TiDB Server 节点,然后写入目标表(可以有 TiFlash 副本) * 整条语句的执行保证 ACID 特性 - ### 限制 * 对写入部分事务大小(SELECT 子句返回的结果集)的硬性限制为 1 GB,推荐的使用场景是 100 MB以下。 @@ -44,18 +40,17 @@ assignment: * 若 SELECT 返回结果大小超过了 1GB,那么整条语句将会被强制终止 * 用户会得到以下出错信息: "The query produced a too large intermediate result and thus failed" * 并发限制 - * 目前并没有硬性限制,但是推荐用户考虑一下用法 + * 目前并没有硬性限制,但是推荐用户考虑以下用法 * 当“写事务”较大时,例如接近 1GB, 建议控制并发不超过 10 * 当“写事务”较小时,例如小于 100MB, 建议控制并发不超过 30 * 请基于测试和具体情况做出合理选择 - ### 典型和推荐的使用场景 1. 更高效的 BI 解决方案 -很多报表类应用有较重的分析查询,如果有很多用户在同时打开和刷新报表则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如某报表 A 分析每日的销售利润,使用本功能保存了每日的分析结果在某结果记录表 T 中,那么在生成报表 B 分析过去一月窗口的销售利润时,可以直接使用 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 + 很多报表类应用有较重的分析查询,如果有很多用户在同时打开和刷新报表则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如某报表 A 分析每日的销售利润,使用本功能保存了每日的分析结果在某结果记录表 T 中,那么在生成报表 B 分析过去一月窗口的销售利润时,可以直接使用 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 2. 使用 TiFlash 服务在线应用 -TiFlash 通常可以支持的并发请求视数据量和查询复杂度不同,但一般不会超过 100 QPS。用户可以通过保存 TiFlash 查询结果的方式,使用结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5s 间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 + TiFlash 通常可以支持的并发请求视数据量和查询复杂度不同,但一般不会超过 100 QPS。用户可以通过保存 TiFlash 查询结果的方式,使用结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5s 间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 From 5e4f91d3cffeb3fec5197eb6ba49c7baa45e96b1 Mon Sep 17 00:00:00 2001 From: qiancai Date: Thu, 27 Oct 2022 18:50:14 +0800 Subject: [PATCH 06/38] updated the doc according the communication with @moyun --- TOC.md | 1 + tiflash/tiflash-results-materialization.md | 62 +++++++++++++--------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/TOC.md b/TOC.md index 84be2e19a943..af8e95f845e2 100644 --- a/TOC.md +++ b/TOC.md @@ -896,6 +896,7 @@ - [使用 TiSpark 读取 TiFlash](/tiflash/use-tispark-to-read-tiflash.md) - [使用 MPP 模式](/tiflash/use-tiflash-mpp-mode.md) - [TiFlash 支持的计算下推](/tiflash/tiflash-supported-pushdown-calculations.md) + - [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md) - [TiFlash 数据校验](/tiflash/tiflash-data-validation.md) - [TiFlash 兼容性说明](/tiflash/tiflash-compatibility.md) - [遥测](/telemetry.md) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index de470a5c6c3e..143abe0c6d82 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -1,15 +1,23 @@ --- -title: TiFlash 计算结果物化 -summary: 介绍如何在同一个事务处理中物化保存 TiFlash 的计算结果。本功能为实验功能。 +title: TiFlash 查询结果物化 +summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 --- # TiFlash 计算结果物化 -本文介绍如何在同一个事务处理中实现 TiFlash 计算结果的物化保存。 +> **警告:** +> +> 该功能目前是实验性功能,其形式和使用方法可能会在未来版本中发生变化。 -## 支持下推的算子 +本文介绍如何在同一个事务(`INSERT INTO SELECT`)中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 -TiFlash 查询的结果可以通过 `INSERT INTO SELECT` 语句保存在一个 TiDB 表中: +从 v6.4.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 SELECT 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.4.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,用户需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 + +> **注意:** +> +> 默认情况下 ([`tidb_allow_mpp=on`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)), TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp=on`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。 + +`INSERT INTO SELECT` 语法如下: ```sql INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] @@ -25,32 +33,38 @@ assignment: assignment [, assignment] ... ``` -## 使用场景和限制 +例如,通过以下 `INSERT INTO SELECT` 语句,你可以将 SELECT 子句中表 `t1` 的查询结果保存到表 `t2` 中: + +```sql +INSERT INTO t2 (name, country) +SELECT app_name, country FROM t1; +``` + +## 典型和推荐的使用场景 + +- 高效的 BI 解决方案 + + 很多报表类应用有较重的分析查询,如果有很多用户在同时打开和刷新报表,则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时再从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如,某报表 A 用于分析每日的销售利润,使用本功能你可以将报表 A 中每日的分析结果保存到某结果表 T 中。那么,在生成报表 B 分析过去一月窗口的销售利润时,可以直接使用表 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 -### 执行过程 +- 使用 TiFlash 服务在线应用 -* SELECT 子句在 TiFlash 上执行,一般情况下优化器会自动选择,需要用户手动干预时可以通过设置 "tidb_enforce_mpp = TRUE" 来强制查询计划走 TiFlash -* SELECT 子句返回的结果首先回到集群中某单一 TiDB Server 节点,然后写入目标表(可以有 TiFlash 副本) -* 整条语句的执行保证 ACID 特性 + TiFlash 支持的并发请求数量视数据量和查询复杂度不同,但一般不会超过 100 QPS。你可以使用本功能保存 TiFlash 的查询结果,然后通过查询结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5s 间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 -### 限制 +## 执行过程 -* 对写入部分事务大小(SELECT 子句返回的结果集)的硬性限制为 1 GB,推荐的使用场景是 100 MB以下。 +* 在`INSERT INTO SELECT` 语句的执行过程中,TiFlash 首先将 SELECT 子句的查询结果返回到集群中某单一 TiDB Server 节点,然后再写入目标表(可以有 TiFlash 副本)。 +* `INSERT INTO SELECT` 语句的执行保证 ACID 特性。 -* 若 SELECT 返回结果大小超过了 1GB,那么整条语句将会被强制终止 - * 用户会得到以下出错信息: "The query produced a too large intermediate result and thus failed" -* 并发限制 - * 目前并没有硬性限制,但是推荐用户考虑以下用法 - * 当“写事务”较大时,例如接近 1GB, 建议控制并发不超过 10 - * 当“写事务”较小时,例如小于 100MB, 建议控制并发不超过 30 - * 请基于测试和具体情况做出合理选择 +## 限制 -### 典型和推荐的使用场景 +* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的硬性限制为 1 GB,推荐的使用场景是 100 MB 以下。 -1. 更高效的 BI 解决方案 + 若 SELECT 返回结果大小超过了 1 GB,那么整条语句将会被强制终止。用户会得到以下出错信息: - 很多报表类应用有较重的分析查询,如果有很多用户在同时打开和刷新报表则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如某报表 A 分析每日的销售利润,使用本功能保存了每日的分析结果在某结果记录表 T 中,那么在生成报表 B 分析过去一月窗口的销售利润时,可以直接使用 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 + `The query produced a too large intermediate result and thus failed` -2. 使用 TiFlash 服务在线应用 +* TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: - TiFlash 通常可以支持的并发请求视数据量和查询复杂度不同,但一般不会超过 100 QPS。用户可以通过保存 TiFlash 查询结果的方式,使用结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5s 间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 + * 当“写事务”较大时,例如接近 1 GB, 建议控制并发不超过 10。 + * 当“写事务”较小时,例如小于 100 MB, 建议控制并发不超过 30。 + * 请基于测试和具体情况做出合理选择。 \ No newline at end of file From edaff5fc231025cf9666620b1e894633df2c73ea Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 1 Nov 2022 12:32:03 +0800 Subject: [PATCH 07/38] Apply suggestions from code review Co-authored-by: Aolin --- tiflash/tiflash-results-materialization.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 143abe0c6d82..b3d11c2950fc 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -9,13 +9,13 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > > 该功能目前是实验性功能,其形式和使用方法可能会在未来版本中发生变化。 -本文介绍如何在同一个事务(`INSERT INTO SELECT`)中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 +本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 从 v6.4.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 SELECT 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.4.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,用户需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 > **注意:** > -> 默认情况下 ([`tidb_allow_mpp=on`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)), TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp=on`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。 +> 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。 `INSERT INTO SELECT` 语法如下: @@ -52,16 +52,14 @@ SELECT app_name, country FROM t1; ## 执行过程 -* 在`INSERT INTO SELECT` 语句的执行过程中,TiFlash 首先将 SELECT 子句的查询结果返回到集群中某单一 TiDB Server 节点,然后再写入目标表(可以有 TiFlash 副本)。 +* 在 `INSERT INTO SELECT` 语句的执行过程中,TiFlash 首先将 SELECT 子句的查询结果返回到集群中某单一 TiDB server 节点,然后再写入目标表(可以有 TiFlash 副本)。 * `INSERT INTO SELECT` 语句的执行保证 ACID 特性。 ## 限制 * TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的硬性限制为 1 GB,推荐的使用场景是 100 MB 以下。 - 若 SELECT 返回结果大小超过了 1 GB,那么整条语句将会被强制终止。用户会得到以下出错信息: - - `The query produced a too large intermediate result and thus failed` + 若 SELECT 返回结果大小超过了 1 GiB,那么整条语句将会被强制终止并返回 `The query produced a too large intermediate result and thus failed` 报错信息。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: From 1288f6b7d62bce95de6b00574fd47e0e03535691 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 2 Nov 2022 09:50:07 +0800 Subject: [PATCH 08/38] Apply suggestions from code review Co-authored-by: Aolin --- tiflash/tiflash-results-materialization.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index b3d11c2950fc..de6b923a42d8 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -44,11 +44,11 @@ SELECT app_name, country FROM t1; - 高效的 BI 解决方案 - 很多报表类应用有较重的分析查询,如果有很多用户在同时打开和刷新报表,则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时再从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如,某报表 A 用于分析每日的销售利润,使用本功能你可以将报表 A 中每日的分析结果保存到某结果表 T 中。那么,在生成报表 B 分析过去一月窗口的销售利润时,可以直接使用表 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 + 很多报表类应用有较重的分析查询,如果有很多用户同时打开和刷新报表,则会产生较多的查询请求。一个有效的解决方案是使用本功能在 TiDB 表中保存报表查询的结果,报表刷新时再从结果表中抽取数据,则可以避免多次重复的分析计算。同理,在保存历史分析记录的基础上,可以进一步优化长时间历史数据分析的计算量。例如,某报表 A 用于分析每日的销售利润,使用本功能你可以将报表 A 中每日的分析结果保存到某结果表 T 中。那么,在生成报表 B 分析过去一个月的销售利润时,可以直接使用表 T 中的每日分析结果数据,不仅大幅降低计算量也提升了查询响应速度,减轻系统负载。 - 使用 TiFlash 服务在线应用 - TiFlash 支持的并发请求数量视数据量和查询复杂度不同,但一般不会超过 100 QPS。你可以使用本功能保存 TiFlash 的查询结果,然后通过查询结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5s 间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 + TiFlash 支持的并发请求数量视数据量和查询复杂度不同,但一般不会超过 100 QPS。你可以使用本功能保存 TiFlash 的查询结果,然后通过查询结果表来支持在线的高并发请求。后台的结果表数据更新可以以较低的频率进行,例如以 0.5 秒间隔更新结果表数据也远低于 TiFlash 的并发上限,同时仍然较好地保证了数据新鲜度。 ## 执行过程 @@ -57,12 +57,12 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的硬性限制为 1 GB,推荐的使用场景是 100 MB 以下。 +* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的硬性限制为 1 GiB,推荐的使用场景是 100 MiB 以下。 若 SELECT 返回结果大小超过了 1 GiB,那么整条语句将会被强制终止并返回 `The query produced a too large intermediate result and thus failed` 报错信息。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: - * 当“写事务”较大时,例如接近 1 GB, 建议控制并发不超过 10。 - * 当“写事务”较小时,例如小于 100 MB, 建议控制并发不超过 30。 + * 当“写事务”较大时,例如接近 1 GiB,建议控制并发不超过 10。 + * 当“写事务”较小时,例如小于 100 MiB,建议控制并发不超过 30。 * 请基于测试和具体情况做出合理选择。 \ No newline at end of file From 7b943b8ca3fd0a738377ab4d29a3afdcd0c48c33 Mon Sep 17 00:00:00 2001 From: Yu Liu <2842195+moyun@users.noreply.github.com> Date: Mon, 28 Nov 2022 20:54:00 +0900 Subject: [PATCH 09/38] Update tiflash/tiflash-results-materialization.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请提 Issues · pingcap/tidb 反馈。 Co-authored-by: Aolin --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index de6b923a42d8..ea1e19e6a1a7 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -7,7 +7,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > **警告:** > -> 该功能目前是实验性功能,其形式和使用方法可能会在未来版本中发生变化。 +> 该功能目前是实验性功能,不建议在生产环境中使用,其形式和使用方法可能会在未来版本中发生变化。 本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 From b95e98ff1f3d7734dedf8261397d62607901ea7a Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Mon, 28 Nov 2022 21:07:52 +0900 Subject: [PATCH 10/38] update txn size limitation --- tiflash/tiflash-results-materialization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index ea1e19e6a1a7..5763807def4c 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -57,9 +57,9 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的硬性限制为 1 GiB,推荐的使用场景是 100 MiB 以下。 +* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的可以通过设定 TiDB 控制事务大小的变量 `performance.txn-total-size-limit` 来进行,推荐的使用场景是 100 MiB 以下。 - 若 SELECT 返回结果大小超过了 1 GiB,那么整条语句将会被强制终止并返回 `The query produced a too large intermediate result and thus failed` 报错信息。 + 若 SELECT 返回结果大小超过了事务大小限制的阈值,那么整条语句将会被强制终止并返回错误信息(参见 `performance.txn-total-size-limit`)。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: From 875add1aa8e253b33fea4ba335417c02ced2fc69 Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Thu, 1 Dec 2022 15:11:22 +0900 Subject: [PATCH 11/38] update usage --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 5763807def4c..dfb6036cd202 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -15,7 +15,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > **注意:** > -> 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。 +> 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。在实验功能阶段,为了不影响打开 `tidb_enforce_mpp = ON` 开关时其他读写混合事务,特别增加了一个单独控制此项功能的系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt),用户须设置此变量为 `TRUE` 方可开启本功能。 `INSERT INTO SELECT` 语法如下: From eda8477e4c3c33579aa4695f98d0b24034565ee3 Mon Sep 17 00:00:00 2001 From: Ryan Liu <2842195+moyun@users.noreply.github.com> Date: Thu, 1 Dec 2022 15:15:48 +0900 Subject: [PATCH 12/38] update usage --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index dfb6036cd202..fa8e9a3f50c0 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -15,7 +15,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > **注意:** > -> 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。在实验功能阶段,为了不影响打开 `tidb_enforce_mpp = ON` 开关时其他读写混合事务,特别增加了一个单独控制此项功能的系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt),用户须设置此变量为 `TRUE` 方可开启本功能。 +> 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。在实验功能阶段,为了使 `tidb_enforce_mpp = ON` 时不影响 其他既存的读写混合事务,特别增加了一个单独控制此项功能的系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt),用户须设置此变量为 `TRUE` 方可开启本功能。 `INSERT INTO SELECT` 语法如下: From ce73311d6a7973a275bc875d41eb14f0e2df2980 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 1 Dec 2022 15:08:23 +0800 Subject: [PATCH 13/38] Apply suggestions from code review --- tiflash/tiflash-results-materialization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index fa8e9a3f50c0..d6287ebd3dc7 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -7,7 +7,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > **警告:** > -> 该功能目前是实验性功能,不建议在生产环境中使用,其形式和使用方法可能会在未来版本中发生变化。 +> 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请提 [Issues · pingcap/tidb](https://github.com/pingcap/tidb/issues) 反馈。 本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 @@ -57,7 +57,7 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的可以通过设定 TiDB 控制事务大小的变量 `performance.txn-total-size-limit` 来进行,推荐的使用场景是 100 MiB 以下。 +* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 若 SELECT 返回结果大小超过了事务大小限制的阈值,那么整条语句将会被强制终止并返回错误信息(参见 `performance.txn-total-size-limit`)。 From 4997bc90b72b96354bee447fda3af97d9a14e962 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 1 Dec 2022 18:34:35 +0800 Subject: [PATCH 14/38] format updates --- tiflash/tiflash-results-materialization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index d6287ebd3dc7..4461eb4d4e33 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -57,9 +57,9 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 +* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [`performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit`) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 - 若 SELECT 返回结果大小超过了事务大小限制的阈值,那么整条语句将会被强制终止并返回错误信息(参见 `performance.txn-total-size-limit`)。 + 若 SELECT 返回结果大小超过了事务大小限制的阈值,那么整条语句将会被强制终止并返回错误信息(参见 [`performance.txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit))。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: From e3e9ef7bab250073a7bc265a596ff58d1d073af8 Mon Sep 17 00:00:00 2001 From: qiancai Date: Fri, 2 Dec 2022 11:32:47 +0800 Subject: [PATCH 15/38] Update experimental-features.md --- experimental-features.md | 1 + 1 file changed, 1 insertion(+) diff --git a/experimental-features.md b/experimental-features.md index 04b4a0987a31..2bb8f5bf278e 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -38,6 +38,7 @@ aliases: ['/docs-cn/dev/experimental-features-4.0/','/zh/tidb/dev/experimental-f + [元数据锁](/metadata-lock.md) (v6.3.0 实验特性) + [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区)(v6.3.0 实验特性) + [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)(v6.3.0 实验特性) ++ [TiFlash 查询结果物化](tiflash/tiflash-results-materialization.md) (v6.5.0 实验特性) ## 存储 From 1a099864d51c86b545746e912525a7cc3fa3e294 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 2 Dec 2022 11:47:18 +0800 Subject: [PATCH 16/38] Apply suggestions from code review --- tiflash/tiflash-results-materialization.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 4461eb4d4e33..7ac00e2cfaa1 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -11,11 +11,12 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 -从 v6.4.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 SELECT 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.4.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,用户需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 +从 v6.5.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 SELECT 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,用户需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 > **注意:** > -> 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。在实验功能阶段,为了使 `tidb_enforce_mpp = ON` 时不影响 其他既存的读写混合事务,特别增加了一个单独控制此项功能的系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt),用户须设置此变量为 `TRUE` 方可开启本功能。 +> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。 +> - 在实验特性阶段,为了避免影响现有的读写混合事务,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt) 为 `ON`。 `INSERT INTO SELECT` 语法如下: From 0940fe1d9c10fba4f4b58529db018e8e6672b83e Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Fri, 2 Dec 2022 11:48:20 +0800 Subject: [PATCH 17/38] format updates --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 7ac00e2cfaa1..bbfa543a4abc 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -58,7 +58,7 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [`performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit`) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 +* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [`performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit`) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 若 SELECT 返回结果大小超过了事务大小限制的阈值,那么整条语句将会被强制终止并返回错误信息(参见 [`performance.txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit))。 From 8837d693a7bc723515082562c5e8558172f8f2db Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Mon, 5 Dec 2022 16:22:59 +0800 Subject: [PATCH 18/38] Apply suggestions from code review Co-authored-by: Aolin --- experimental-features.md | 2 +- tiflash/tiflash-results-materialization.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/experimental-features.md b/experimental-features.md index 2bb8f5bf278e..95a5c0260fdd 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -38,7 +38,7 @@ aliases: ['/docs-cn/dev/experimental-features-4.0/','/zh/tidb/dev/experimental-f + [元数据锁](/metadata-lock.md) (v6.3.0 实验特性) + [Range INTERVAL 分区](/partitioned-table.md#range-interval-分区)(v6.3.0 实验特性) + [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)(v6.3.0 实验特性) -+ [TiFlash 查询结果物化](tiflash/tiflash-results-materialization.md) (v6.5.0 实验特性) ++ [TiFlash 查询结果物化](tiflash/tiflash-results-materialization.md)(v6.5.0 实验特性) ## 存储 diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index bbfa543a4abc..cfea4233ef80 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -11,7 +11,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 -从 v6.5.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 SELECT 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,用户需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 +从 v6.5.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 `SELECT` 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 > **注意:** > @@ -34,7 +34,7 @@ assignment: assignment [, assignment] ... ``` -例如,通过以下 `INSERT INTO SELECT` 语句,你可以将 SELECT 子句中表 `t1` 的查询结果保存到表 `t2` 中: +例如,通过以下 `INSERT INTO SELECT` 语句,你可以将 `SELECT` 子句中表 `t1` 的查询结果保存到表 `t2` 中: ```sql INSERT INTO t2 (name, country) @@ -53,14 +53,14 @@ SELECT app_name, country FROM t1; ## 执行过程 -* 在 `INSERT INTO SELECT` 语句的执行过程中,TiFlash 首先将 SELECT 子句的查询结果返回到集群中某单一 TiDB server 节点,然后再写入目标表(可以有 TiFlash 副本)。 +* 在 `INSERT INTO SELECT` 语句的执行过程中,TiFlash 首先将 `SELECT` 子句的查询结果返回到集群中某单一 TiDB server 节点,然后再写入目标表(可以有 TiFlash 副本)。 * `INSERT INTO SELECT` 语句的执行保证 ACID 特性。 ## 限制 -* TiDB 对 SELECT 子句返回的结果集(即 INSERT 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [`performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit`) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 +* TiDB 对 `SELECT` 子句返回的结果集(即 `INSERT` 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [`performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit`) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 - 若 SELECT 返回结果大小超过了事务大小限制的阈值,那么整条语句将会被强制终止并返回错误信息(参见 [`performance.txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit))。 + 若 `SELECT` 返回结果大小超过了事务大小限制的阈值 [`performance.txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit),那么整条语句将会被强制终止并返回错误信息。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: From 687088ba3daddc656f02f724437db0d8622b9950 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 6 Dec 2022 10:20:21 +0800 Subject: [PATCH 19/38] Apply suggestions from code review Co-authored-by: Aolin Co-authored-by: Liqi Geng --- tiflash/tiflash-results-materialization.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index cfea4233ef80..7ba19376ad24 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -7,7 +7,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > **警告:** > -> 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请提 [Issues · pingcap/tidb](https://github.com/pingcap/tidb/issues) 反馈。 +> 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues) 反馈。 本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 @@ -16,7 +16,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > **注意:** > > - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。 -> - 在实验特性阶段,为了避免影响现有的读写混合事务,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt) 为 `ON`。 +> - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt) 为 `ON`。 `INSERT INTO SELECT` 语法如下: @@ -58,9 +58,9 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 `SELECT` 子句返回的结果集(即 `INSERT` 写入的事务)大小的限制即为 TiDB 对单个事务大小的限制,可以通过 [`performance.txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit`) 配置项调整该限制,推荐的使用场景是 100 MiB 以下。 +* TiDB 对该语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidbmemquotaquery) 调整。 - 若 `SELECT` 返回结果大小超过了事务大小限制的阈值 [`performance.txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit),那么整条语句将会被强制终止并返回错误信息。 + 更多信息,请参考[用户文档](/configure-memory-usage.md)。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: From d40358da03cbeade3c77405fe1b533d850bc8d9d Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 6 Dec 2022 10:24:48 +0800 Subject: [PATCH 20/38] format changes --- tiflash/tiflash-results-materialization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 7ba19376ad24..a2620c617a44 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -58,9 +58,9 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对该语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidbmemquotaquery) 调整。 +* TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables#tidb_mem_quota_query) 调整。 - 更多信息,请参考[用户文档](/configure-memory-usage.md)。 + 更多信息,请参考[TiDB 内存控制文档](/configure-memory-usage.md)。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: From eb09f9e62f67df0764ee3457ff323c02ce453496 Mon Sep 17 00:00:00 2001 From: qiancai Date: Tue, 6 Dec 2022 11:08:01 +0800 Subject: [PATCH 21/38] Update system-variables.md --- system-variables.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/system-variables.md b/system-variables.md index c920609d64b1..094dd86f19ec 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1372,12 +1372,12 @@ Query OK, 0 rows affected (0.09 sec) > **警告:** > -> 当前版本中该变量控制的功能尚未完全生效,请保留默认值。 +> TiFlash 计算结果物化目前是实验性功能,请注意使用场景限制。 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 默认值:`OFF` -- 这个变量用于控制写 SQL 中的读取是否会下推到 TiFlash。 +- 这个变量用于控制是否开启 [TiFlash 计算结果物化特性](/tiflash/tiflash-results-materialization.md)。 ### `tidb_enable_top_sql` 从 v5.4.0 版本开始引入 @@ -1388,7 +1388,7 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:GLOBAL - 是否持久化到集群:是 - 默认值:`OFF` -- 这个变量用控制是否开启 [Top SQL 特性](/dashboard/top-sql.md)。 +- 这个变量用于控制是否开启 [Top SQL 特性](/dashboard/top-sql.md)。 ### `tidb_enable_tso_follower_proxy` 从 v5.3.0 版本开始引入 From fa5b9205419b0b439750318362661ad28ea2f34f Mon Sep 17 00:00:00 2001 From: qiancai Date: Tue, 6 Dec 2022 11:08:33 +0800 Subject: [PATCH 22/38] Update tiflash-results-materialization.md --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index a2620c617a44..3b84aff2617f 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -15,7 +15,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 > **注意:** > -> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp = ON`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入)。 +> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 > - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt) 为 `ON`。 `INSERT INTO SELECT` 语法如下: From 03ba52c279d931e3cc66b4a6b1c6e901144a4b26 Mon Sep 17 00:00:00 2001 From: qiancai Date: Tue, 6 Dec 2022 11:12:28 +0800 Subject: [PATCH 23/38] unify wording --- tiflash/tiflash-results-materialization.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 3b84aff2617f..7fcaa6b444df 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -1,15 +1,15 @@ --- title: TiFlash 查询结果物化 -summary: 介绍如何在同一个事务中保存 TiFlash 的计算结果。 +summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 --- -# TiFlash 计算结果物化 +# TiFlash 查询结果物化 > **警告:** > > 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues) 反馈。 -本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 计算结果物化至某一指定的 TiDB 表中。 +本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 查询结果物化至某一指定的 TiDB 表中。 从 v6.5.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 `SELECT` 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 From c17513f9b27510d09991a12cfdcf545360e36e1b Mon Sep 17 00:00:00 2001 From: qiancai Date: Tue, 6 Dec 2022 11:12:57 +0800 Subject: [PATCH 24/38] Update system-variables.md --- system-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system-variables.md b/system-variables.md index 094dd86f19ec..7d25429ace14 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1372,12 +1372,12 @@ Query OK, 0 rows affected (0.09 sec) > **警告:** > -> TiFlash 计算结果物化目前是实验性功能,请注意使用场景限制。 +> TiFlash 查询结果物化目前是实验性功能,请注意使用场景限制。 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 默认值:`OFF` -- 这个变量用于控制是否开启 [TiFlash 计算结果物化特性](/tiflash/tiflash-results-materialization.md)。 +- 这个变量用于控制是否开启 [TiFlash 查询结果物化特性](/tiflash/tiflash-results-materialization.md)。 ### `tidb_enable_top_sql` 从 v5.4.0 版本开始引入 From 4ba4ab28ea2fa6208252a887e20033a2ff981e40 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 6 Dec 2022 11:13:16 +0800 Subject: [PATCH 25/38] Apply suggestions from code review Co-authored-by: Aolin --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 7fcaa6b444df..edc3f3ccfd95 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -60,7 +60,7 @@ SELECT app_name, country FROM t1; * TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables#tidb_mem_quota_query) 调整。 - 更多信息,请参考[TiDB 内存控制文档](/configure-memory-usage.md)。 + 更多信息,请参考 [TiDB 内存控制](/configure-memory-usage.md)。 * TiDB 对 `INSERT INTO SELECT` 语句的并发没有硬性限制,但是推荐考虑以下用法: From 37a0d138d1c4d7fbfe577c5982244f629a89f505 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 6 Dec 2022 11:20:19 +0800 Subject: [PATCH 26/38] fix link errors --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index edc3f3ccfd95..b4ed2e98bbd3 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -16,7 +16,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 > **注意:** > > - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 -> - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt) 为 `ON`。 +> - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt-从-v630-版本开始引入) 为 `ON`。 `INSERT INTO SELECT` 语法如下: From 41cfda7324dfd3d36fc226c7956fa7399ceb3304 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 6 Dec 2022 11:23:53 +0800 Subject: [PATCH 27/38] fix link errors --- tiflash/tiflash-results-materialization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index b4ed2e98bbd3..cfac34a1d32d 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -15,8 +15,8 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 > **注意:** > -> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp`](/system-variables#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 -> - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables#tidb_enable_tiflash_read_for_write_stmt-从-v630-版本开始引入) 为 `ON`。 +> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp`](/system-variables.md#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 +> - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables.md#tidb_enable_tiflash_read_for_write_stmt-从-v630-版本开始引入) 为 `ON`。 `INSERT INTO SELECT` 语法如下: From 428e03e17ce6a21a73a77aff0f5ccabaa4bf7da5 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 6 Dec 2022 11:26:11 +0800 Subject: [PATCH 28/38] Update tiflash/tiflash-results-materialization.md --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index cfac34a1d32d..838cf9803b0e 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -58,7 +58,7 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables#tidb_mem_quota_query) 调整。 +* TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 调整。 更多信息,请参考 [TiDB 内存控制](/configure-memory-usage.md)。 From 4e666b42f085e431ad5d8d71199fe793141bfa4b Mon Sep 17 00:00:00 2001 From: qiancai Date: Tue, 6 Dec 2022 11:34:34 +0800 Subject: [PATCH 29/38] Update experimental-features.md --- experimental-features.md | 1 - 1 file changed, 1 deletion(-) diff --git a/experimental-features.md b/experimental-features.md index 2f482a6ea146..86634e104c82 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -36,7 +36,6 @@ 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 实验特性) -+ [添加索引加速](/system-variables.md#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入)(v6.3.0 实验特性) + [将集群的数据恢复到特定的时间点 `FLASHBACK CLUSTER TO TIMESTAMP`](/sql-statements/sql-statement-flashback-to-timestamp.md)。(v6.4.0 实验特性) + [TiFlash 查询结果物化](tiflash/tiflash-results-materialization.md)(v6.5.0 实验特性) From c12653d37afa8a73dcab540b6c7bbead8d81226c Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Tue, 6 Dec 2022 15:17:58 +0800 Subject: [PATCH 30/38] fix CI errors --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 838cf9803b0e..a1436a90d9bd 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -15,7 +15,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 > **注意:** > -> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp`](/system-variables.md#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 +> - 默认情况下 ([`tidb_allow_mpp = ON`](/system-variables.md#tidb_allow_mpp-从-v50-版本开始引入)),TiDB 优化器将依据查询代价智能选择下推查询到 TiKV 或 TiFlash。如需强制使用 TiFlash 查询,你可以设置系统变量 [`tidb_enforce_mpp`](/system-variables.md#tidb_enforce_mpp-从-v51-版本开始引入) 为 `ON`。 > - 在实验特性阶段,该功能默认关闭。要开启此功能,请设置系统变量 [`tidb_enable_tiflash_read_for_write_stmt`](/system-variables.md#tidb_enable_tiflash_read_for_write_stmt-从-v630-版本开始引入) 为 `ON`。 `INSERT INTO SELECT` 语法如下: From 97bf1bf61b9da52885f23d67539fc8b8c0582370 Mon Sep 17 00:00:00 2001 From: Yu Liu <2842195+moyun@users.noreply.github.com> Date: Tue, 6 Dec 2022 16:39:25 +0900 Subject: [PATCH 31/38] Apply suggestions from code review update as suggested Co-authored-by: Liqi Geng --- tiflash/tiflash-results-materialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index a1436a90d9bd..1b49cac9a020 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -58,7 +58,7 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 调整。 +* TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 调整。从 v6.5.0 版本开始,不推荐使用 [txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit) 来控制事务内存大小,详见该配置项文档。 更多信息,请参考 [TiDB 内存控制](/configure-memory-usage.md)。 From fee718679387659a5b39de4273ed459600887d89 Mon Sep 17 00:00:00 2001 From: Yu Liu <2842195+moyun@users.noreply.github.com> Date: Tue, 6 Dec 2022 18:57:59 +0900 Subject: [PATCH 32/38] Update system-variables.md Co-authored-by: Liqi Geng --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index af5811e9ed0a..38ee5b034648 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1556,7 +1556,7 @@ Query OK, 0 rows affected (0.09 sec) > **警告:** > -> TiFlash 查询结果物化目前是实验性功能,请注意使用场景限制。 +> 当前版本中该变量控制的功能是实验性功能,暂不建议在生产环境中使用。 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 From 98251fff60fceb653a9fdcda38bf52f1098adc1f Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 7 Dec 2022 13:38:22 +0800 Subject: [PATCH 33/38] Apply suggestions from code review --- experimental-features.md | 2 +- system-variables.md | 6 +++++- tiflash/tiflash-results-materialization.md | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/experimental-features.md b/experimental-features.md index 86634e104c82..fe86b23c90f4 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -37,7 +37,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 实验特性) -+ [TiFlash 查询结果物化](tiflash/tiflash-results-materialization.md)(v6.5.0 实验特性) ++ [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md)(v6.5.0 实验特性) ## 存储 diff --git a/system-variables.md b/system-variables.md index 38ee5b034648..e2cf56b103ce 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1561,7 +1561,11 @@ Query OK, 0 rows affected (0.09 sec) - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 - 默认值:`OFF` -- 这个变量用于控制是否开启 [TiFlash 查询结果物化特性](/tiflash/tiflash-results-materialization.md)。 +- 这个变量用于控制包含增删改的 SQL 语句中的读取操作能否下推到 TiFlash,比如: + + - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/[tiflash-results-materialization.md](http://tiflash-results-materialization.md/))) + - `UPDATE` 和 `DELETE` 语句中的 `WHERE` 条件过滤 + - `INSERT`、`UPDATE`、`DELETE` 语句中的子查询 ### `tidb_enable_tmp_storage_on_oom` diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index 1b49cac9a020..c9922745fb36 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -9,9 +9,9 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 > > 该功能目前是实验性功能,请注意使用场景限制。该功能会在未事先通知的情况下发生变化或删除。语法和实现可能会在 GA 前发生变化。如果发现 bug,请在 GitHub 上提交 [issue](https://github.com/pingcap/tidb/issues) 反馈。 -本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现 TiFlash 查询结果物化至某一指定的 TiDB 表中。 +本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现将 TiFlash 查询结果保存至某一指定的 TiDB 表中。 -从 v6.5.0 起,执行 `INSERT INTO SELECT` 语句时,通过将 `SELECT` 子句下推到 TiFlash 可以把 TiFlash 计算得到的查询结果保存到指定的 TiDB 表中,即物化了 TiFlash 的查询结果。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 +从 v6.5.0 起,TiDB 支持将 TiFlash 查询结果保存到数据表中,即物化了 TiFlash 的查询结果。执行 `INSERT INTO SELECT` 语句时,如果 TiDB 将 `SELECT` 子查询下推到了 TiFlash, TiFlash 的查询结果可以保存到 `INSERT INTO` 指定的 TiDB 表中。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 > **注意:** > From 47ba9bba9fe4e84cdaac96d4e5f27365388b4ca0 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 7 Dec 2022 13:45:19 +0800 Subject: [PATCH 34/38] fix link errors --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index e2cf56b103ce..ca8698faa8fa 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1563,7 +1563,7 @@ Query OK, 0 rows affected (0.09 sec) - 默认值:`OFF` - 这个变量用于控制包含增删改的 SQL 语句中的读取操作能否下推到 TiFlash,比如: - - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/[tiflash-results-materialization.md](http://tiflash-results-materialization.md/))) + - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/[tiflash-results-materialization.md)) - `UPDATE` 和 `DELETE` 语句中的 `WHERE` 条件过滤 - `INSERT`、`UPDATE`、`DELETE` 语句中的子查询 From 17db4318a95a2b5d3f0703d9abd4768a4d8984b4 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 7 Dec 2022 13:46:11 +0800 Subject: [PATCH 35/38] fix CI errors --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index ca8698faa8fa..56d9e34c59e1 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1563,7 +1563,7 @@ Query OK, 0 rows affected (0.09 sec) - 默认值:`OFF` - 这个变量用于控制包含增删改的 SQL 语句中的读取操作能否下推到 TiFlash,比如: - - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/[tiflash-results-materialization.md)) + - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md)) - `UPDATE` 和 `DELETE` 语句中的 `WHERE` 条件过滤 - `INSERT`、`UPDATE`、`DELETE` 语句中的子查询 From f94a09445d54e03c7c3a6765b77f3958251defe3 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Wed, 7 Dec 2022 15:55:17 +0800 Subject: [PATCH 36/38] Update system-variables.md Co-authored-by: Liqi Geng --- system-variables.md | 1 - 1 file changed, 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 56d9e34c59e1..46f9455e7b40 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1565,7 +1565,6 @@ Query OK, 0 rows affected (0.09 sec) - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md)) - `UPDATE` 和 `DELETE` 语句中的 `WHERE` 条件过滤 - - `INSERT`、`UPDATE`、`DELETE` 语句中的子查询 ### `tidb_enable_tmp_storage_on_oom` From 95ac8005d8805fe54225d8c95e70498bb22fdeeb Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 8 Dec 2022 09:37:09 +0800 Subject: [PATCH 37/38] format updates --- tiflash/tiflash-results-materialization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tiflash/tiflash-results-materialization.md b/tiflash/tiflash-results-materialization.md index c9922745fb36..a23f3730bbd5 100644 --- a/tiflash/tiflash-results-materialization.md +++ b/tiflash/tiflash-results-materialization.md @@ -11,7 +11,7 @@ summary: 介绍如何在同一个事务中保存 TiFlash 的查询结果。 本文介绍如何在同一个事务 (`INSERT INTO SELECT`) 中实现将 TiFlash 查询结果保存至某一指定的 TiDB 表中。 -从 v6.5.0 起,TiDB 支持将 TiFlash 查询结果保存到数据表中,即物化了 TiFlash 的查询结果。执行 `INSERT INTO SELECT` 语句时,如果 TiDB 将 `SELECT` 子查询下推到了 TiFlash, TiFlash 的查询结果可以保存到 `INSERT INTO` 指定的 TiDB 表中。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 +从 v6.5.0 起,TiDB 支持将 TiFlash 查询结果保存到数据表中,即物化了 TiFlash 的查询结果。执行 `INSERT INTO SELECT` 语句时,如果 TiDB 将 `SELECT` 子查询下推到了 TiFlash,TiFlash 的查询结果可以保存到 `INSERT INTO` 指定的 TiDB 表中。v6.5.0 之前的 TiDB 版本不允许此类行为,即通过 TiFlash 执行的查询必须是只读的,你需要从应用程序层面接收 TiFlash 返回的结果,然后另行在其它事务或处理中保存结果。 > **注意:** > @@ -58,7 +58,7 @@ SELECT app_name, country FROM t1; ## 限制 -* TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 调整。从 v6.5.0 版本开始,不推荐使用 [txn-total-size-limit](/tidb-configuration-file.md#txn-total-size-limit) 来控制事务内存大小,详见该配置项文档。 +* TiDB 对 `INSERT INTO SELECT` 语句的内存限制可以通过系统变量 [`tidb_mem_quota_query`](/system-variables.md#tidb_mem_quota_query) 调整。从 v6.5.0 版本开始,不推荐使用 [`txn-total-size-limit`](/tidb-configuration-file.md#txn-total-size-limit) 来控制事务内存大小,详见该配置项文档。 更多信息,请参考 [TiDB 内存控制](/configure-memory-usage.md)。 From c90460f18802876abe6889c5c04c29ad9dbf5655 Mon Sep 17 00:00:00 2001 From: Grace Cai Date: Thu, 8 Dec 2022 09:47:38 +0800 Subject: [PATCH 38/38] Update system-variables.md Co-authored-by: Aolin --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index 46f9455e7b40..ab4d0fc8cc4e 100644 --- a/system-variables.md +++ b/system-variables.md @@ -1564,7 +1564,7 @@ Query OK, 0 rows affected (0.09 sec) - 这个变量用于控制包含增删改的 SQL 语句中的读取操作能否下推到 TiFlash,比如: - `INSERT INTO SELECT` 语句中的 `SELECT` 查询(典型应用场景为 [TiFlash 查询结果物化](/tiflash/tiflash-results-materialization.md)) - - `UPDATE` 和 `DELETE` 语句中的 `WHERE` 条件过滤 + - `UPDATE` 和 `DELETE` 语句中的 `WHERE` 条件过滤 ### `tidb_enable_tmp_storage_on_oom`