Oceanbase如何查询副本间的延时情况

【 使用环境 】测试环境
【 OB or 其他组件 】oceanbase 4.3.5
【 使用版本 】4.3.5 bp01
【问题描述】
老师,您好
请问对于Oceanbase 三副本的集群副本之间是否会出现类似于MySQL主从延时这样的情况,
比如,主节点操作了一个大事务,执行时间半小时,从副本是否会因此出现半小时的延时。

如果出现了,请问如何查询主副本与从副本之间的延时情况呢。
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

@论坛小助手

1 个赞

根据文档库中的信息,可以回答您的问题。

1. 副本间是否会出现类似MySQL主从延时的情况

在 OceanBase 数据库中,副本之间的同步是基于 Paxos 协议实现的。Paxos 协议保证了多数派副本之间的一致性,因此不会出现类似 MySQL 主从复制中的异步延时问题。具体来说:

  • DML 操作:写入操作会先生成 Redo 日志,并通过 Paxos 协议同步到多数派副本上。只有当多数派副本确认日志持久化成功后,事务才会提交。这意味着所有副本(包括从副本)都会几乎同时接收到最新的变更。
  • 大事务场景:如果主节点执行了一个耗时较长的大事务(如半小时),从副本可能会因为回放 Redo 日志的速度较慢而出现短暂的延迟。但这种延迟通常非常小,且不会像 MySQL 异步复制那样积累。

因此,在正常情况下,OceanBase 的三副本集群不会出现类似 MySQL 主从延时的问题。


2. 如何查询主副本与从副本之间的延时情况

虽然 OceanBase 不会出现明显的主从延时,但可以通过以下方法检查副本间的同步状态和潜在延迟:

方法一:查询 V$OB_LOG_STAT 视图

V$OB_LOG_STAT 视图可以查看日志流(Log Stream)的副本状态,包括 Leader 和 Follower 的同步情况。您可以使用以下 SQL 查询:

SELECT * FROM oceanbase.V$OB_LOG_STAT;

字段解释

  • TENANT_ID:租户 ID。
  • LS_ID:日志流 ID。
  • SVR_IPSVR_PORT:副本所在的服务器 IP 和端口。
  • ROLE:副本角色(LEADER 表示主副本,FOLLOWER 表示从副本)。
  • END_LSNEND_SCN:表示当前副本的日志位置。Leader 和 Follower 的 END_LSNEND_SCN 差值可以反映同步延迟。
  • IN_SYNC:是否处于同步状态(YES 表示同步正常)。

示例结果

*************************** 1. row ***************************
TENANT_ID: 1002
LS_ID: 1
SVR_IP: 172.xx.xx.xx
SVR_PORT: 2882
ROLE: LEADER
END_LSN: 113789460
END_SCN: 1722479078519570424
IN_SYNC: YES

*************************** 2. row ***************************
TENANT_ID: 1002
LS_ID: 1
SVR_IP: 172.xx.xx.yy
SVR_PORT: 2882
ROLE: FOLLOWER
END_LSN: 113789460
END_SCN: 1722479078519570424
IN_SYNC: YES

在上述示例中,END_LSNEND_SCN 的值一致,说明 Leader 和 Follower 之间的同步没有延迟。


方法二:查询 CDB_OB_LS_LOCATIONS 视图

CDB_OB_LS_LOCATIONS 视图可以查看日志流副本的位置信息和同步状态。您可以使用以下 SQL 查询:

SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE LS_ID = <目标日志流ID>;

字段解释

  • LS_ID:日志流 ID。
  • SVR_IPSVR_PORT:副本所在的服务器 IP 和端口。
  • ROLE:副本角色(LEADERFOLLOWER)。
  • STATUS:副本状态(ACTIVE 表示正常)。

方法三:使用 obdiag 工具

如果需要更详细的诊断信息,可以使用 OceanBase 提供的敏捷诊断工具 obdiag。运行以下命令可以收集集群的副本同步状态:

obdiag collect log --tenant=<租户名> --start-time="YYYY-MM-DD HH:MM:SS" --end-time="YYYY-MM-DD HH:MM:SS"

3. 总结

  • OceanBase 的三副本集群基于 Paxos 协议实现了强一致性同步,理论上不会出现类似 MySQL 主从延时的问题。
  • 如果需要检查副本间的同步状态,可以通过查询 V$OB_LOG_STATCDB_OB_LS_LOCATIONS 视图来获取详细信息。
  • 在极少数情况下(如大事务或硬件性能瓶颈),可能会出现短暂的延迟,但通常可以忽略不计。

如果您还有其他疑问,请随时提问!

更多信息请查看:

  1. 日志流和副本概述
  2. 高可用 FAQ
  3. OceanBase 集群高可用部署方案简介
  4. 日志流
  5. V$OB_LOG_STAT
  6. 租户内均衡
  7. oceanbase.DBA_OB_SYS_VARIABLES
  8. OceanBase 数据库整体架构
  9. 副本介绍

可以根据这个视图查看一下 看看clog是否延迟
select /* MONITOR_AGENT */ leader.tenant_id, ‘0’ as replica_type, abs(max(CAST(leader_ts as SIGNED)-CAST(follower_ts as SIGNED)))/1000000000 max_clog_sync_delay_seconds from (select max(end_scn) leader_ts, tenant_id, role from oceanbase.GV$OB_LOG_STAT where role=‘LEADER’ group by tenant_id ) leader inner join (select min(end_scn) follower_ts, tenant_id, role from oceanbase.GV$OB_LOG_STAT where role=‘FOLLOWER’ group by tenant_id ) follower on leader.tenant_id=follower.tenant_id group by leader.tenant_id

3 个赞

学习到了。谢谢