首批通过分布式安全可靠测评,为关键业务系统打造
OCP 日志告警 clog 滑动窗口超时报错
更新时间:2026-06-12 04:01
适用版本
OceanBase 数据库 V3.x 版本。
问题描述
OCP 监控发现 OBServer 日志有以下 ERROR 信息(check_leader_sliding_window_not_slide),并且伴随有长事务告警。
告警详情[OB日志告警] 集群=htb_ap_obcluster, 机器=xxx.xxx.xxx.xxx, 错误码=-1, 错误名称=ERRORCODE_NOT_FOUND, 错误详情=[2023-02-02 21:20:15.842837] ERROR [CLOG] check_leader_sliding_window_not_slide_ (ob_log_state_mgr.cpp:2219) [102740][3405][Y0-0000000000000000] [lt=12] [dc=0] leader_active_need_switch_(partition_key={tid:1107208209220769, partition_id:0, part_cnt:0}, now=1675344015842806, last_check_start_id_time_=1675344005831328, sw max_log_id=113759, start_id=113759) BACKTRACE:0xa0c9a08 0xa0adec9 0x2be7951 0x2c64338 0x2c9f2f8 0x598c7b1 0x2ad30fd 0x2ad1ce7 0x2ad1648 0x2ad152e 0x2a42177 0x5a80024 0x478e679 0x3214134 0x9edc086 0x9ed936f 0x9ed499e
问题原因
OBServer 日志中有 transaction log callback use too much time 的报警。
[2023-02-02 21:20:15.842837] ERROR [CLOG] check_leader_sliding_window_not_slide_ (ob_log_state_mgr.cpp:2219) [102740][3405][Y0-0000000000000000] [lt=12] [dc=0] leader_active_need_switch_(partition_key={tid:1107208209220769, partition_id:0, part_cnt:0}, now=1675344015842806, last_check_start_id_time_=1675344005831328, sw max_log_id=113759, start_id=113759) BACKTRACE:0xa0c9a08 0xa0adec9 0x2be7951 0x2c64338 0x2c9f2f8 0x598c7b1 0x2ad30fd 0x2ad1ce7 0x2ad1648 0x2ad152e 0x2a42177 0x5a80024 0x478e679 0x3214134 0x9edc086 0x9ed936f 0x9ed499e
[2023-02-02 21:20:15.842954] INFO [CLOG] ob_log_state_mgr.cpp:2453 [102740][3405][Y0-0000000000000000] [lt=102] [dc=0] current log_task status(partition_key={tid:1107208209220769, partition_id:0, part_cnt:0}, role=1, state=4, start_id=113759, *log_task={log_type_:201, proposal_id_:{time_to_usec:1654029853008050, server:"198.xx.xx.xx:2882"}, log_buf_len_:0, log_id:113759, generation_timestamp:1675344005862388, submit_timestamp_:1675344005862388, next_replay_log_ts_:1675344005862388, data_checksum:2910397495, epoch_id_:1654029853008050, accum_checksum_:0, state_map:{val:8259}, ack_list:3"198.xx.xx.xx:2882";"198.xx.xx.xx:2882";"198.xx.xx.xx:2882";, submit_cb:0x7f1207ce80b8, majority_cnt:3, log_cursor:{file_id:76437, offset:42561824, size:322}})
[2023-02-02 21:20:37.861477] WARN [STORAGE.TRANS] on_success (ob_trans_submit_log_cb.cpp:221) [101065][1594][YB42C61D1118-0005E03C04AF17A7] [lt=6] [dc=0] transaction log callback use too much time(get_ctx_used=1, callback_used=31998519,
revert_ctx_used=-1, partition_key={tid:1107208209220769, partition_id:0, part_cnt:0}, log_id=113759, log_type=512, timestamp=1675344005862388)
[2023-02-02 21:20:37.861487] WARN [CLOG] submit_log_succ_cb (ob_log_task.cpp:332) [101065][1594][YB42C61D1118-0005E03C04AF17A7] [lt=7] [dc=0] transaction on success costs(on_success_duration=31998535, pkey={tid:1107208209220769, partitio
n_id:0, part_cnt:0}, log_id=113759)
根据日志可以看到事务日志 callback 回调耗费时间较长导致。
事务 callback 是事务执行时生成的日志回调。在事务 commit 时或者发生切主时,均需要遍历事务的 callback 列表,来确保事务日志的完整性。在大事务场景,事务提交时因为 callback list 太长,导致遍历 callback list 的时间超过了滑动窗口的 timeout 设置(3.x 版本默认为 10s),从而触发 leader 卸任、切主。
本案例中,触发问题时正在执行历史数据的清理任务,清理的数据量 300W 左右,是一个大事务。
解决方法
该问题本质上是 OceanBase 数据库 V3.x 版本的架构限制导致,避免此类问题的方法是:减小事务粒度,分批提交。
相关信息
clog 滑动窗口的介绍。
clog 滑动窗口用来缓存还没有完成多数派确认(confirm)的 clog 日志。OceanBase 数据库的事务提交保证在完成了 clog 多数派落盘和本地落盘后,便可以将 clog 从本地(Leader 或者 Follower)的滑动窗口中滑出。
clog 滑动窗口以分区为单位进行管理,其大小由租户级参数
clog_max_unconfirmed_log_count控制。- 在默认设置下,Leader 的滑动窗口为 1500,Follower 的滑动窗口为 3000。
在高并发、大批量数据更新(插入)操作中,可能会出现滑动窗口满掉,事务提交持久化性能变差,甚至会引起切主(日志同步超时导致主动卸任)导致事务失败。此时,需要提高
clog_max_unconfirmed_log_count值来应对。