首批通过分布式安全可靠测评,为关键业务系统打造
如何查看 clog 同步延迟?
更新时间:2026-06-12 04:01
本文讲述如何查看多副本之间的 clog 同步状态以及排查 clog 同步问题的过程。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
操作步骤
在 OceanBase 数据库中,Leader 副本的 clog 提交会主动进行多数派的同步,Follower 副本也会定期(每隔 4s)检查与 Leader 副本的同步差异。
执行以下 SQL 从
__all_virtual_clog_stat表中查看 Follower 副本与 Leader 副本 的 clog 同步延迟。obclient> select svr_ip,role,last_log_id,accu_log_count,accu_log_delay,is_in_sync,is_need_rebuild,next_replay_ts_delta from __all_virtual_clog_stat where table_id=1099511627971 and partition_idx=14;如果 clog 落后太多,会触发 rebuild 操作来追平。
在 Follower 节点的
observer.log里查找关键词fetch_window_size来判断 clog 拉取的效率。grep "fetch_window_size" observer.log | grep[2022-07-21 13:46:38.430465] INFO [CLOG] ob_log_sliding_window.cpp:3830 [44125][1252][Y0-0000000000000000] [lt=25] [dc=0] fetch_log_from_leader_or_parent(ret=0, partition_key_={tid:1114904790616166, partition_id:0, part_cnt:0}, dst_server="xx.xx.xx.xx:2882", dst_cluster_id=1648285935, fetch_log_execute_type=2, fetch_type=2, start_id=44908120, end_id=44908248, is_fetched=true, sw_start_id=44908119, max_log_id=44908119, next_ilog_id=44908120, next_ilog_ts=1658339241199193, leader="xx.xx.xx.xx:2882", parent={server:"xx.xx.xx.xx:2882", cluster_id:1648285935}, replica_type=0, last_fetched_max_log_id=44908247, fetch_log_interval=4000000, fetch_window_size=128)fetch_window_size是每次 fetch 日志的窗口大小。如果窗口过小,可能是因为 Follower 节点存在写瓶颈,或者 Leader 节点存在读瓶颈。 在 Leader 节点的
observer.log里查找关键词clog_hite_rate来判断 clog 读取的效率。grep "clog_hite_rate" observer.log[2022-07-21 13:34:27.509987] INFO [CLOG] ob_log_direct_reader.cpp:269 [90088][1190][Y0-0000000000000000] [lt=20] [dc=0] clog cache hit rate(dir_name="/home/admin/oceanbase/store/xxx_prod/clog", hit_count=294804, miss_count=75258, total_count=370062, hit_rate=7.966340775329538993e-01)Leader 节点上的 clog 读取是从 clog cache 获取,clog cache 的命中率在 90% 以上才能提供较好的读取效率。如果命中率太小,可以适当调大
cache_wash_threshold提升 cache 命中率,加速拉取日志。 在
observer.log里查找关键词cost too much time来判断 clog 写入是否存在性能问题。grep "cost too much time" observer.log | grep "writer"[2022-07-22 02:00:31.259481] WARN [CLOG] finish_timer (ob_log_timer_utility.h:37) [90084][0][Y0-0000000000000000] [lt=12] [dc=0] cost too much time(file="/home/admin/214_20220214173718768_255307427_code/rpm_workspace/src/clog/ob_clog_file_writer.cpp", line=710, time=15109)这个 WARN 表示写 clog 耗时过长,红色时间单位为 us,如果这个 WARN 很频繁,表示日志盘性能可能有问题。
通过
tsar --io -I <日志盘>命令来观察日志盘的读写效率。Time ----------------------------------------nvme0n1----------------------------------------- Time rrqms wrqms rs ws rsecs wsecs rqsize qusize await svctm util 28/07/22-02:25 0.00 0.00 0.97 72.34 3.89 457.62 6.30 0.00 0.02 0.02 0.11 28/07/22-02:30 0.00 0.00 0.97 69.31 3.89 420.03 6.03 0.00 0.01 0.01 0.09 28/07/22-02:35 0.00 0.00 0.97 71.81 3.89 449.63 6.23 0.00 0.01 0.01 0.10主库可以观测 rs 判断读请求量,备库可以观测 ws 判断写请求量。
观测网络情况。
如连通性、延时、吞吐量、丢包率、重传率、连接数等等,判断网络是否正常。