oceanbase分区线程分配

OceanBase 会将 DOP 按照分区个数的比例分配到多个 OBServer 节点上。如果DOP 为 9,要访问 120 个分区,其中 server1 上有 60 个分区, server2 上有 40 个分区,server3 上有 20 个分区,那么并行线程将会如何分配?

2 个赞

DOP 按分区数量比例分配到各 OBServer,432线程分配度。

  1. 每个 OBServer 至少分配 1 个线程
  2. 按分区数量比例分配
  3. 剩余线程优先分配给执行时间最长的节点,以平衡负载
1 个赞

432分配的话没有严格按比例来吧

按照代码中计算,当做分配时进行整数除法会向下取整。所以最后会空出一个线程。

  • server1: 60 * 9 / 120 = 4.5 → 4 个线程(整数除法向下取整)

  • server2: 40 * 9 / 120 = 3.0 → 3 个线程

  • server3: 20 * 9 / 120 = 1.5 → 1 个线程(整数除法向下取整)

1 个赞

那空出的这个线程就不会使用吗

优化算法进行分配吧

这个肯定是按比例分的

空出的线程优先分配给执行时间最长的节点,以平衡负载

1 个赞

按这样算感觉是432,server1是1个线程处理15个分区,server2是1个线程处理13.3个,server3要1个线程处理20个,在不考虑数据分布倾斜的情况下,最后一个线程大概率是加到server3上

所以如果不考虑数据分布倾斜的情况下,最可能的情况是432分布的吧?

1 个赞

是的