From 870ba5122a7feba309a8fa1bfb7e7f1903cf3687 Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Fri, 22 May 2020 14:21:14 +0800 Subject: [PATCH 01/15] perf-tuning: add blacklist-control-plan.md --- blacklist-control-plan.md | 139 +++++++++++++++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 1 deletion(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 2e8dc118d1b8..7bac915fcda8 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -3,4 +3,141 @@ title: 优化规则及表达式下推的黑名单 category: performance --- -# 优化规则及表达式下推的黑名单 \ No newline at end of file +# 优化规则及表达式下推的黑名单 + +## 优化规则黑名单 + +**优化规则黑名单**是针对优化规则的调优手段之一,主要用于手动禁用一些优化规则。 + +### 重要的优化规则 + +|**优化规则**|**规则名称**|**简介**| +| :--- | :--- | :--- | +| 列裁剪 | column_prune | 对于上层算子不需要的列,不在下层算子输出该列,减少计算 | +| 子查询去关联 | decorrelate | 尝试对相关子查询进行改写,将其转换为普通 join 或 aggression 计算 | +| 聚合消除 | aggregation_eliminate | 尝试消除执行计划中的某些不必要的聚合算子 | +| 投影消除 | projection_eliminate | 消除执行计划中不必要的投影算子 | +| 最大最小消除 | max_min_eliminate | 改写聚合中的 max/min 计算,转化为 `order by` + `limit 1` | +| 谓词下推 | predicate_push_down | 尝试将执行计划中过滤条件下推到离数据源更近的算子上 | +| 外连接消除 | outer_join_eliminate | 尝试消除执行计划中不必要的 left join 或者 right join | +| 分区裁剪 | partition_processor | 将分区表查询改成为用 union all,并裁剪掉不满足过滤条件的分区 | +| 聚合下推 | aggregation_push_down | 尝试将执行计划中的聚合算子下推到更底层的计算节点 | +| TopN 下推 | topn_push_down | 尝试将执行计划中的 TopN 算子下推到离数据源更近的算子上 | +| Join 重排序 | join_reorder | 对多表 join 确定连接顺序 | + +### 禁用优化规则 + +当某些优化规则在一些特殊查询中的优化结果不理想时,用户可以使用**优化规则黑名单**禁用一些优化规则。 + +#### 使用方法 + +> **注意:** +> +> 以下操作都需要数据库的 root 权限。 +每个优化规则都有各自的名字,比如列裁剪的名字是 "column_prune"。所有优化规则的名字都可以在[重要的优化规则](#重要的优化规则)表格中第二列查到。 + +当用户想禁用某些规则时,可以在 `mysql.opt_rule_blacklist` 表中写入规则的名字,比如: + +{{< copyable "sql" >}} + +```sql +insert into mysql.opt_rule_blacklist values("join_reorder"),("topn_push_down"); +``` + +执行以下 SQL 语句让禁用规则立即生效: + +{{< copyable "sql" >}} + +```sql +admin reload opt_rule_blacklist +``` + +需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 `admin reload`: + +{{< copyable "sql" >}} + +```sql +delete from mysql.opt_rule_blacklist where name in ("join_reoder", "topn_push_down") +admin reload opt_rule_blacklist +``` + +## 表达式下推黑名单 + +**表达式下推黑名单**是针对表达式下推的调优手段之一,主要用于对于某些存储类型手动禁用一些表达式。 + +### 禁止特定表达式下推 + +当函数的计算过程由于下推而出现异常时,可通过黑名单功能禁止其下推来快速恢复业务。具体而言,你可以将上述支持的函数或运算符名加入黑名单 `mysql.expr_pushdown_blacklist` 中,以禁止特定表达式下推。 + +`mysql.expr_pushdown_blacklist` 的 schema 如下: + +```sql +tidb> desc mysql.expr_pushdown_blacklist; ++------------+--------------+------+------+-------------------+-------+ +| Field | Type | Null | Key | Default | Extra | ++------------+--------------+------+------+-------------------+-------+ +| name | char(100) | NO | | NULL | | +| store_type | char(100) | NO | | tikv,tiflash,tidb | | +| reason | varchar(200) | YES | | NULL | | ++------------+--------------+------+------+-------------------+-------+ +3 rows in set (0.00 sec) +``` + +以上结果字段解释如下: + ++ `name` 为禁止下推的函数名。 ++ `store_type` 指明希望禁止该函数下推到哪些存储引擎。目前 TiDB 支持三种存储引擎,分别为 `tikv`、`tidb` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间应以逗号隔开。 ++ `reason` 列可以记录该函数被加入黑名单的原因。 + +### 表达式黑名单用法示例 + +以下示例首先将运算符 `<` 及 `>` 加入黑名单,然后将运算符 `>` 从黑名单中移出。 + +黑名单是否生效可以从 `explain` 结果中进行观察(参见[如何理解 `explain` 结果](/query-execution-plan.md))。 + +```sql +tidb> create table t(a int); +Query OK, 0 rows affected (0.06 sec) +tidb> explain select * from t where a < 2 and a > 2; ++-------------------------+----------+-----------+---------------+------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------+----------+-----------+---------------+------------------------------------+ +| TableReader_7 | 0.00 | root | | data:Selection_6 | +| └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | +| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | ++-------------------------+----------+-----------+---------------+------------------------------------+ +3 rows in set (0.00 sec) +tidb> insert into mysql.expr_pushdown_blacklist values('<', 'tikv',''), ('>','tikv',''); +Query OK, 2 rows affected (0.01 sec) +Records: 2 Duplicates: 0 Warnings: 0 +tidb> admin reload expr_pushdown_blacklist; +Query OK, 0 rows affected (0.00 sec) +tidb> explain select * from t where a < 2 and a > 2; ++-------------------------+----------+-----------+---------------+------------------------------------+ +| id | estRows | task | access object | operator info | ++-------------------------+----------+-----------+---------------+------------------------------------+ +| Selection_7 | 10000.00 | root | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | +| └─TableReader_6 | 10000.00 | root | | data:TableFullScan_5 | +| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | ++-------------------------+----------+-----------+---------------+------------------------------------+ +3 rows in set (0.00 sec) +tidb> delete from mysql.expr_pushdown_blacklist where name = '>'; +Query OK, 1 row affected (0.01 sec) +tidb> admin reload expr_pushdown_blacklist; +Query OK, 0 rows affected (0.00 sec) +tidb> explain select * from t where a < 2 and a > 2; ++---------------------------+----------+-----------+---------------+--------------------------------+ +| id | estRows | task | access object | operator info | ++---------------------------+----------+-----------+---------------+--------------------------------+ +| Selection_8 | 0.00 | root | | lt(ssb_1.t.a, 2) | +| └─TableReader_7 | 0.00 | root | | data:Selection_6 | +| └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2) | +| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | ++---------------------------+----------+-----------+---------------+--------------------------------+ +4 rows in set (0.00 sec) +``` + +> **注意:** +> +> - `admin reload expr_pushdown_blacklist` 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。 +> - 表达式黑名单功能在 v3.0.0 及以上版本中支持。 \ No newline at end of file From d9736a6858b0a997f8000b593882070cf1f40440 Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Mon, 25 May 2020 11:24:18 +0800 Subject: [PATCH 02/15] address comments --- blacklist-control-plan.md | 42 ++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 7bac915fcda8..3c6889fa6d22 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -33,7 +33,7 @@ category: performance > **注意:** > -> 以下操作都需要数据库的 root 权限。 +> 以下操作都需要数据库的 super privilege 权限。 每个优化规则都有各自的名字,比如列裁剪的名字是 "column_prune"。所有优化规则的名字都可以在[重要的优化规则](#重要的优化规则)表格中第二列查到。 当用户想禁用某些规则时,可以在 `mysql.opt_rule_blacklist` 表中写入规则的名字,比如: @@ -41,15 +41,15 @@ category: performance {{< copyable "sql" >}} ```sql -insert into mysql.opt_rule_blacklist values("join_reorder"),("topn_push_down"); +insert into mysql.opt_rule_blacklist values("join_reorder"), ("topn_push_down"); ``` -执行以下 SQL 语句让禁用规则立即生效: +执行以下 SQL 语句让禁用规则立即生效,包括相应 tidb-server 的所以旧链接: {{< copyable "sql" >}} ```sql -admin reload opt_rule_blacklist +admin reload opt_rule_blacklist; ``` 需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 `admin reload`: @@ -57,8 +57,8 @@ admin reload opt_rule_blacklist {{< copyable "sql" >}} ```sql -delete from mysql.opt_rule_blacklist where name in ("join_reoder", "topn_push_down") -admin reload opt_rule_blacklist +delete from mysql.opt_rule_blacklist where name in ("join_reoder", "topn_push_down"); +admin reload opt_rule_blacklist; ``` ## 表达式下推黑名单 @@ -95,9 +95,11 @@ tidb> desc mysql.expr_pushdown_blacklist; 黑名单是否生效可以从 `explain` 结果中进行观察(参见[如何理解 `explain` 结果](/query-execution-plan.md))。 +#### 使用说明样例 + +1. 对于以下 SQL,where 条件中的 `a < 2` 和 `a > 2` 可以下推到 TiKV 进行计算。 + ```sql -tidb> create table t(a int); -Query OK, 0 rows affected (0.06 sec) tidb> explain select * from t where a < 2 and a > 2; +-------------------------+----------+-----------+---------------+------------------------------------+ | id | estRows | task | access object | operator info | @@ -107,11 +109,22 @@ tidb> explain select * from t where a < 2 and a > 2; | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | +-------------------------+----------+-----------+---------------+------------------------------------+ 3 rows in set (0.00 sec) -tidb> insert into mysql.expr_pushdown_blacklist values('<', 'tikv',''), ('>','tikv',''); +``` + +2. 往 `mysql.expr_pushdown_blacklist` 表中插入禁用表达式,并且执行 `admin reload expr_pushdown_blacklist`。 + +```sql +tidb> insert into mysql.expr_pushdown_blacklist values('<','tikv',''), ('>','tikv',''); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 + tidb> admin reload expr_pushdown_blacklist; Query OK, 0 rows affected (0.00 sec) +``` + +3. 重新观察执行计划,发现表达式下推黑名单生效,where 条件被禁止下推。 + +```sql tidb> explain select * from t where a < 2 and a > 2; +-------------------------+----------+-----------+---------------+------------------------------------+ | id | estRows | task | access object | operator info | @@ -121,10 +134,21 @@ tidb> explain select * from t where a < 2 and a > 2; | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | +-------------------------+----------+-----------+---------------+------------------------------------+ 3 rows in set (0.00 sec) +``` + +4. 将某一表达式(`>` 大于)禁用规则从黑名单表中删除,并且执行 `admin reload expr_pushdown_blacklist`。 + +```sql tidb> delete from mysql.expr_pushdown_blacklist where name = '>'; Query OK, 1 row affected (0.01 sec) + tidb> admin reload expr_pushdown_blacklist; Query OK, 0 rows affected (0.00 sec) +``` + +5. 重新观察执行计划,被删除掉的表达式又可以重新被下推。 + +```sql tidb> explain select * from t where a < 2 and a > 2; +---------------------------+----------+-----------+---------------+--------------------------------+ | id | estRows | task | access object | operator info | From 77c7ef9da7664fe88a5d36632146181d5c8e953c Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Mon, 25 May 2020 14:59:16 +0800 Subject: [PATCH 03/15] address comment --- blacklist-control-plan.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 3c6889fa6d22..212254ee9aab 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -89,14 +89,19 @@ tidb> desc mysql.expr_pushdown_blacklist; + `store_type` 指明希望禁止该函数下推到哪些存储引擎。目前 TiDB 支持三种存储引擎,分别为 `tikv`、`tidb` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间应以逗号隔开。 + `reason` 列可以记录该函数被加入黑名单的原因。 +### 使用方法 + +执行以下步骤,可将一个或多个函数或运算符加入黑名单: + +向 `mysql.expr_pushdown_blacklist` 插入对应的函数名或运算符名以及希望禁止下推的存储类型集合。 +执行 `admin reload expr_pushdown_blacklist;`。 + ### 表达式黑名单用法示例 以下示例首先将运算符 `<` 及 `>` 加入黑名单,然后将运算符 `>` 从黑名单中移出。 黑名单是否生效可以从 `explain` 结果中进行观察(参见[如何理解 `explain` 结果](/query-execution-plan.md))。 -#### 使用说明样例 - 1. 对于以下 SQL,where 条件中的 `a < 2` 和 `a > 2` 可以下推到 TiKV 进行计算。 ```sql From 1a1219c5340fb02d21508f05453eaf10aef00866 Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Mon, 25 May 2020 15:04:15 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=A7=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blacklist-control-plan.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 212254ee9aab..b138673d7c9a 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -91,11 +91,20 @@ tidb> desc mysql.expr_pushdown_blacklist; ### 使用方法 +#### 加入黑名单 + 执行以下步骤,可将一个或多个函数或运算符加入黑名单: 向 `mysql.expr_pushdown_blacklist` 插入对应的函数名或运算符名以及希望禁止下推的存储类型集合。 执行 `admin reload expr_pushdown_blacklist;`。 +#### 移出黑名单 + +执行以下步骤,可将一个或多个函数及运算符移出黑名单: + +从 `mysql.expr_pushdown_blacklist` 表中删除对应的函数名或运算符名。 +执行 `admin reload expr_pushdown_blacklist;`。 + ### 表达式黑名单用法示例 以下示例首先将运算符 `<` 及 `>` 加入黑名单,然后将运算符 `>` 从黑名单中移出。 From 391130f4d7f81ceba712779449e3bab437b3c239 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Mon, 25 May 2020 16:53:16 +0800 Subject: [PATCH 05/15] Update format and wording --- blacklist-control-plan.md | 208 +++++++++++++++++++++++--------------- 1 file changed, 128 insertions(+), 80 deletions(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index b138673d7c9a..71070e562eb6 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -1,9 +1,12 @@ --- -title: 优化规则及表达式下推的黑名单 +title: 优化规则与表达式下推的黑名单 +summary: 了解优化规则与表达式下推的黑名单。 category: performance --- -# 优化规则及表达式下推的黑名单 +# 优化规则与表达式下推的黑名单 + +本文主要介绍优化规则的黑名单与表达式下推的黑名单。 ## 优化规则黑名单 @@ -27,39 +30,38 @@ category: performance ### 禁用优化规则 -当某些优化规则在一些特殊查询中的优化结果不理想时,用户可以使用**优化规则黑名单**禁用一些优化规则。 +当某些优化规则在一些特殊查询中的优化结果不理想时,可以使用**优化规则黑名单**禁用一些优化规则。 #### 使用方法 > **注意:** > -> 以下操作都需要数据库的 super privilege 权限。 -每个优化规则都有各自的名字,比如列裁剪的名字是 "column_prune"。所有优化规则的名字都可以在[重要的优化规则](#重要的优化规则)表格中第二列查到。 +> 以下操作都需要数据库的 super privilege 权限。每个优化规则都有各自的名字,比如列裁剪的名字是 "column_prune"。所有优化规则的名字都可以在[重要的优化规则](#重要的优化规则)表格中第二列查到。 -当用户想禁用某些规则时,可以在 `mysql.opt_rule_blacklist` 表中写入规则的名字,比如: +- 如果你想禁用某些规则,可以在 `mysql.opt_rule_blacklist` 表中写入规则的名字,例如: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -insert into mysql.opt_rule_blacklist values("join_reorder"), ("topn_push_down"); -``` + ```sql + insert into mysql.opt_rule_blacklist values("join_reorder"), ("topn_push_down"); + ``` -执行以下 SQL 语句让禁用规则立即生效,包括相应 tidb-server 的所以旧链接: + 执行以下 SQL 语句可让禁用规则立即生效,包括相应 tidb-server 的所有旧链接: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -admin reload opt_rule_blacklist; -``` + ```sql + admin reload opt_rule_blacklist; + ``` -需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 `admin reload`: +- 需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 `admin reload`: -{{< copyable "sql" >}} + {{< copyable "sql" >}} -```sql -delete from mysql.opt_rule_blacklist where name in ("join_reoder", "topn_push_down"); -admin reload opt_rule_blacklist; -``` + ```sql + delete from mysql.opt_rule_blacklist where name in ("join_reoder", "topn_push_down"); + admin reload opt_rule_blacklist; + ``` ## 表达式下推黑名单 @@ -71,8 +73,13 @@ admin reload opt_rule_blacklist; `mysql.expr_pushdown_blacklist` 的 schema 如下: +{{< copyable "sql" >}} + +```sql +desc mysql.expr_pushdown_blacklist; +``` + ```sql -tidb> desc mysql.expr_pushdown_blacklist; +------------+--------------+------+------+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+------+-------------------+-------+ @@ -85,25 +92,27 @@ tidb> desc mysql.expr_pushdown_blacklist; 以上结果字段解释如下: -+ `name` 为禁止下推的函数名。 -+ `store_type` 指明希望禁止该函数下推到哪些存储引擎。目前 TiDB 支持三种存储引擎,分别为 `tikv`、`tidb` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间应以逗号隔开。 -+ `reason` 列可以记录该函数被加入黑名单的原因。 ++ `name`:禁止下推的函数名。 ++ `store_type`:用于指明希望禁止该函数下推到哪些存储引擎。目前 TiDB 支持三种存储引擎,分别为 `tikv`、`tidb` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间需用逗号隔开。 ++ `reason`:用于记录该函数被加入黑名单的原因。 ### 使用方法 #### 加入黑名单 -执行以下步骤,可将一个或多个函数或运算符加入黑名单: +如果要将一个或多个函数或运算符加入黑名单,执行以下步骤: + +1. 向 `mysql.expr_pushdown_blacklist` 插入对应的函数名或运算符名以及希望禁止下推的存储类型集合。 -向 `mysql.expr_pushdown_blacklist` 插入对应的函数名或运算符名以及希望禁止下推的存储类型集合。 -执行 `admin reload expr_pushdown_blacklist;`。 +2. 执行 `admin reload expr_pushdown_blacklist;`。 #### 移出黑名单 -执行以下步骤,可将一个或多个函数及运算符移出黑名单: +如果要将一个或多个函数及运算符移出黑名单,执行以下步骤: -从 `mysql.expr_pushdown_blacklist` 表中删除对应的函数名或运算符名。 -执行 `admin reload expr_pushdown_blacklist;`。 +1. 从 `mysql.expr_pushdown_blacklist` 表中删除对应的函数名或运算符名。 + +2. 执行 `admin reload expr_pushdown_blacklist;`。 ### 表达式黑名单用法示例 @@ -111,69 +120,108 @@ tidb> desc mysql.expr_pushdown_blacklist; 黑名单是否生效可以从 `explain` 结果中进行观察(参见[如何理解 `explain` 结果](/query-execution-plan.md))。 -1. 对于以下 SQL,where 条件中的 `a < 2` 和 `a > 2` 可以下推到 TiKV 进行计算。 +1. 对于以下 SQL 语句,`where` 条件中的 `a < 2` 和 `a > 2` 可以下推到 TiKV 进行计算。 -```sql -tidb> explain select * from t where a < 2 and a > 2; -+-------------------------+----------+-----------+---------------+------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+----------+-----------+---------------+------------------------------------+ -| TableReader_7 | 0.00 | root | | data:Selection_6 | -| └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | -| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | -+-------------------------+----------+-----------+---------------+------------------------------------+ -3 rows in set (0.00 sec) -``` + {{< copyable "sql" >}} + + ```sql + explain select * from t where a < 2 and a > 2; + ``` + + ```sql + +-------------------------+----------+-----------+---------------+------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------+----------+-----------+---------------+------------------------------------+ + | TableReader_7 | 0.00 | root | | data:Selection_6 | + | └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | + | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | + +-------------------------+----------+-----------+---------------+------------------------------------+ + 3 rows in set (0.00 sec) + ``` 2. 往 `mysql.expr_pushdown_blacklist` 表中插入禁用表达式,并且执行 `admin reload expr_pushdown_blacklist`。 -```sql -tidb> insert into mysql.expr_pushdown_blacklist values('<','tikv',''), ('>','tikv',''); -Query OK, 2 rows affected (0.01 sec) -Records: 2 Duplicates: 0 Warnings: 0 + {{< copyable "sql" >}} -tidb> admin reload expr_pushdown_blacklist; -Query OK, 0 rows affected (0.00 sec) -``` + ```sql + insert into mysql.expr_pushdown_blacklist values('<','tikv',''), ('>','tikv',''); + ``` -3. 重新观察执行计划,发现表达式下推黑名单生效,where 条件被禁止下推。 + ```sql + Query OK, 2 rows affected (0.01 sec) + Records: 2 Duplicates: 0 Warnings: 0 + ``` -```sql -tidb> explain select * from t where a < 2 and a > 2; -+-------------------------+----------+-----------+---------------+------------------------------------+ -| id | estRows | task | access object | operator info | -+-------------------------+----------+-----------+---------------+------------------------------------+ -| Selection_7 | 10000.00 | root | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | -| └─TableReader_6 | 10000.00 | root | | data:TableFullScan_5 | -| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | -+-------------------------+----------+-----------+---------------+------------------------------------+ -3 rows in set (0.00 sec) -``` + {{< copyable "sql" >}} + + ```sql + admin reload expr_pushdown_blacklist; + ``` + + ```sql + Query OK, 0 rows affected (0.00 sec) + ``` + +3. 重新观察执行计划,发现表达式下推黑名单生效,`where` 条件被禁止下推。 + + {{< copyable "sql" >}} + + ```sql + explain select * from t where a < 2 and a > 2; + ``` + + ```sql + +-------------------------+----------+-----------+---------------+------------------------------------+ + | id | estRows | task | access object | operator info | + +-------------------------+----------+-----------+---------------+------------------------------------+ + | Selection_7 | 10000.00 | root | | gt(ssb_1.t.a, 2), lt(ssb_1.t.a, 2) | + | └─TableReader_6 | 10000.00 | root | | data:TableFullScan_5 | + | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | + +-------------------------+----------+-----------+---------------+------------------------------------+ + 3 rows in set (0.00 sec) + ``` 4. 将某一表达式(`>` 大于)禁用规则从黑名单表中删除,并且执行 `admin reload expr_pushdown_blacklist`。 -```sql -tidb> delete from mysql.expr_pushdown_blacklist where name = '>'; -Query OK, 1 row affected (0.01 sec) + {{< copyable "sql" >}} -tidb> admin reload expr_pushdown_blacklist; -Query OK, 0 rows affected (0.00 sec) -``` + ```sql + delete from mysql.expr_pushdown_blacklist where name = '>'; + ``` + + ```sql + Query OK, 1 row affected (0.01 sec) + ``` + + {{< copyable "sql" >}} + + ```sql + admin reload expr_pushdown_blacklist; + ``` + + ```sql + Query OK, 0 rows affected (0.00 sec) + ``` 5. 重新观察执行计划,被删除掉的表达式又可以重新被下推。 -```sql -tidb> explain select * from t where a < 2 and a > 2; -+---------------------------+----------+-----------+---------------+--------------------------------+ -| id | estRows | task | access object | operator info | -+---------------------------+----------+-----------+---------------+--------------------------------+ -| Selection_8 | 0.00 | root | | lt(ssb_1.t.a, 2) | -| └─TableReader_7 | 0.00 | root | | data:Selection_6 | -| └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2) | -| └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | -+---------------------------+----------+-----------+---------------+--------------------------------+ -4 rows in set (0.00 sec) -``` + {{< copyable "sql" >}} + + ```sql + explain select * from t where a < 2 and a > 2; + ``` + + ```sql + +---------------------------+----------+-----------+---------------+--------------------------------+ + | id | estRows | task | access object | operator info | + +---------------------------+----------+-----------+---------------+--------------------------------+ + | Selection_8 | 0.00 | root | | lt(ssb_1.t.a, 2) | + | └─TableReader_7 | 0.00 | root | | data:Selection_6 | + | └─Selection_6 | 0.00 | cop[tikv] | | gt(ssb_1.t.a, 2) | + | └─TableFullScan_5 | 10000.00 | cop[tikv] | table:t | keep order:false, stats:pseudo | + +---------------------------+----------+-----------+---------------+--------------------------------+ + 4 rows in set (0.00 sec) + ``` > **注意:** > From 9f24c0f569bde2f796515a40fad37c3cfbc90705 Mon Sep 17 00:00:00 2001 From: "Zhuomin(Charming) Liu" Date: Tue, 26 May 2020 13:36:07 +0800 Subject: [PATCH 06/15] Update blacklist-control-plan.md Co-authored-by: Zhang Jian --- blacklist-control-plan.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 71070e562eb6..e7267194f30b 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -162,7 +162,7 @@ desc mysql.expr_pushdown_blacklist; Query OK, 0 rows affected (0.00 sec) ``` -3. 重新观察执行计划,发现表达式下推黑名单生效,`where` 条件被禁止下推。 +3. 重新观察执行计划,发现表达式下推黑名单生效,`where` 条件中的 `<` 和 `>` 没有被下推到 TiKV Coprocessor 上。 {{< copyable "sql" >}} @@ -226,4 +226,4 @@ desc mysql.expr_pushdown_blacklist; > **注意:** > > - `admin reload expr_pushdown_blacklist` 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。 -> - 表达式黑名单功能在 v3.0.0 及以上版本中支持。 \ No newline at end of file +> - 表达式黑名单功能在 v3.0.0 及以上版本中支持。 From a738608f905c6c525dfdc2fce09ebf4dfb46adf5 Mon Sep 17 00:00:00 2001 From: "Zhuomin(Charming) Liu" Date: Tue, 26 May 2020 13:37:43 +0800 Subject: [PATCH 07/15] Update blacklist-control-plan.md Co-authored-by: Zhang Jian --- blacklist-control-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index e7267194f30b..390de89cff95 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -203,7 +203,7 @@ desc mysql.expr_pushdown_blacklist; Query OK, 0 rows affected (0.00 sec) ``` -5. 重新观察执行计划,被删除掉的表达式又可以重新被下推。 +5. 重新观察执行计划,`<` 和 `>` 表达式又可以重新被下推到 TiKV Coprocessor。 {{< copyable "sql" >}} From fe0c3ca23b54ebcc63f0d30375959fd74d411bcc Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Tue, 26 May 2020 13:54:00 +0800 Subject: [PATCH 08/15] address comment --- functions-and-operators/expressions-pushed-down.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/functions-and-operators/expressions-pushed-down.md b/functions-and-operators/expressions-pushed-down.md index cb009cbcbb25..52410db3f801 100644 --- a/functions-and-operators/expressions-pushed-down.md +++ b/functions-and-operators/expressions-pushed-down.md @@ -44,6 +44,10 @@ tidb> desc mysql.expr_pushdown_blacklist; + `store_type` 指明希望禁止该函数下推到哪些存储引擎。目前 TiDB 支持三种存储引擎,分别为 `tikv`、`tidb` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间应以逗号隔开。 + `reason` 列可以记录该函数被加入黑名单的原因。 +> **注意**: +> +> `tidb` 是一种特殊的 store_type,其含义是 tidb 内存表,比如:`PERFORMANCE_SCHEMA.events_statements_summary_by_digest`,属于系统表的一种,非特殊情况不用考虑这种存储引擎。 + ### 加入黑名单 执行以下步骤,可将一个或多个函数或运算符加入黑名单: From 5340c093a74e8a1cdcf3240dd0112c8b110d64fa Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Tue, 26 May 2020 14:54:37 +0800 Subject: [PATCH 09/15] address comments --- blacklist-control-plan.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 390de89cff95..14006e166715 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -53,6 +53,9 @@ category: performance ```sql admin reload opt_rule_blacklist; ``` +> **注意:** +> +> `admin reload opt_rule_blacklist;` 只会让链接的 tidb-server 立即生效,如果需要让集群内所有 tidb-server 都生效需要对每个 tidb 节点执行一次该语句。 - 需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 `admin reload`: @@ -67,6 +70,17 @@ category: performance **表达式下推黑名单**是针对表达式下推的调优手段之一,主要用于对于某些存储类型手动禁用一些表达式。 +### 已支持下推的表达式 + +| 表达式分类 | 具体操作 | +| :-------------- | :------------------------------------- | +| [逻辑运算](/functions-and-operators/operators.md#逻辑操作符) | AND (&&), OR (||), NOT (!) | +| [比较运算](/functions-and-operators/operators.md#比较方法和操作符) | <, <=, =, != (<>), >, >=, [`<=>`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to), [`IN()`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in), IS NULL, LIKE, IS TRUE, IS FALSE, [`COALESCE()`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce) | +| [数值运算](/functions-and-operators/numeric-functions-and-operators.md) | +, -, *, /, [`ABS()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_abs), [`CEIL()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceil), [`CEILING()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceiling), [`FLOOR()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_floor) | +| [控制流运算](/functions-and-operators/control-flow-functions.md) | [`CASE`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case), [`IF()`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_if), [`IFNULL()`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull) | +| [JSON运算](/functions-and-operators/json-functions.md) | [JSON_TYPE(json_val)][json_type],
[JSON_EXTRACT(json_doc, path[, path] ...)][json_extract],
[JSON_UNQUOTE(json_val)][json_unquote],
[JSON_OBJECT(key, val[, key, val] ...)][json_object],
[JSON_ARRAY([val[, val] ...])][json_array],
[JSON_MERGE(json_doc, json_doc[, json_doc] ...)][json_merge],
[JSON_SET(json_doc, path, val[, path, val] ...)][json_set],
[JSON_INSERT(json_doc, path, val[, path, val] ...)][json_insert],
[JSON_REPLACE(json_doc, path, val[, path, val] ...)][json_replace],
[JSON_REMOVE(json_doc, path[, path] ...)][json_remove] | +| [日期运算](/functions-and-operators/date-and-time-functions.md) | [`DATE_FORMAT()`](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format) | + ### 禁止特定表达式下推 当函数的计算过程由于下推而出现异常时,可通过黑名单功能禁止其下推来快速恢复业务。具体而言,你可以将上述支持的函数或运算符名加入黑名单 `mysql.expr_pushdown_blacklist` 中,以禁止特定表达式下推。 @@ -114,6 +128,10 @@ desc mysql.expr_pushdown_blacklist; 2. 执行 `admin reload expr_pushdown_blacklist;`。 +> **注意:** +> +> `admin reload expr_pushdown_blacklist;` 只会让链接的 tidb-server 立即生效,如果需要让集群内所有 tidb-server 都生效需要对每个 tidb 节点执行一次该语句。 + ### 表达式黑名单用法示例 以下示例首先将运算符 `<` 及 `>` 加入黑名单,然后将运算符 `>` 从黑名单中移出。 From de30f525a719e0d274ee1ea926e1aba4bd1f7c4a Mon Sep 17 00:00:00 2001 From: "Zhuomin(Charming) Liu" Date: Tue, 26 May 2020 14:55:33 +0800 Subject: [PATCH 10/15] Update blacklist-control-plan.md Co-authored-by: Kenan Yao --- blacklist-control-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 14006e166715..35cad59f2e56 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -116,7 +116,7 @@ desc mysql.expr_pushdown_blacklist; 如果要将一个或多个函数或运算符加入黑名单,执行以下步骤: -1. 向 `mysql.expr_pushdown_blacklist` 插入对应的函数名或运算符名以及希望禁止下推的存储类型集合。 +1. 向 `mysql.expr_pushdown_blacklist` 插入对应的函数名或运算符名以及希望禁止下推的存储引擎集合。 2. 执行 `admin reload expr_pushdown_blacklist;`。 From 02e909f91717c3361bb2a0878739c5a71706aed5 Mon Sep 17 00:00:00 2001 From: Lilian Lee Date: Tue, 26 May 2020 14:58:29 +0800 Subject: [PATCH 11/15] Update blacklist-control-plan.md --- blacklist-control-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 35cad59f2e56..dc2e2eb798db 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -78,7 +78,7 @@ category: performance | [比较运算](/functions-and-operators/operators.md#比较方法和操作符) | <, <=, =, != (<>), >, >=, [`<=>`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to), [`IN()`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in), IS NULL, LIKE, IS TRUE, IS FALSE, [`COALESCE()`](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function_coalesce) | | [数值运算](/functions-and-operators/numeric-functions-and-operators.md) | +, -, *, /, [`ABS()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_abs), [`CEIL()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceil), [`CEILING()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_ceiling), [`FLOOR()`](https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_floor) | | [控制流运算](/functions-and-operators/control-flow-functions.md) | [`CASE`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case), [`IF()`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_if), [`IFNULL()`](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_ifnull) | -| [JSON运算](/functions-and-operators/json-functions.md) | [JSON_TYPE(json_val)][json_type],
[JSON_EXTRACT(json_doc, path[, path] ...)][json_extract],
[JSON_UNQUOTE(json_val)][json_unquote],
[JSON_OBJECT(key, val[, key, val] ...)][json_object],
[JSON_ARRAY([val[, val] ...])][json_array],
[JSON_MERGE(json_doc, json_doc[, json_doc] ...)][json_merge],
[JSON_SET(json_doc, path, val[, path, val] ...)][json_set],
[JSON_INSERT(json_doc, path, val[, path, val] ...)][json_insert],
[JSON_REPLACE(json_doc, path, val[, path, val] ...)][json_replace],
[JSON_REMOVE(json_doc, path[, path] ...)][json_remove] | +| [JSON 运算](/functions-and-operators/json-functions.md) | [JSON_TYPE(json_val)][json_type],
[JSON_EXTRACT(json_doc, path[, path] ...)][json_extract],
[JSON_UNQUOTE(json_val)][json_unquote],
[JSON_OBJECT(key, val[, key, val] ...)][json_object],
[JSON_ARRAY([val[, val] ...])][json_array],
[JSON_MERGE(json_doc, json_doc[, json_doc] ...)][json_merge],
[JSON_SET(json_doc, path, val[, path, val] ...)][json_set],
[JSON_INSERT(json_doc, path, val[, path, val] ...)][json_insert],
[JSON_REPLACE(json_doc, path, val[, path, val] ...)][json_replace],
[JSON_REMOVE(json_doc, path[, path] ...)][json_remove] | | [日期运算](/functions-and-operators/date-and-time-functions.md) | [`DATE_FORMAT()`](https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format) | ### 禁止特定表达式下推 From 33218c179e3800543f23c98ae2f073a64831c375 Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Tue, 26 May 2020 15:04:57 +0800 Subject: [PATCH 12/15] address comment --- blacklist-control-plan.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index 35cad59f2e56..f468a8028880 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -46,7 +46,7 @@ category: performance insert into mysql.opt_rule_blacklist values("join_reorder"), ("topn_push_down"); ``` - 执行以下 SQL 语句可让禁用规则立即生效,包括相应 tidb-server 的所有旧链接: + 执行以下 SQL 语句可让禁用规则立即生效,包括相应 TiDB Server 的所有旧链接: {{< copyable "sql" >}} @@ -55,7 +55,7 @@ category: performance ``` > **注意:** > -> `admin reload opt_rule_blacklist;` 只会让链接的 tidb-server 立即生效,如果需要让集群内所有 tidb-server 都生效需要对每个 tidb 节点执行一次该语句。 +> `admin reload opt_rule_blacklist` 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。 - 需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 `admin reload`: @@ -107,7 +107,10 @@ desc mysql.expr_pushdown_blacklist; 以上结果字段解释如下: + `name`:禁止下推的函数名。 -+ `store_type`:用于指明希望禁止该函数下推到哪些存储引擎。目前 TiDB 支持三种存储引擎,分别为 `tikv`、`tidb` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间需用逗号隔开。 ++ `store_type`:用于指明希望禁止该函数下推到哪些组件进行计算。组件可选 `tidb`、`tikv` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间需用逗号隔开。 + - `store_type` 为 `tidb` 时表示在读取 TiDB 内存表时,是否允许该函数在其他 TiDB Server 上执行。 + - `store_type` 为 `tikv` 时表示是否允许该函数在 TiKV Server 的 Coprocessor 模块中执行。 + - `store_type` 为 `tiflash` 时表示是否允许该函数在 TiFlash Server 的 Coprocessor 模块中执行。 + `reason`:用于记录该函数被加入黑名单的原因。 ### 使用方法 @@ -130,7 +133,7 @@ desc mysql.expr_pushdown_blacklist; > **注意:** > -> `admin reload expr_pushdown_blacklist;` 只会让链接的 tidb-server 立即生效,如果需要让集群内所有 tidb-server 都生效需要对每个 tidb 节点执行一次该语句。 +> `admin reload expr_pushdown_blacklist` 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。 ### 表达式黑名单用法示例 @@ -240,8 +243,3 @@ desc mysql.expr_pushdown_blacklist; +---------------------------+----------+-----------+---------------+--------------------------------+ 4 rows in set (0.00 sec) ``` - -> **注意:** -> -> - `admin reload expr_pushdown_blacklist` 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。 -> - 表达式黑名单功能在 v3.0.0 及以上版本中支持。 From 4ede81a7100f565bb0091d8220be45af23a3297c Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Tue, 26 May 2020 15:08:54 +0800 Subject: [PATCH 13/15] fix ci --- blacklist-control-plan.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/blacklist-control-plan.md b/blacklist-control-plan.md index e83ddfd5731d..f447e902615b 100644 --- a/blacklist-control-plan.md +++ b/blacklist-control-plan.md @@ -53,9 +53,10 @@ category: performance ```sql admin reload opt_rule_blacklist; ``` -> **注意:** -> -> `admin reload opt_rule_blacklist` 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。 + + > **注意:** + > + > `admin reload opt_rule_blacklist` 只对执行该 SQL 语句的 TiDB server 生效。若需要集群中所有 TiDB server 生效,需要在每台 TiDB server 上执行该 SQL 语句。 - 需要解除一条规则的禁用时,需要删除表中禁用该条规则的相应数据,再执行 `admin reload`: From 1c51b0f6af9e69f99e2e5cac39b764f3fe846bfc Mon Sep 17 00:00:00 2001 From: lzmhhh123 Date: Tue, 26 May 2020 19:43:00 +0800 Subject: [PATCH 14/15] change the expressions-pushed-down.md --- functions-and-operators/expressions-pushed-down.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/functions-and-operators/expressions-pushed-down.md b/functions-and-operators/expressions-pushed-down.md index 52410db3f801..1f74e56046c7 100644 --- a/functions-and-operators/expressions-pushed-down.md +++ b/functions-and-operators/expressions-pushed-down.md @@ -40,9 +40,12 @@ tidb> desc mysql.expr_pushdown_blacklist; 以上结果字段解释如下: -+ `name` 为禁止下推的函数名。 -+ `store_type` 指明希望禁止该函数下推到哪些存储引擎。目前 TiDB 支持三种存储引擎,分别为 `tikv`、`tidb` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间应以逗号隔开。 -+ `reason` 列可以记录该函数被加入黑名单的原因。 ++ `name`:禁止下推的函数名。 ++ `store_type`:用于指明希望禁止该函数下推到哪些组件进行计算。组件可选 `tidb`、`tikv` 和 `tiflash`。`store_type` 不区分大小写,如果需要禁止向多个存储引擎下推,各个存储之间需用逗号隔开。 + - `store_type` 为 `tidb` 时表示在读取 TiDB 内存表时,是否允许该函数在其他 TiDB Server 上执行。 + - `store_type` 为 `tikv` 时表示是否允许该函数在 TiKV Server 的 Coprocessor 模块中执行。 + - `store_type` 为 `tiflash` 时表示是否允许该函数在 TiFlash Server 的 Coprocessor 模块中执行。 ++ `reason`:用于记录该函数被加入黑名单的原因。 > **注意**: > From 2ec89efd982a67dce31b84c76482f4cf559383ca Mon Sep 17 00:00:00 2001 From: Keke Yi <40977455+yikeke@users.noreply.github.com> Date: Tue, 26 May 2020 22:36:49 +0800 Subject: [PATCH 15/15] Update functions-and-operators/expressions-pushed-down.md --- functions-and-operators/expressions-pushed-down.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions-and-operators/expressions-pushed-down.md b/functions-and-operators/expressions-pushed-down.md index 1f74e56046c7..fb650687558f 100644 --- a/functions-and-operators/expressions-pushed-down.md +++ b/functions-and-operators/expressions-pushed-down.md @@ -49,7 +49,7 @@ tidb> desc mysql.expr_pushdown_blacklist; > **注意**: > -> `tidb` 是一种特殊的 store_type,其含义是 tidb 内存表,比如:`PERFORMANCE_SCHEMA.events_statements_summary_by_digest`,属于系统表的一种,非特殊情况不用考虑这种存储引擎。 +> `tidb` 是一种特殊的 store_type,其含义是 TiDB 内存表,比如:`PERFORMANCE_SCHEMA.events_statements_summary_by_digest`,属于系统表的一种,非特殊情况不用考虑这种存储引擎。 ### 加入黑名单