sql是这样执行的吗

select t1.a, t2.b, sum(t2.c)
from t1, t2
where t1.id=t2.id

假设是强读。

这个sql在observer1上执行,
t1的leader在observer1,
t2的leader在observer2。

它是执行过程是:

⑴observer1把t1读取后返回给obproxy?

⑵observer1从observer2读取t2后返回给observer1,然后observer1再返回给obproxy?

⑶t1和t2的数据都返回给obproxy之后,再在obproxy里做where t1.id=t2.id关联?和sum(t2.c)汇总?

⑷然后obproxy再把最终结果返回给用户?

架构是1-1-1的observer1在zone1、observer2在zone2、observer3在zone3上
1)如果obproxy路由到observer1上,会在这个节点返回给obproxy
2)obproxy是有路由感知的,查询的t2表在observer2节点上,会路由到这个节点查询
3)obproxy只是做语句的简单解析,路由到某个节点上,例如:where t1.id=t2.id关联?和sum(t2.c)汇总都是在节点做的
4)是的
这个官方文档 你可以看看

数据库连接和路由概述

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

2 个赞

你当前sql的执行应该是:
obproxy 主要是路由的功能,数据关联是在server上执行的,甚至可能会用 EXCH-IN/OUT (PKEY) 算子用于数据重分区。它通常用于二元算子中,将一侧孩子节点的数据按照另外一侧孩子节点的分区方式进行重分区。
你可以结合执行计划和算子来详细的研究下
EXCHANGE-V4.3.2-OceanBase 数据库文档-分布式数据库使用文档

2)obproxy是有路由感知的,查询的t2表在observer2节点上,会路由到这个节点查询

问:
执行节点是observer1,查询的t2表在observer2节点上,会路由到这个节点查询,那么到observer2必然有一个连接,那么这个连接是observer1创建的啥?

你看看这个博客 更能了解obproxy
OceanBase 社区mx7tjx_gaMjAxODUwMDg2Ni4xNzIwNTA0NDU0_ga_T35KTM57DZ*MTcyNDIwMjY1NS42NC4xLjE3MjQyMDM0NTkuNjAuMC4w

1 个赞