关于主备租户延时问题

【 使用环境 】 测试环境
【 OB or 其他组件 】 ocp4.3.5
【 使用版本 】
【问题描述】关于备租户延时监控 standby_tenant_sync_delay_too_long的计算方式
目前生产环境已经搭建完毕一个备租户,查询OCP操作手册时, standby_tenant_sync_delay_too_long是作为备租户延时的监控,其中提到
通过 Oceanbase 内部表 GV$OB_LOG_STAT、DBA_OB_TENANTS 查询得到主备租户的当前数据点位,二者相减得到备租户的同步延迟时间。
请问下具体的查询SQL是什么,是查询 GV$OB_LOG_STAT、DBA_OB_TENANTS哪个字段进行相减

SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN)
FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = ‘standby_tenant’;
注意:TENANT_ROLE= STANDBY, 且 STATUS=NORMAL,则表示备租户状态正常,备租户已创建成功

如果使用 archive进行持续恢复的话 , 参数 archive_lag_target 会导致120秒左右的延迟。 是异步同步的

– 1. 获取主租户最新 SCN
SELECT
t1.tenant_id,
MAX(t1.SCN) AS primary_current_scn
FROM
GV$OB_LOG_STAT t1
JOIN
DBA_OB_TENANTS t2
ON
t1.tenant_id = t2.tenant_id
WHERE
t2.role = ‘PRIMARY’
GROUP BY
t1.tenant_id;

– 2. 获取备租户最新已应用 SCN
SELECT
t1.tenant_id,
MAX(t1.APPLIED_SCN) AS standby_applied_scn
FROM
GV$OB_LOG_STAT t1
JOIN
DBA_OB_TENANTS t2
ON
t1.tenant_id = t2.tenant_id
WHERE
t2.role = ‘STANDBY’
GROUP BY
t1.tenant_id;

– 3. 计算延迟(也可以写成一个联合查询)
SELECT
p.tenant_id,
p.primary_current_scn,
s.standby_applied_scn,
(p.primary_current_scn - s.standby_applied_scn) AS sync_delay
FROM
(SELECT
t1.tenant_id,
MAX(t1.SCN) AS primary_current_scn
FROM
GV$OB_LOG_STAT t1
JOIN
DBA_OB_TENANTS t2
ON
t1.tenant_id = t2.tenant_id
WHERE
t2.role = ‘PRIMARY’
GROUP BY
t1.tenant_id) p
JOIN
(SELECT
t1.tenant_id,
MAX(t1.APPLIED_SCN) AS standby_applied_scn
FROM
GV$OB_LOG_STAT t1
JOIN
DBA_OB_TENANTS t2
ON
t1.tenant_id = t2.tenant_id
WHERE
t2.role = ‘STANDBY’
GROUP BY
t1.tenant_id) s
ON
p.tenant_id = s.tenant_id;

不支持完整可视化列过滤(只能手动 SQL)。

@论坛小助手

根据文档库中的信息,关于备租户延时监控 standby_tenant_sync_delay_too_long 的计算方式,可以通过查询 OceanBase 内部表 GV$OB_LOG_STATDBA_OB_TENANTS 来获取主备租户的当前数据点位,并通过相减得到备租户的同步延迟时间。

以下是具体的查询 SQL 和字段说明:

1. 查询主备租户的当前数据点位

对于 OceanBase V4.0 及以上版本,可以使用以下 SQL 查询主备租户的日志同步延迟时间:

select 
    /* MONITOR_AGENT */ 
    leader.tenant_id, 
    '0' as replica_type, 
    abs(max(CAST(leader_ts as SIGNED) - CAST(follower_ts as SIGNED))) / 1000000000 as max_clog_sync_delay_seconds 
from 
    (select max(end_scn) leader_ts, tenant_id, role from GV$OB_LOG_STAT where role='LEADER' group by tenant_id) leader 
inner join 
    (select min(end_scn) follower_ts, tenant_id, role from GV$OB_LOG_STAT where role='FOLLOWER' group by tenant_id) follower 
on leader.tenant_id = follower.tenant_id 
group by leader.tenant_id;

字段说明:

  • GV$OB_LOG_STAT 表中:
    • end_scn:表示日志的结束 SCN(System Change Number)。
    • role:表示角色,LEADER 表示主租户,FOLLOWER 表示备租户。
  • abs(max(CAST(leader_ts as SIGNED) - CAST(follower_ts as SIGNED))) / 1000000000:计算主备租户之间的日志同步延迟时间,单位为秒。

2. 查询主备租户的当前数据点位(V4.0 以下版本)

对于 OceanBase V4.0 以下版本,可以使用以下 SQL 查询主备租户的日志同步延迟时间:

select 
    /*+ MONITOR_AGENT READ_CONSISTENCY(WEAK) */ 
    stat.table_id >> 40 as tenant_id, 
    stat.replica_type, 
    max(stat.next_replay_ts_delta) / 1000000 as max_clog_sync_delay_seconds 
from 
    __all_virtual_clog_stat stat 
left join 
    (select meta.table_id, meta.partition_id from __all_virtual_meta_table meta where meta.status = 'REPLICA_STATUS_NORMAL' and meta.svr_ip = ? and meta.svr_port = ? and meta.table_id not in (select table_id from __all_virtual_partition_migration_status mig where mig.action <> 'END')) meta 
on stat.table_id = meta.table_id and stat.partition_idx = meta.partition_id 
where stat.svr_ip = ? and stat.svr_port = ? 
group by tenant_id, replica_type 
having max_clog_sync_delay_seconds < 3153600000;

字段说明:

  • __all_virtual_clog_stat 表中:
    • next_replay_ts_delta:表示下一个重放的时间戳差值。
    • table_id >> 40:提取出租户 ID。
  • max(stat.next_replay_ts_delta) / 1000000:计算主备租户之间的日志同步延迟时间,单位为秒。

3. 备注

  • GV$OB_LOG_STAT:用于获取主备租户的日志同步状态。
  • DBA_OB_TENANTS:用于获取租户的基本信息(如租户 ID 等),但不直接参与延迟时间的计算。
  • 延迟时间计算逻辑:通过主租户和备租户的日志同步点位(SCN 或时间戳)相减,得到同步延迟时间。

如果您需要进一步确认或调整监控指标,请参考 OCP 的操作手册或联系 OceanBase 技术支持团队。

检索到的文档如下:

  1. standby_tenant_sync_delay_too_long 备租户同步延时过大
  2. standby_tenant_sync_status_error 备租户同步状态异常
  3. DB Time
  4. oceanbase.DBA_WR_SQLSTAT
  5. oceanbase.CDB_WR_SQLSTAT
  6. oceanbase.DBA_WR_SYS_TIME_MODEL
  7. V$OB_SQLSTAT
  8. 请求等待队列耗时
  9. 分区
  10. clog 同步延迟