在使用 YashanDB 搭建主备架构时,如果发现备机日志回放出现延迟,如何准确判断瓶颈所在、从哪里入手排查?本文带你从数据库视图、系统指标、IO 性能等多个维度系统分析主备延迟背后的原因。

一、什么是主备延迟?

主库产生的日志(redo)需要实时同步到备库,备库再进行日志回放。如果回放速度跟不上接收速度,就会出现延迟。主备间的差距越大,数据一致性风险越高,影响容灾切换效果。
image.png
image.png

二、从哪里看延迟?

检查当前的日志同步进度

可以从系统视图中看到复制的相关信息,包括 redo 的 reset id(rst)、归档序列号(asn)、日志块偏移量(blockid)、日志刷盘号(lfn)等。通过这些指标,可以判断主备之间日志同步是否有明显落差。

image.png

关注备机回放状态

数据库在启动(MOUNT → OPEN)过程中,会进行日志回放。此时系统会显示 Redo Remain 值,即剩余需要回放的数据量。OPEN 之后,该值可能会清零或重置,但仍可以通过系统视图观测当前剩余日志数据量及预估回放时间(Remain Time)。
image.png

image.png
查看日志落盘速度

如果 redo 到达备库,但回放速度慢,问题可能出现在磁盘 IO 层。建议使用系统工具(如 iostat)查看磁盘的写入速率和延迟。

image.png
三、怎么看磁盘性能?

可以通过 iostat 命令获取详细的磁盘 IO 指标。常见字段解释如下:

r/s、w/s:每秒读写操作次数;

rkB/s、wkB/s:每秒读写数据量(单位 KB);

await:每个 IO 请求的平均等待时间(越低越好);

svctm:每次服务所需时间;

%util:磁盘利用率(接近 100% 表示磁盘极忙);

avgqu-sz:IO 队列平均长度(队列长说明系统处理不过来)。

如果 await 明显高于 svctm,说明 IO 队列积压严重,可能成为回放性能瓶颈。
image.png

四、还能从哪看?

YCM 图形化监控:如果你使用的是 V23.2.1.100 及以上版本,可以在 YCM 中直接查看主备延迟趋势图和数据指标,快速发现异常;

gstack 分析线程状态:在命令行执行 gstack yasdb 进程号 > gstack.txt,可以导出当前进程的线程栈状态,分析是否某个线程卡死或长时间占用资源。

五、真实案例参考

在一次生产数据迁移后,客户反馈数据库主备延迟异常严重。经排查,最终定位为备机磁盘写入带宽不足,导致 redo 积压严重,进而引发主备延迟暴涨。后续通过调整磁盘参数并优化并发度,问题得以缓解。

image.png
六、小结建议

要准确分析主备延迟,建议按照如下思路排查:

1.先从系统视图确认复制与回放状态;

2.再分析磁盘 IO 性能指标是否异常;

3.辅助使用 gstack 或 YCM 进行线程与趋势分析;

4.最后根据瓶颈位置做针对性优化,如扩容磁盘、提高写带宽或调整日志线程调度策略。

主备同步是高可用的核心基础,延迟过大不可忽视,建议运维团队建立监控与定期巡检机制。


数据库砖家
1 声望0 粉丝