并行执行数据重分布的疑问

并行执行中,pkey distribution和pkey hash distribution的区别是啥,pkey可以理解,就是目标表按照连接列去做重分布,pkey hash distribution是怎么工作的,后面的hash是对什么做hash?这样做对比pkey有什么优势?


https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000819354

使用 Pkey Distribution 时,是会算出数据行对应的目标表所在分区,然后将行数据发给处理这个分区的消费者线程。
使用 Pkey Hash Distribution 时,首先需要计算出数据行对应的目标表所在的分区。然后,根据 distribution key 对数据行进行 hash 计算,以便决定将其发给哪一个消费者线程来处理

可以参考参考洪波老师给得文档链接。

那是不是两张表都要根据distribution key做hash?

pkey distribution 推荐用tablegroup, 这样可以join的表的分区键相同, join的时候可以本地join, 性能有很大的提升

1 个赞

这里区别主要是pkey hash distribution是一个分区有多个线程并行处理的场景,需要再通过hash一下,确保相同值的数据行由同一个线程处理。而pkey distribution多为一个分区只有一个线程处理的场景

好的,明白了,相当于pkey是分区间并行,即dop=1的场景,pkey hash是分区内并行,相当于dop=N的场景