【 使用环境 】 测试环境
【 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_STAT
和 DBA_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 技术支持团队。
检索到的文档如下: