并行执行计划,相关子任务会在哪些Observer上执行?

【 使用环境 】测试环境
【 OB or 其他组件 】Observer
【 使用版本 】4.3.1.0
【问题描述】在测试环境有三台机器分别是192.168.0.101,192.168.0.102,192.168.0.103,在安装Observer时,Zone分别设置为zone1、zone2、zone3,其中zone1、zone2设置成primary zone,建t_sku表时,副本数为3,用hash分区64个分区,数据量大约在9百万,想知道,当insert /*+ ENABLE_PARALLEL_DML PARALLEL(16) */ into t_sku_bak select sku_id,sku_column1,sku_column2 from t_sku时,理论上,子任务会向哪些observer申请资源以执行子任务(是192.168.0.101,192.168.0.102,192.168.0.103三台都申请,还是向192.168.0.101,192.168.0.102这二台primary zone,还是192.168.0.101,192.168.0.102里的其中一台)?

补充一下,这个租户的每个zone区,unit数量都是1。

会向二台primary zone申请

谢谢解答。

只会申请主副本所在的zone

3个zone,unit为1,说明每个zone里面的其中一台服务器有一份完整的数据。
写只会在primary zone上,所以只会在zone1、zone2上。hash分区了,应该2个都会有。

在OB单unit的集群里,不管有多少个副本,主副本应该只存在一个吧,如果满足只存在一个主副本的限制,那它同一时间点应该只在一台Observer里。这个并发执行计划,子任务是按照主副本去申请资源,还是按照primary zone申请资源?

可以自行测试一下,然后用obdiag 去收集一下plan_monitor报告,通过报告你就能知道它到底在哪些节点上执行了,包括算子信息也都能展现出来,参见文档:OceanBase 社区

2 个赞

谢谢,马上试试

你好,如果可以的话,麻烦在测试使用obdiag收集plan_monitor报告后可以简略说下对该组件的评价