oceanbase分布式执行计划

CREATE TABLE t1 (v1 INT, v2 INT) PARTITION BY HASH(v1) PARTITIONS 5;

Query OK, 0 rows affected

EXPLAIN SELECT * FROM t1\G

*************************** 1. row ***************************

Query Plan:

==============================================

|ID|OPERATOR |NAME |EST. ROWS|COST |


|0 |PX COORDINATOR | |500000 |545109|

|1 | EXCHANGE OUT DISTR |:EX10000|500000 |320292|

|2 | PX PARTITION ITERATOR| |500000 |320292|

|3 | TABLE SCAN |T1 |500000 |320292|

======================================================

Outputs & filters:


0 - output([T1.V1], [T1.V2]), filter(nil)

1 - output([T1.V1], [T1.V2]), filter(nil), dop=1

2 - output([T1.V1], [T1.V2]), filter(nil)

3 - output([T1.V1], [T1.V2]), filter(nil),

  access([T1.V1], [T1.V2]), partitions(p[0-4])

假如这5个分区分布在不同的observer上(observer1…5),part0在observer1上,以此类推

假如在observer1执行SELECT * FROM t1,这个逻辑是不是要另外4个分区的数据传到observer1上?再返回给客户端?

1 个赞

OceanBase SQL 执行计划解读远程和分布式执行计划

OceanBase 社区1a6zhw4_gaMTcwODg5ODY3Mi4xNzE1NTkwNzgx_ga_T35KTM57DZ*MTcxOTk2OTU3Mi4xNDIuMS4xNzE5OTcyMTg4LjYwLjAuMA…

1 个赞

EXCH-IN/OUTEXCHANGE IN/ EXCHANGE OUT 用于将多个分区上的数据汇聚到一起,发送到查询所在的主节点上。

如下例所示,下面的查询中访问了 5 个分区(p0-p4)的数据,其中 1 号算子接受 2 号算子产生的输出,并将数据传出;0 号算子接收多个分区上 1 号算子产生的输出,并将结果汇总输出。
参考: OceanBase分布式数据库-海量数据 笔笔算数

2 个赞