Skip to content

Commit

Permalink
write document for mpp (#5702)
Browse files Browse the repository at this point in the history
  • Loading branch information
hanfei1991 authored Mar 24, 2021
1 parent a6f69bf commit 8f3189d
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
18 changes: 18 additions & 0 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,12 @@ mysql> SELECT * FROM t1;
* 1:aggregation 和 join 的请求会进行批量发送
* 2:所有的 cop 请求都会批量发送

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

- 作用域:SESSION | GLOBAL
- 默认值:ON(表示开启)
- 这个变量用于控制是否使用 TiFlash 的 MPP 模式执行查询。开启后 TiDB 会通过优化器自动判断是否选择 MPP 执行。MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数据交换并提供高性能、高吞吐的 SQL 算法。

### `tidb_allow_remove_auto_inc` <span class="version-mark">从 v2.1.18 和 v3.0.4 版本开始引入</span>

- 作用域:SESSION
Expand Down Expand Up @@ -221,6 +227,18 @@ mysql> SELECT * FROM t1;

在网络环境较差的情况下,适当增大该变量值可以有效缓解因为超时而向应用端报错的情况;而如果应用端希望更快地接到报错信息,则应该尽量减小该变量的值。

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

- 作用域:SESSION | GLOBAL
- 默认值:10240
- 单位为行数。如果 join 的对象为子查询,优化器无法估计子查询结果集大小,在这种情况下通过结果集行数判断。如果子查询的行数估计值小于该变量,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。

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

- 作用域:SESSION | GLOBAL
- 默认值:104857600(表示 100 兆)
- 如果表大小(字节数)小于该值,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。

### `tidb_build_stats_concurrency`

- 作用域:SESSION
Expand Down
41 changes: 41 additions & 0 deletions tiflash/use-tiflash.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,3 +244,44 @@ round without fraction, cast(int as decimal), date_add(datetime, int), date_add(
- 在聚合函数或者 WHERE 条件中包含了不在上述列表中的表达式,聚合或者相关的谓词过滤均不能下推
如查询遇到不支持的下推计算,则需要依赖 TiDB 完成剩余计算,可能会很大程度影响 TiFlash 加速效果。对于暂不支持的表达式,将会在后续陆续加入支持,也可以联系官方沟通。
## 使用 MPP 模式
TiFlash 支持 MPP 模式的查询执行,即在计算中引入跨节点的数据交换(data shuffle 过程)。MPP 模式默认开启,如需关闭可将全局/会话变量 [`tidb_allow_mpp`](/system-variables.md#tidb_allow_mpp-从-v50-ga-版本开始引入) 的值设为 `0` 或 `OFF`:
```shell
set @@session.tidb_allow_mpp=0
```

MPP 模式目前支持的物理算法有:Broadcast Hash Join、Shuffled Hash Join 和 Shuffled Hash Aggregation。算法的选择由优化器自动判断。通过 `EXPLAIN` 语句可以查看具体的查询执行计划。

以 TPC-H 测试集中的表结构为例:

```sql
mysql> explain select count(*) from customer c join nation n on c.c_nationkey=n.n_nationkey;
+------------------------------------------+------------+-------------------+---------------+----------------------------------------------------------------------------+
| id | estRows | task | access object | operator info |
+------------------------------------------+------------+-------------------+---------------+----------------------------------------------------------------------------+
| HashAgg_23 | 1.00 | root | | funcs:count(Column#16)->Column#15 |
| └─TableReader_25 | 1.00 | root | | data:ExchangeSender_24 |
| └─ExchangeSender_24 | 1.00 | batchCop[tiflash] | | ExchangeType: PassThrough |
| └─HashAgg_12 | 1.00 | batchCop[tiflash] | | funcs:count(1)->Column#16 |
| └─HashJoin_17 | 3000000.00 | batchCop[tiflash] | | inner join, equal:[eq(tpch.nation.n_nationkey, tpch.customer.c_nationkey)] |
| ├─ExchangeReceiver_21(Build) | 25.00 | batchCop[tiflash] | | |
| │ └─ExchangeSender_20 | 25.00 | batchCop[tiflash] | | ExchangeType: Broadcast |
| │ └─TableFullScan_18 | 25.00 | batchCop[tiflash] | table:n | keep order:false |
| └─TableFullScan_22(Probe) | 3000000.00 | batchCop[tiflash] | table:c | keep order:false |
+------------------------------------------+------------+-------------------+---------------+----------------------------------------------------------------------------+
9 rows in set (0.00 sec)
```

在执行计划中,出现了 `ExchangeReceiver``ExchangeSender` 算子。该执行计划表示 `nation` 表读取完毕后,经过 `ExchangeSender` 算子广播到各个节点中,与 `customer` 表先后进行 `HashJoin``HashAgg` 操作,再将结果返回至 TiDB 中。

> **注意:**
>
> MPP 模式默认不支持分区表。
TiFlash 提供了两个全局/会话变量决定是否选择 Broadcast Hash Join,分别为:

- [`tidb_broadcast_join_threshold_size`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-ga-版本开始引入),单位为 bytes。如果表大小(字节数)小于该值,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。
- [`tidb_broadcast_join_threshold_count`](/system-variables.md#tidb_broadcast_join_threshold_count-从-v50-ga-版本开始引入),单位为行数。如果 join 的对象为子查询,优化器无法估计子查询结果集大小,在这种情况下通过结果集行数判断。如果子查询的行数估计值小于该变量,则选择 Broadcast Hash Join 算法。否则选择 Shuffled Hash Join 算法。

0 comments on commit 8f3189d

Please sign in to comment.