关于多表查询

多表查询时,为什么要查询在不同可用区里每个表的主副本,而不在一个可用区里查对应的主副本和从副本

因为从副本不能保证是最新的。
如果不需要查最新的数据,可以加hint使用弱读查。

1 个赞

:+1: :+1:

提高读效率

关注一下 多表查询的性能。
如果性能不好,可能把这些表的主副本拉到同一个可用区里会好一些。

这个可能是最头疼的问题。

:+1: :+1: :+1:

@论坛小助手

1 个赞

根据文档库中的信息,多表查询时选择在不同可用区里每个表的主副本进行查询而不是在一个可用区内查对应的主副本和从副本的原因可以总结如下:

  • 高可用性与容灾能力:依据《副本介绍 → 副本概念》以及《OceanBase 术语 → Z → 主/从副本(Leader/Follower)》中提到的内容,OceanBase 数据库存储引擎采用的是基于 Paxos 协议的多副本架构。这意味着即使某个节点发生故障,只要超过半数以上的成员接收到 Redo 并落盘成功确认后,Leader 上的事务仍然可以提交。因此,在不同可用区中选择主副本进行查询有助于提高系统的高可用性和容灾能力。

  • 数据一致性保障:根据《OceanBase 术语 → 分页保序 → 复制表(Replicated Table)》所述,为了保证强一致性的读访问,通常会选择 Leader 数据作为查询源。虽然复制表可以在所有 OBServer 上拥有全功能副本及复制副本,但是更新事务会确保将数据同步到所有的全功能副本及复制副本之后才会提交。这表明即使是同一可用区内的从副本也不能完全实时地反映最新的数据状态,而主副本则能提供更强的一致性保证。

  • 负载均衡与性能优化:参考《分布式执行和并行查询 → 分布式执行简介》和《分布式执行和并行查询 → 分布式执行》,对于跨分区的数据查询请求,OceanBase 数据库会自动生成分布式执行计划,并且建议使用关联键作为分区键并采用相同分区方式,以减少跨节点的数据交互。通过在不同可用区之间分散查询压力,可以更好地实现负载均衡,避免单个可用区成为性能瓶颈。

综上所述,出于对系统高可用性、数据一致性和性能优化等方面的考虑,OceanBase 在执行多表查询时更倾向于在不同可用区里选择每个表的主副本来进行查询操作。这不仅能够充分利用集群资源,还能有效提升整个系统的稳定性和效率。

更多信息请查看:

  1. 分布式执行和并行查询
  2. 副本介绍
  3. OceanBase 术语
  4. ODP SQL 路由原理
  5. Locality 介绍
  6. 表组
1 个赞