适用版本
OceanBase 数据库 V4.x 版本
操作步骤
在通过诊断表(GV$OB_COMPACTION_DIAGNOSE_INFO)确认转储没有失败的情况下,如果怀疑转储慢,转储队列有积压,可以查看以下日志。
在怀疑积压的时间段搜索。
$ grep "dump_dag_status.MINI_MER" observer.log. | grep "{$tenant_id}" | vi -

dag_count 表示对应时间段内,转储队列中的 DAG 数量,如果比较多,说明存在积压。
接下来可以继续判断是转储慢导致的积压还是冻结频繁导致的积压。
$ grep "sstable merge finish.MINI" observer.log. | grep "{$tenant_id}" | vi -

主要关注 merge_cost_time 和 wait_schedule_time。
如图所示,转储调度存在一定的延迟,每次转储的调度延迟在 21 秒左右;转储本身耗时约 600ms,因此在该例子中,转储队列的积压是冻结频繁,转储工作线程不够导致的。
如果通过筛选 merge_cost_time 发现存在耗时较长的转储,可以通过 occupy_size / merge_cost_time 换算出转储速度 MB/s,如果速度正常,则耗时长是数据量较大导致的;反之,可以借助 tsar 等工具进一步确认是不是磁盘 IO 达到了瓶颈等。
如果转储调度存在延迟,可以考虑调大转储线程数 compaction_high_thread_score,或者调高冻结阈值 freeze_trigger_percentage。