OceanBase诊断调优 (十二) ——clog盘满问题排查

2024年 7月 25日 31.4k 0

背景

日志盘,即clog盘,是oceanbase中用于记录事务日志信息。在日常运行中其存储量会随着事务处理情况不断变化。在一些特殊场景下会出现clog盘占用量超过阈值的情况。
4.x架构下的clog盘,日志盘进行了租户级拆分,意味着无法再以3.x的视角判断clog是否盘满,例如通过df -h 命令查看clog盘是否使用超过80%,而是需要通过查看租户的日志盘使用判断租户的日志盘是否满。
ocp,obdiag等工具均已集成了对clog盘的巡检监控,但是对于clog盘满的根因分析还是需要很多较为复杂的流程。
ocp:ocp告警示例OceanBase诊断调优 (十二) ——clog盘满问题排查-1

obdiag:执行obdiag check即可,observer的巡检报告中clog.clog_disk_full会对此进行检测

本文将从obdiag根因分析clog盘满场景的流程来对分析流程进行盘查流程说明。

obdiag中关于clog盘满场景的排查流程实现

排查大纲

OceanBase诊断调优 (十二) ——clog盘满问题排查-2

判断日志盘是否到达阈值

不同的租户有不同的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类型

  1. 查找日志clog checkpoint no change,分析对应的service_type记为stuck_service_type并记录后续步骤存在依赖
  2. 查找日志:ObLSTxService::get_rec_scn,找到min_checkpoint_tx_log_type并筛选出来

明确日志回放/回调是否有问题

  1. 若stuck_service_type不为TRANS_SERVICE或MAX_DECIDED_SCN则直接跳过
  2. 查找日志:get_min_unreplayed_log_info,获取replay_scn,并将其转化为时间戳
replay_scn_time = datetime.datetime.fromtimestamp(float(replay_scn) / 1000000000)

3. 获取日志时间戳,并与replay_scn_time进行对比,若超过0.5minutes,则说明回放存在问题。

明确冻结是否有问题

  1. 若stuck_service_type不为TRANS_SERVICE则直接跳过。
  2. 查找日志[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则代表冻结存在问。

明确转储是否有问题

  1. 查找日志:Too many sstables in tablet, cannot schdule mini compaction, retry later,若存在对应日志则代码转储存在问题

后续定位问题处理

目前clog盘满场景仅定位到对应的模块出现了问题,但是具体的后续应急运维操作并未给出。目前的后续处理方案是 将clog解析结果反馈至社区或对应的商业版运维,可以大幅度减少前期定位模块时中间对接的过程。

后续场景升级

clog盘满场景较为复杂,后续会继续补充相关的流程优化等信息。在下级问题的排查(回放、冻结、转储)暂时未开发对应的rca根因分析脚本,需要继续进展。有兴趣对此进行开发的同学可以联系obdiag的SIG,同时若存在易用性类的问题也可以反馈给我们。

技术支持

排查思路及流程感谢 岩元(崔晓飞) 提供。

测试场景及案例感谢 靖永栋(中国联通软件研究院) 提供。

附录

有兴趣的DBA和开发者可以加入obdiag SIG进行共建开发。

obdiag 下载地址: https://www.oceanbase.com/softwarecenter

obdiag 官方文档: https://www.oceanbase.com/docs/obdiag-cn

obdiag github地址: https://github.com/oceanbase/oceanbase-diagnostic-tool

obdiag SIG 营地: https://oceanbase.yuque.com/org-wiki-obtech-vh7w9r/imzr6c

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论