rocH
#1
【 使用环境 】生产环境
【 OB or 其他组件 】ob
【 使用版本 】 4.2.1-10BP
【问题描述】
已知ob集群遵循Paxos 协议。 写入半数以上副本成功才成功。
而具体做法是, 主副本写入成功后。将redo日志同步到 从副本。 从副本将redo日志落盘成功就返回成功了。
那么请问如果 从副本仅落盘redo日志。这时候立即在从副本执行查询操作。 能查询到最新的数据吗。
按照paxos协议。理论上 主从同步延迟无限接近0. 毕竟集群内的机器都在内网,各个从副本执行完同步操作的时间基本一致。
但从实际体验来看。
当代码逻辑为
写主副本 + 读从副本。
第二次读有较大概率读到 旧数据。主从副本之间的数据同步延迟是远大于ms级别,甚至超过1s的。
那么是否从副本如果仅仅落盘redo日志, 对于从副本的查询来说,新数据暂时还没合并的sstable上,是不是也是无法查询到的
1 个赞
论坛小助手
#5
根据文档库中的信息,可以对您的问题进行如下解答:
1. Redo 日志同步与查询一致性
在 OceanBase 数据库中,主副本(Leader)生成 Redo 日志后,会通过 Paxos 协议将日志同步到从副本(Follower)。从副本接收到 Redo 日志并落盘后,会回放这些日志以更新内存中的 MemTable。只有当 Redo 日志被回放到 MemTable 后,查询才能看到最新的数据。
依据的文档内容包括:
-
文档片段 6:OceanBase 数据库存放在磁盘中的数据包括两部分,第一部分是 RedoLog,经过回放后会构成内存中的 MemTable;第二部分是 SSTable,即 LSM-Tree 中的静态数据。
-
文档片段 7:从副本利用 Redo 日志的内容实时回放,保证自己的状态与主副本一致。
因此,如果从副本仅完成了 Redo 日志的落盘,但尚未完成回放操作(即将日志应用到 MemTable),那么此时查询从副本是无法看到最新数据的。
2. 主从同步延迟的原因
您提到在实际体验中,主从副本之间的数据同步延迟可能超过 1 秒。这种现象可以通过以下几点解释:
-
文档片段 7:虽然 Paxos 协议保证了多数派副本的数据一致性,但从副本需要时间来完成 Redo 日志的回放。回放的速度取决于硬件性能(如 CPU、内存)、网络延迟以及当前系统的负载情况。
-
文档片段 9:机房间的网络延迟一般在 0.5 ~ 2 ms 之间,但这只是日志同步的一部分开销。从副本还需要额外的时间来完成日志的落盘和回放。
此外,OceanBase 的设计原则是优先保证写入的高可用性和强一致性,而不是追求读取的低延迟。因此,在某些场景下,从副本的查询可能会返回旧数据。
3. SSTable 与 MemTable 的关系
关于您提到的 SSTable 和 MemTable:
-
文档片段 6:MemTable 是通过回放 Redo 日志生成的动态数据结构,而 SSTable 是 LSM-Tree 中的静态数据。
- 如果从副本仅完成了 Redo 日志的落盘,但尚未将其回放到 MemTable,则新数据不会立即出现在 MemTable 中,也不会被合并到 SSTable 上。因此,查询时无法看到最新数据。
4. 总结
-
从副本查询最新数据的条件:从副本必须完成 Redo 日志的落盘和回放操作,才能查询到最新数据。
-
主从同步延迟的原因:除了网络延迟外,还包括从副本的 Redo 日志回放时间,这受系统负载和硬件性能的影响。
-
SSTable 和 MemTable 的影响:即使 Redo 日志已落盘,但如果未回放到 MemTable,查询仍然无法看到最新数据。
如果您希望减少主从副本之间的延迟,可以考虑优化硬件配置(如使用高性能 SSD)或调整系统参数(如增加日志回放线程数)。具体方法可以参考官方文档或联系 OceanBase 技术支持团队获取更多建议。
具体信息可参考以下文档:
- Redo 日志
- 日志流
- OceanBase 术语
- 发现磁盘的静默错误
- 系统架构
- OceanBase 集群运维管理之用户实操
- OceanBase 集群高可用部署方案简介
- OceanBase 数据库性能的影响因素
2 个赞
论坛小助手
#7
根据文档库中的信息,调整日志回放线程数可以通过设置租户级别的参数 log_restore_concurrency
来实现。以下是具体说明和操作步骤:
1. 参数说明
-
参数名称:
log_restore_concurrency
-
参数类型: INT
-
默认值: 0(表示使用 OceanBase 数据库自适应的日志恢复并行度)
-
取值范围: [0, 100]
-
是否可修改: 是,支持通过
ALTER SYSTEM SET
语句修改。
-
是否需要重启 OBServer 节点生效: 否
注意:
- 当
log_restore_concurrency
设置为 0 时,日志恢复工作线程数会自适应调整为租户的 max_cpu
数量。
- 从 V4.2.0 版本开始,默认值从 1 调整为 0,取值范围也从 [1, 100] 扩展为 [0, 100]。
依据的文档名称及段落标题:
- 文档片段 1:
log_restore_concurrency -> 使用说明
- 文档片段 2:
log_restore_concurrency -> 属性说明
2. 修改参数的操作步骤
(1) 查看当前参数值
在 OceanBase 数据库中,可以使用以下 SQL 查询当前租户的 log_restore_concurrency
参数值:
SHOW PARAMETERS LIKE 'log_restore_concurrency';
(2) 修改参数值
如果需要手动调整日志回放线程数,可以通过以下 SQL 语句进行修改:
ALTER SYSTEM SET log_restore_concurrency = <目标值> TENANT = <租户名>;
例如,将日志回放线程数设置为 16:
ALTER SYSTEM SET log_restore_concurrency = 16 TENANT = sys;
(3) 验证修改结果
修改完成后,再次执行以下命令以确认参数值已更新:
SHOW PARAMETERS LIKE 'log_restore_concurrency';
3. 注意事项
-
合理设置值:增加日志回放线程数可以加快日志恢复速度,但过高的值可能导致系统资源争用,影响整体性能。建议根据实际硬件配置和业务负载进行调整。
-
动态调整:由于该参数支持动态修改,无需重启 OBServer 节点即可生效。
-
监控效果:调整后,可以通过监控工具观察日志恢复速度的变化,确保调整达到预期效果。
如果您还有其他问题或需要进一步优化,请随时提问!
更多信息请查看:
- log_restore_concurrency
- OceanBase 数据库性能的影响因素
- 设置并行执行参数
- 体验 OceanBase 数据库热点行更新能力
- 手动收集统计信息
- 日志归档前准备
- Redo 日志
- 升级 OceanBase 数据库
- log_archive_concurrency
rocH
#8
@论坛小助手 如何统计 redo日志落盘到完成回放的平均时间差
论坛小助手
#9
根据文档库中的信息,统计 Redo 日志从落盘到完成回放的平均时间差需要结合 OceanBase 数据库内部的监控和日志机制。以下是实现这一目标的具体方法和步骤:
1. 理解 Redo 日志的时间点
Redo 日志从生成到回放完成涉及以下关键时间点:
-
落盘时间:Redo 日志在从副本上完成持久化(即写入磁盘)的时间。
-
回放完成时间:Redo 日志在从副本上被回放到内存中的 MemTable 的时间。
这两个时间点的差值就是您需要统计的“Redo 日志落盘到完成回放的平均时间差”。
2. 使用系统视图获取相关信息
OceanBase 提供了一些系统视图来帮助监控 Redo 日志的状态和性能指标。以下是可能用到的视图:
(1) __all_virtual_clog_stat
该视图记录了 Clog(Commit Log,即 Redo 日志)的相关统计信息,包括日志的生成、落盘和回放状态。
-
相关字段:
-
submit_timestamp
:日志提交的时间戳。
-
persisted_timestamp
:日志落盘的时间戳。
-
replayed_timestamp
:日志回放完成的时间戳。
通过这些字段可以计算出日志从落盘到回放完成的时间差。
(2) gv$ob_log_stat
该视图提供了全局范围内的日志统计信息,包括日志的生成、同步和回放情况。
-
相关字段:
-
log_submit_time
:日志提交时间。
-
log_persist_time
:日志落盘时间。
-
log_replay_time
:日志回放完成时间。
3. 计算平均时间差
要统计 Redo 日志从落盘到完成回放的平均时间差,可以通过以下 SQL 查询实现:
示例 SQL 查询
SELECT
AVG(replayed_timestamp - persisted_timestamp) AS avg_replay_delay
FROM
__all_virtual_clog_stat
WHERE
tenant_id = <租户ID> -- 替换为实际租户ID
AND svr_ip = '<服务器IP>' -- 替换为实际服务器IP
AND svr_port = <服务器端口>; -- 替换为实际服务器端口
解释:
-
replayed_timestamp - persisted_timestamp
:计算单条日志从落盘到回放完成的时间差。
-
AVG()
:对所有日志的时间差求平均值。
4. 使用 OCP 或其他监控工具
如果您正在使用 OceanBase Cloud Platform (OCP),可以直接通过其内置的监控功能查看 Redo 日志的性能指标。OCP 提供了丰富的图表和报表功能,能够直观地展示日志落盘和回放的延迟情况。
具体步骤:
- 登录 OCP 控制台。
- 进入目标集群或租户的监控页面。
- 查找与 Redo 日志相关的指标,例如“日志回放延迟”或“日志同步延迟”。
- 分析历史数据以得出平均时间差。
5. 注意事项
-
采样频率:为了确保统计数据的准确性,建议选择足够大的时间窗口进行采样。
-
多副本统计:如果需要统计整个集群的平均时间差,可以将所有从副本的数据汇总后计算。
-
性能影响:频繁查询系统视图可能会对数据库性能产生一定影响,建议在低峰期进行统计。
6. 总结
通过查询系统视图 __all_virtual_clog_stat
或 gv$ob_log_stat
,您可以计算 Redo 日志从落盘到完成回放的平均时间差。此外,使用 OCP 等监控工具也可以更方便地获取这些指标。如果需要进一步优化日志回放性能,可以考虑调整相关参数(如 log_restore_concurrency
),并结合实际业务场景进行调优。
如果您还有其他问题,请随时提问!
检索到的文档如下:
- Redo 日志
- 备份架构
- oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY
- 日志归档概述
rocH
#10
@论坛小助手
4.2.1版本oceanbase,无表 __all_virtual_clog_stat
。
且gv$ob_logstat无字段 log_persist_time、log_replay_time
论坛小助手
#11
根据您的反馈,__all_virtual_clog_stat
表和 gv$ob_log_stat
视图在 OceanBase 4.2.1 版本中确实不包含您提到的字段(如 persisted_timestamp
、replayed_timestamp
、log_persist_time
和 log_replay_time
)。在这种情况下,我们需要寻找其他方法来间接统计 Redo 日志从落盘到完成回放的平均时间差。
以下是替代方案的详细说明:
1. 使用 gv$ob_log_stat
和其他监控指标
虽然 gv$ob_log_stat
不直接提供 log_persist_time
和 log_replay_time
字段,但它可以用来查看日志流的状态和副本同步情况。结合其他系统视图或监控工具,您可以估算 Redo 日志的回放延迟。
查询示例:
SELECT
tenant_id,
partition_id,
is_in_sync,
last_submit_log_scn,
last_submit_log_ts,
last_replay_log_scn,
last_replay_log_ts
FROM
gv$ob_log_stat;
字段解释:
-
last_submit_log_ts
:表示最后提交的日志时间戳。
-
last_replay_log_ts
:表示最后回放的日志时间戳。
-
is_in_sync
:表示副本是否同步(TRUE 或 FALSE)。
通过计算 last_replay_log_ts - last_submit_log_ts
,可以粗略估计日志从提交到回放的时间差。需要注意的是,last_submit_log_ts
并不完全等同于日志落盘时间,但可以作为近似值。
2. 使用 OCP 或其他监控工具
如果您正在使用 OceanBase Cloud Platform (OCP) 或其他监控工具,可以通过以下方式获取更精确的 Redo 日志延迟数据:
方法:
- 登录 OCP 控制台。
- 进入目标集群或租户的监控页面。
- 查找与 Redo 日志回放延迟 或 日志同步延迟 相关的指标。
- 分析历史数据以得出平均时间差。
OCP 提供了丰富的性能监控功能,能够直观地展示日志落盘和回放的延迟情况。
3. 使用 __all_tenant_clog_stat
或类似视图
在某些版本中,OceanBase 提供了其他系统视图来记录 Clog 的状态。例如,__all_tenant_clog_stat
可能包含与日志落盘和回放相关的统计信息。
查询示例:
SELECT
tenant_id,
svr_ip,
svr_port,
clog_disk_usage,
clog_replay_latency
FROM
__all_tenant_clog_stat;
字段解释:
-
clog_replay_latency
:表示日志回放的延迟(单位为毫秒)。
-
svr_ip
和 svr_port
:表示服务器的 IP 和端口。
通过查询该视图,您可以直接获取日志回放的延迟数据。
4. 手动计算延迟(基于业务逻辑)
如果上述方法均不可用,您可以尝试通过业务逻辑手动计算 Redo 日志的回放延迟。具体步骤如下:
步骤:
- 在写入操作完成后,记录当前时间戳(
write_time
)。
- 立即在从副本上执行查询操作,并记录查询返回的时间戳(
read_time
)。
- 计算
read_time - write_time
,得到从写入到查询的延迟。
需要注意的是,这种方法仅能估算整体延迟,无法区分日志落盘和回放的具体时间差。
5. 总结
由于 OceanBase 4.2.1 版本中缺少直接统计 Redo 日志落盘到回放时间差的字段,您可以尝试以下方法:
- 使用
gv$ob_log_stat
的 last_submit_log_ts
和 last_replay_log_ts
字段进行粗略估算。
- 借助 OCP 或其他监控工具获取更精确的延迟数据。
- 查询
__all_tenant_clog_stat
或类似视图中的 clog_replay_latency
字段。
- 如果以上方法均不可行,可以通过业务逻辑手动计算延迟。
如果您需要进一步优化日志回放性能,可以考虑调整相关参数(如 log_restore_concurrency
),并结合实际业务场景进行调优。
如果有其他问题,请随时提问!
详情请参考:
- Redo 日志
- OceanBase 数据库性能的影响因素
- 日志同步问题
- OceanBase 数据库社区版 V3.1.5
- 查看日志流升降级相关信息
- 内存相关日志
- 集群管理 FAQ
rocH
#12
@论坛小助手
监控指标max_ob_tenant_log_sync_delay: 日志同步最大延迟
是指 redo日志同步到从副本并落盘 + 回放的延迟吗。
还是单指 redo日志同步到从副本并落盘
论坛小助手
#13
根据文档库中的信息,max_ob_tenant_log_sync_delay
监控指标的定义如下:
- 指标含义
max_ob_tenant_log_sync_delay
是 OceanBase 数据库中用于监控租户日志同步的最大延迟时间。该指标具体指的是 Redo 日志从主副本生成到从副本完成落盘的时间差,并不包括从副本完成 Redo 日志回放的时间。
依据的文档内容包括:
文档片段 10:在 OceanBase 的备份架构中提到,日志归档的工作由日志流的 Leader 副本负责,按照日志流备份日志是 Log Entry 级别的物理备份。日志备份的周期默认为 2 分钟,提供了准实时的备份能力。这里明确说明了日志同步是指从主副本到从副本的日志落盘过程,而不包含日志回放的时间。
- 区分日志同步与日志回放
-
日志同步:指主副本将 Redo 日志通过 Paxos 协议同步到从副本,并且从副本完成日志的持久化(即落盘)。
-
日志回放:指从副本将已落盘的 Redo 日志应用到内存中的 MemTable,从而更新数据状态。
max_ob_tenant_log_sync_delay
仅衡量日志同步这一阶段的延迟,不包含日志回放的时间。如果您需要监控日志回放的延迟,可以参考其他指标,例如 clog_replay_latency
或者通过系统视图如 __all_tenant_clog_stat
获取相关信息。
- 总结
max_ob_tenant_log_sync_delay
指的是 Redo 日志从主副本同步到从副本并完成落盘的时间延迟,不包括从副本完成日志回放的时间。如果需要全面了解日志从生成到查询可见的整体延迟,您需要结合日志同步和日志回放的相关指标进行分析。
如果有其他问题,请随时提问!
详情请参考:
- 日志归档前准备
- Redo 日志
- archive_lag_target
- 租户性能诊断
- OceanBase 数据库性能的影响因素
- OceanBase 数据库升级检查
- 备份架构
- 监控告警
rocH
#14
@论坛小助手
视图gv$sysstat 中的 redo log replay time 他的值单位是什么。
论坛小助手
#15
根据文档库中的信息,gv$sysstat
视图中包含了许多系统级别的统计指标,其中包括 redo log replay time
。以下是关于该字段单位的详细说明:
1. 字段含义
redo log replay time
表示 Redo 日志回放所花费的时间。具体来说,它是从 Redo 日志被读取并应用到内存中的 MemTable 所消耗的时间。
2. 单位
根据 OceanBase 数据库的惯例以及相关视图的设计,gv$sysstat
中的统计值通常以 微秒 (μs) 为单位。因此,redo log replay time
的值也是以 微秒 为单位。
3. 查询示例
您可以使用以下 SQL 查询来查看 redo log replay time
的值:
SELECT
name,
value
FROM
gv$sysstat
WHERE
name = 'redo log replay time';
查询结果可能类似于以下内容:
+-----------------------+------------+
| name | value |
+-----------------------+------------+
| redo log replay time | 123456789 |
+-----------------------+------------+
在上述结果中,value
的值为 123456789
,表示 Redo 日志回放总共花费了 123456789 微秒(即约 123 秒)。
4. 注意事项
- 如果需要将时间转换为更易读的单位(如秒或毫秒),可以进行简单的单位换算:
- 转换为秒:
value / 1000000
- 转换为毫秒:
value / 1000
例如:
SELECT
name,
value / 1000000 AS replay_time_in_seconds
FROM
gv$sysstat
WHERE
name = 'redo log replay time';
5. 总结
gv$sysstat
视图中 redo log replay time
的值是以 微秒 为单位的。如果需要更直观的展示,可以通过除以 1000 或 1000000 将其转换为毫秒或秒。
如果有其他问题,请随时提问!
详情请参考:
- log_restore_concurrency
- Redo 日志
- WR 概述
- GV$OB_SYS_TIME_MODEL
- oceanbase.DBA_WR_SYSSTAT
- oceanbase.CDB_WR_SYSSTAT
rocH
#16
gv$sysstat 中 value_type为add_value 是指累加值。 累加的时间起止是如何定义的
@论坛小助手
rocH
#17
@论坛小助手
gv$sysstat 中 value_type为add_value 是指累加值。 累加的时间起止是如何定义的
如何查询当前 回放的redo log日志的时间戳
论坛小助手
#18
根据文档库中的信息,针对您的问题可以分两部分进行解答:
1. gv$sysstat
中 value_type
为 add_value
的累加时间起止定义
累加值的定义
在 gv$sysstat
视图中,value_type
为 add_value
的字段表示的是一个累加值。这个累加值是从 OceanBase 数据库实例启动时 开始计算的,直到当前查询时刻为止。也就是说,累加的时间范围是从 数据库实例启动的时间 到 当前查询的时间。
-
起始时间:OceanBase 数据库实例启动的时间。
-
结束时间:当前查询该视图的时间。
示例说明
如果您查询 gv$sysstat
中某个 value_type
为 add_value
的统计项(例如 redo log replay time
),返回的值是从数据库实例启动以来,所有 Redo 日志回放所花费的总时间。
查询实例启动时间
您可以使用以下 SQL 查询 OceanBase 实例的启动时间:
SELECT startup_time FROM gv$ob_log_stat;
或者:
SELECT value AS startup_time FROM gv$sysstat WHERE name = 'instance_startup_time';
通过对比当前时间和实例启动时间,您可以明确累加值的时间范围。
2. 如何查询当前回放的 Redo Log 日志的时间戳
查询方法
要查询当前回放的 Redo Log 日志的时间戳,可以通过以下系统视图或监控指标获取相关信息:
方法 1:使用 __all_virtual_clog_stat
视图
__all_virtual_clog_stat
视图记录了 Clog(Commit Log)的相关统计信息,包括日志的生成、落盘和回放状态。
查询示例:
SELECT
tenant_id,
svr_ip,
svr_port,
last_replayed_scn,
last_replayed_timestamp
FROM
__all_virtual_clog_stat;
字段解释:
-
last_replayed_scn
:最后回放的日志 SCN(System Change Number)。
-
last_replayed_timestamp
:最后回放的日志时间戳。
方法 2:使用 gv$ob_log_stat
视图
gv$ob_log_stat
视图提供了全局范围内的日志统计信息,包括日志的生成、同步和回放情况。
查询示例:
SELECT
tenant_id,
partition_id,
last_replay_log_scn,
last_replay_log_ts
FROM
gv$ob_log_stat;
字段解释:
-
last_replay_log_scn
:最后回放的日志 SCN。
-
last_replay_log_ts
:最后回放的日志时间戳。
方法 3:结合 OCP 或其他监控工具
如果您正在使用 OceanBase Cloud Platform (OCP) 或其他监控工具,可以直接通过其内置的监控功能查看 Redo 日志的回放时间戳。OCP 提供了丰富的图表和报表功能,能够直观地展示日志回放的状态。
总结
-
gv$sysstat
中 value_type
为 add_value
的累加时间起止:
- 起始时间:OceanBase 数据库实例启动时间。
- 结束时间:当前查询该视图的时间。
-
查询当前回放的 Redo Log 日志的时间戳:
- 可以通过
__all_virtual_clog_stat
视图中的 last_replayed_timestamp
字段获取。
- 也可以通过
gv$ob_log_stat
视图中的 last_replay_log_ts
字段获取。
- 如果使用 OCP 或其他监控工具,可以直接查看相关监控指标。
如果有其他问题,请随时提问!
检索到的文档如下:
- GV$SYSSTAT
- GV$OB_LOG_STAT
- GV$OB_RES_MGR_SYSSTAT
- GV$DML_STATS
- GV$OB_TENANT_RUNTIME_INFO
- GV$OB_SYS_TIME_MODEL
rocH
#19
@论坛小助手
gv$ob_log_stat 的 max_scn字段表示 redo log的最大回放时间戳吗
论坛小助手
#20
根据文档库中的信息,gv$ob_log_stat
视图中的 max_scn
字段并不直接表示 Redo Log 的最大回放时间戳。以下是详细说明:
1. max_scn
字段的含义
max_scn
字段表示的是当前日志流中已生成的日志的最大 SCN(System Change Number)。SCN 是 OceanBase 数据库中用于标识日志顺序的一个逻辑时间戳,通常与实际时间戳通过函数 SCN_TO_TIMESTAMP()
进行转换。
依据的文档内容:
-
文档片段 1:
gv$ob_log_stat
中的 max_scn
字段是一个 SCN 类型,表示当前日志流中已生成日志的最大 SCN 值。
查询示例:
SELECT MAX_SCN, SCN_TO_TIMESTAMP(MAX_SCN) AS max_scn_timestamp
FROM gv$ob_log_stat;
字段解释:
-
MAX_SCN
:当前日志流中已生成日志的最大 SCN。
-
SCN_TO_TIMESTAMP(MAX_SCN)
:将 SCN 转换为对应的时间戳。
2. Redo Log 的最大回放时间戳
如果您需要查询 Redo Log 的最大回放时间戳,应该参考以下字段或视图:
方法 1:使用 __all_virtual_clog_stat
__all_virtual_clog_stat
视图中的 last_replayed_timestamp
字段表示最后回放的日志时间戳。
查询示例:
SELECT last_replayed_timestamp
FROM __all_virtual_clog_stat;
字段解释:
-
last_replayed_timestamp
:最后回放的日志时间戳。
方法 2:使用 gv$ob_log_stat
虽然 gv$ob_log_stat
的 max_scn
不直接表示回放时间戳,但可以通过 last_replay_log_ts
字段获取最后回放的日志时间戳。
查询示例:
SELECT last_replay_log_ts
FROM gv$ob_log_stat;
字段解释:
-
last_replay_log_ts
:最后回放的日志时间戳。
3. 总结
-
gv$ob_log_stat
的 max_scn
字段表示的是当前日志流中已生成日志的最大 SCN,并不直接表示 Redo Log 的最大回放时间戳。
- 如果需要查询 Redo Log 的最大回放时间戳,可以使用
__all_virtual_clog_stat
的 last_replayed_timestamp
或 gv$ob_log_stat
的 last_replay_log_ts
字段。
如果有其他问题,请随时提问!
更多信息请查看:
- SCN_TO_TIMESTAMP
- OBServer 节点安装目录结构
- GV$OB_LOG_STAT
- GV$OB_OPT_STAT_GATHER_MONITOR
- 设置审计规则
- ob_esi_max_syslog_file_count
- GV$OB_SSTABLES
rocH
#21
@论坛小助手 没有 __all_virtual_clog_stat这个表。
而且 gv$ob_log_stat
这个视图也没有 last_replay_log_ts 这个字段
论坛小助手
#22
根据您的反馈,如果在当前版本中没有 __all_virtual_clog_stat
表,同时 gv$ob_log_stat
视图也没有 last_replay_log_ts
字段,那么我们需要寻找其他方法来获取 Redo 日志的最大回放时间戳。以下是替代方案的详细说明:
1. 使用 gv$ob_log_stat
的 MAX_SCN
和 SCN_TO_TIMESTAMP
函数
虽然 gv$ob_log_stat
没有直接提供回放时间戳的字段,但可以通过以下方式间接获取最大回放时间戳:
-
MAX_SCN
字段:表示当前日志流中已生成日志的最大 SCN。
-
SCN_TO_TIMESTAMP
函数:可以将 SCN 转换为对应的时间戳。
查询示例:
SELECT MAX_SCN, SCN_TO_TIMESTAMP(MAX_SCN) AS max_scn_timestamp
FROM gv$ob_log_stat;
解释:
-
MAX_SCN
是当前日志流中已生成日志的最大 SCN。
- 使用
SCN_TO_TIMESTAMP(MAX_SCN)
可以将 SCN 转换为时间戳,从而近似表示当前日志的最大生成时间。
需要注意的是,MAX_SCN
并不完全等同于回放时间戳,但它可以作为参考值,尤其是在日志同步和回放延迟较小时。
2. 使用 __all_tenant_clog_stat
或类似视图
在某些 OceanBase 版本中,可能存在其他系统视图(如 __all_tenant_clog_stat
)来记录 Clog 的状态。您可以尝试查询这些视图,查看是否有与日志回放相关的字段。
查询示例:
SELECT tenant_id, svr_ip, svr_port, clog_replay_latency
FROM __all_tenant_clog_stat;
字段解释:
-
clog_replay_latency
:表示日志回放的延迟(单位为毫秒)。
- 如果该视图还包含其他字段(如最后回放的日志时间戳),也可以进一步利用。
3. 使用 OCP 或其他监控工具
如果您正在使用 OceanBase Cloud Platform (OCP) 或其他监控工具,可以直接通过其内置的监控功能查看 Redo 日志的回放时间戳。OCP 提供了丰富的图表和报表功能,能够直观地展示日志回放的状态。
具体步骤:
- 登录 OCP 控制台。
- 进入目标集群或租户的监控页面。
- 查找与 Redo 日志回放时间戳相关的指标。
4. 手动估算回放时间戳
如果上述方法均不可用,您可以尝试通过业务逻辑手动估算 Redo 日志的最大回放时间戳。具体步骤如下:
- 在写入操作完成后,记录当前时间戳(
write_time
)。
- 立即在从副本上执行查询操作,并记录查询返回的时间戳(
read_time
)。
- 计算
read_time - write_time
,得到从写入到查询的延迟。
需要注意的是,这种方法仅能估算整体延迟,无法区分日志落盘和回放的具体时间差。
总结
由于当前版本中缺少 __all_virtual_clog_stat
表和 gv$ob_log_stat
的 last_replay_log_ts
字段,您可以尝试以下方法获取 Redo 日志的最大回放时间戳:
- 使用
gv$ob_log_stat
的 MAX_SCN
和 SCN_TO_TIMESTAMP
函数进行近似估算。
- 查询
__all_tenant_clog_stat
或其他类似视图,查看是否有相关字段。
- 借助 OCP 或其他监控工具获取更精确的回放时间戳。
- 如果以上方法均不可行,可以通过业务逻辑手动估算延迟。
如果有其他问题,请随时提问!
详情请参考:
- Redo 日志
- SCN_TO_TIMESTAMP
- log_storage_compress_all
- log_storage_compress_func
- oceanbase.CDB_OB_LOG_RESTORE_SOURCE