查询oceanbase主从同步延迟方法

如何用SQL查看当前租户主从同步延迟?

obclient(root@sys)[oceanbase]> select version();
+---------------------------+
| version()                 |
+---------------------------+
| 5.7.25-OceanBase-v4.2.5.3 |
+---------------------------+
1 row in set (0.004 sec)

如果像oracle一样把dba_ob_tenants.SYNC_SCN当做v$database.current_scn, 但是也有问题

obclient(root@sys)[oceanbase]> select TENANT_NAME,TENANT_TYPE,COMPATIBILITY_MODE,TENANT_ROLE,SYNC_SCN,usec_to_time(SYNC_SCN/1000),now()  from dba_ob_tenants;
+-------------+-------------+--------------------+-------------+---------------------+-----------------------------+---------------------+
| TENANT_NAME | TENANT_TYPE | COMPATIBILITY_MODE | TENANT_ROLE | SYNC_SCN            | usec_to_time(SYNC_SCN/1000) | now()               |
+-------------+-------------+--------------------+-------------+---------------------+-----------------------------+---------------------+
| sys         | SYS         | MYSQL              | PRIMARY     |                NULL | NULL                        | 2026-06-12 19:02:27 |
| META$1034   | META        | MYSQL              | PRIMARY     |                NULL | NULL                        | 2026-06-12 19:02:27 |
| orcldb      | USER        | ORACLE             | PRIMARY     | 1781262146158544000 | 2026-06-12 19:02:26.158544  | 2026-06-12 19:02:27 |
| META$1038   | META        | MYSQL              | PRIMARY     |                NULL | NULL                        | 2026-06-12 19:02:27 |
| orcldbsty   | USER        | ORACLE             | STANDBY     | 1781262147048815000 | 2026-06-12 19:02:27.048815  | 2026-06-12 19:02:27 |

在同一个集群中orcldb和orcldbsty为主从关系,但是standby的sync_scn为什么会超过primary?

3 个赞

蹲一个后续

@ob小助手

6633144

1 个赞

77990085536

1 个赞

7788800444111

1 个赞

备库SYNC_SCN更高属正常位点计算差异,可通过SCN时间差算出主备同步延迟。

1 个赞

学习

该现象属于正常的位点计算差异,可通过两者SYNC_SCN对应的时间差,计算出实际主备同步延迟

@论坛小助手

根据您提供的信息和问题描述,您遇到了一个关于OceanBase主从同步延迟的疑问。具体来说,您在查看dba_ob_tenants表中的SYNC_SCN时发现,备用数据库(standby)的SYNC_SCN超过了主数据库(primary)的情况,这似乎与预期不符。首先,我们需要澄清一些概念,并尝试解答您的疑问。

关于SYNC_SCN的理解

  • SYNC_SCN指的是该租户已成功应用到备库的最大SCN (System Change Number)。
  • 在正常情况下,主库应该拥有最高的SCN值,而备用数据库则跟随其后,但接近或略低一点。

为什么SYNC_SCN可能会出现standby大于primary的现象?

  1. 时间戳精度差异:如果系统的时间戳精度较高,且查询几乎同时执行,可能会观察到由于查询执行时间差导致的微小误差。这种情况下,实际数据同步并不存在延迟。

  2. 事务提交顺序:在分布式环境下,尤其是在跨越多个数据中心的复制场景中,即使是在同一集群内,由于网络传输、处理速度等因素的影响,某些事务可能先被备库确认,而后才被主库记录更新,这可能导致临时性地看到备库SCN高于主库。

  3. 数据刷新频率:不同租户的数据刷新频率可能不一致,有时可能会因为缓存或统计信息未即时更新而导致显示上的异常。

  4. 特定条件下的人工干预:如果有特殊操作如手工调整日志位置等,也可能引起这样的情况发生。

如何正确检查同步延迟?

要准确评估OceanBase中租户间的主从同步延迟,建议使用如下SQL语句:

-- 查看主租户的最新SCN
SELECT TENANT_NAME, MAX(SYNC_SCN) AS PRIMARY_SYNC_SCN
FROM dba_ob_tenants
WHERE TENANT_ROLE = 'PRIMARY';

-- 查看待检查租户的最新SCN
SELECT TENANT_NAME, MAX(SYNC_SCN) AS STANDBY_SYNC_SCN
FROM dba_ob_tenants
WHERE TENANT_ROLE = 'STANDBY';

然后比较两者结果以确定具体的延迟量。注意上述方法适用于Oracle模式兼容版本的企业版功能;对于社区版或其他模式下,请确保相关字段及含义适用。

若持续遇到不合理现象或者无法通过上述手段解释,请进一步检查日志文件或咨询官方技术支持获取更深入的帮助。此外,确保所有节点间时钟同步也很重要,可以减少因时钟不同步带来的误判。

基于当前文档片段所提供的信息以及对OceanBase工作原理的理解给出以上解释。如果上述回答未能完全解决您的疑惑,或有更多细节需要讨论,建议直接联系OceanBase的技术支持团队进行沟通。

详情请参考:

  1. 连接租户
  2. 部署生产环境
  3. 管理 OceanBase 数据库连接

顶一下