OceanBase的并发简述笔记
一、并发说明
OceanBase的并发分为并发DDL、并发DML。并分为分区并行与分区内并行。
一个CPU 可以运行多个线程(时间片段)。
(租户)min_cpu*(集群)px_workers_per_cpu_quota = 租户可拥有的线程数
二、数据分发与数据重分布
数据分发:
Partition-Wise Join(以分区的方式进行JOIN):要求分区表且分区方式相同,物理分布一样,并且JOIN的连接条件为分区键时。可以简单理解为表组。
Partial Partition-Wise Join(以部分分区的方式进行JOIN):一个分区表,一个非分区表或者分区表。 但是它们两个表的连接键或分区键相同的情况下,会以该分区表的分区分布为基准,重新分布另一个表的数据。 另一个名字:Partition重分布(PKEY JOIN)。
数据重分布:
分布式执行的Hint:PQ_DISTRIBUTE,结合ORDERED、LEADING、USE_NL、USE_HASH和USE_MERGE等。
HASH-HASH:
Random:Union all场景
PARTITION:关联表中的其中一个表的分区数几乎等于查询服务器的数据量时。
BROADCAST:关联表中的其中一个表够小,且小表行数乘以查询服务器的数量远小于另一个表时,采用广播的方式。
NONE:
抽象简单理解DFO: data flow operator 可以理解为每一个数据执行片段,在并发执行中表示可以并行执行的操作。
多个DFO组成一个DFOs == 》DFOs树。