背景
日志盘,即clog盘,是oceanbase中用于记录事务日志信息。在日常运行中其存储量会随着事务处理情况不断变化。在一些特殊场景下会出现clog盘占用量超过阈值的情况。4.x架构下的clog盘,日志盘进行了租户级拆分,意味着无法再以3.x的视角判断clog是否盘满,例如通过df -h 命令查看clog盘是否使用超过80%,而是需要通过查看租户的日志盘使用判断租户的日志盘是否满。ocp,obdiag等工具均已集成了对clog盘的巡检监控,但是对于clog盘满的根因分析还是需要很多较为复杂的流程。ocp:ocp告警示例
obdiag:执行obdiag check即可,observer的巡检报告中clog.clog_disk_full会对此进行检测
本文将从obdiag根因分析clog盘满场景的流程来对分析流程进行盘查流程说明。
obdiag中关于clog盘满场景的排查流程实现
排查大纲
判断日志盘是否到达阈值
不同的租户有不同的clog盘阈值,clog盘阈值依据以下公式进行计算,当对应租户的LOG_DISK_IN_USE>clog盘阈值时即认定此租户在对应节点的clog盘满,需要进行根因分析。
clog盘阈值=log_disk_utilization_threshold*LOG_DISK_SIZE
确定租户下哪些/哪个日志流日志盘使用存在异常
当找到某个租户在某个节点上存在clog盘满后,则继续分析对应的日志流是哪个。可通过以下sql获取对应日志流,获取到的数据即可以定位对应的日志流、租户、节点信息,接下来即进行对具体问题的分析。
select * from oceanbase.__all_virtual_log_stat where tenant_id = {0} and end_lsn-base_lsn >128*1024*1024 and svr_ip='{1}' and svr_port={2} ;
确认checkpoint类型
- 查找日志clog checkpoint no change,分析对应的service_type记为stuck_service_type并记录后续步骤存在依赖
- 查找日志:ObLSTxService::get_rec_scn,找到min_checkpoint_tx_log_type并筛选出来
明确日志回放/回调是否有问题
- 若stuck_service_type不为TRANS_SERVICE或MAX_DECIDED_SCN则直接跳过
- 查找日志:get_min_unreplayed_log_info,获取replay_scn,并将其转化为时间戳
replay_scn_time = datetime.datetime.fromtimestamp(float(replay_scn) / 1000000000)
3. 获取日志时间戳,并与replay_scn_time进行对比,若超过0.5minutes,则说明回放存在问题。
明确冻结是否有问题
- 若stuck_service_type不为TRANS_SERVICE则直接跳过。
- 查找日志[TenantFreezer] oldest frozen memtable,找到日志行中存在的log_frozen_memstore_info 和[TenantFreezer] oldest frozen memtable字段,分析出对应的ready_for_flush_time和frozen_time并转为时间戳。
ready_flush_time = datetime.datetime.fromtimestamp(float(ready_for_flush_time_list[i]) / 1000000000)
frozen_time = datetime.datetime.fromtimestamp(float(frozen_time_list[i]) / 1000000000)
3. 对比两者大小,若stuck_time > stuck_delta则代表冻结存在问。
明确转储是否有问题
- 查找日志:Too many sstables in tablet, cannot schdule mini compaction, retry later,若存在对应日志则代码转储存在问题
后续定位问题处理
目前clog盘满场景仅定位到对应的模块出现了问题,但是具体的后续应急运维操作并未给出。目前的后续处理方案是 将clog解析结果反馈至社区或对应的商业版运维,可以大幅度减少前期定位模块时中间对接的过程。
后续场景升级
clog盘满场景较为复杂,后续会继续补充相关的流程优化等信息。在下级问题的排查(回放、冻结、转储)暂时未开发对应的rca根因分析脚本,需要继续进展。有兴趣对此进行开发的同学可以联系obdiag的SIG,同时若存在易用性类的问题也可以反馈给我们。
技术支持
排查思路及流程感谢 岩元(崔晓飞) 提供。
测试场景及案例感谢 靖永栋(中国联通软件研究院) 提供。
附录
有兴趣的DBA和开发者可以加入obdiag SIG进行共建开发。
•obdiag 下载地址: OceanBase分布式数据库-海量数据 笔笔算数
•obdiag 官方文档: OceanBase分布式数据库-海量数据 笔笔算数
•obdiag github地址: https://github.com/oceanbase/oceanbase-diagnostic-tool
•obdiag SIG 营地: [obdiag SIG] 诊断工具组 · OceanBase 技术交流