【OceanBase诊断调优 】 —— 合并问题如何排查?

最近总结一些诊断OCeanBase的一些经验,出一个【OceanBase诊断调优】专题,也欢迎大家贡献自己的诊断OceanBase的方法。

1. 前言

OceanBase 数据库的存储引擎基于 LSM-Tree 架构,将数据分为静态基线数据(放在 SSTable 中)和动态增量数据(放在 MemTable 中)两部分,其中 SSTable 是只读的,一旦生成就不再被修改,存储于磁盘;MemTable 支持读写,存储于内存。数据库 DML 操作插入、更新、删除等首先写入 MemTable,等到 MemTable 达到一定大小时转储到磁盘成为 SSTable。在进行查询时,需要分别对 SSTable 和 MemTable 进行查询,并将查询结果进行归并,返回给 SQL 层归并后的查询结果。同时在内存实现了 Block Cache 和 Row cache,来避免对基线数据的随机读。

当内存的增量数据达到一定规模的时候,会触发增量数据和基线数据的合并,把增量数据落盘。同时每天晚上的空闲时刻,系统也会自动每日合并。

2. 视图介绍

|----------------------------------|--------------------------------------|
| 视图 | 功能 |
| GVOB_SSTABLES | 展示每台OBServer上各分区下的MEMTable和SSTable信息 | | CDB_OB_MAJOR_COMPACTION | 展示所有租户的全局合并信息 | | GVOB_COMPACTION_PROGRESS | 展示租户的Server级compaction进度信息 |
| GVOB_TABLET_COMPACTION_PROGRESS | 展示tablet级的compaction进度信息 | | GVOB_TABLET_COMPACTION_HISTORY | 展示tablet级的compaction历史信息 |
| GVOB_COMPACTION_DIAGNOSE_INFO | 展示compaction诊断信息 | | GVOB_COMPACTION_SUGGESTIONS | 展示compaction建议信息 |

3.如何借助视图排查问题

3.1 合并/Major Merge

1)通过CDB_OB_MAJOR_COMPACTION查看当前集群的合并情况,如果STATUS处于COMPACTING状态,说明正在执行合并;

复制代码
select * from CDB_OB_MAJOR_COMPACTION;

2)通过GV$OB_COMPACTION_PROGRESS查询server级别的合并进度,可以看到当前是否有合并任务(STATUS="NODE_RUNNING"),未完成的tablet数量(UNFINISHED_TABLET_COUNT)等信息.

复制代码
select * from GV$OB_COMPACTION_PROGRESS where STATUS="NODE_RUNNING";
更具体来说:
select * from GV$OB_COMPACTION_PROGRESS where tenant_id = xx and compaction_scn = xxx and STATUS != "FINISH";

3)通过GV$OB_TABLET_COMPACTION_PROGRESS查询tablet级别的合并进度,可以看到未完成的数据量(UNFINISHED_DATA_SIZE),预期完成时间(ESTIMATED_FINISH_TIME)等信息

复制代码
select * from GV$OB_TABLET_COMPACTION_PROGRESS;

4)对于未出现在tablet合并进度中的tablet或者长时间未完成的tablet,可以通过GV$OB_COMPACTION_DIAGNOSE_INFO进行诊断,查看是否有异常情况出现

复制代码
select * from GV$OB_COMPACTION_DIAGNOSE_INFO;
注意事项

合并是否卡住没有一个硬性指标,但通常可以检查CDB_OB_MAJOR_COMPACTION表中是否存在租户的STATUS长时间处于COMPACTING状态(这里的长时间需要根据数据量和经验判断,无脑判断的话36小时)。

另一个判断方式是检查GV$OB_COMPACTION_PROGRESSSTATUS="NODE_RUNNING"的合并任务,是否长时间没有更新过UNFINISHED_TABLET_COUNT

排查步骤

首先无脑查GV$OB_COMPACTION_DIAGNOSE_INFO视图,如果有信息则根据第三小节的具体内容判断原因。

3.2 转储/Mini Merge

1)通过GV$OB_SSTABLES查看是否存在冻结的MEMTable

复制代码
select * from GV$OB_SSTABLES where table_type = "MEMTABLE" and is_active = "NO";

2)通过GV$OB_TABLET_COMPACTION_PROGRESS查询tablet级别的合并进度,可以看到未完成的数据量(UNFINISHED_DATA_SIZE),预期完成时间(ESTIMATED_FINISH_TIME)等信息

复制代码
select * from GV$OB_TABLET_COMPACTION_PROGRESS;

4)对于未出现在tablet合并进度中的tablet或者长时间未完成的tablet,可以通过GV$OB_COMPACTION_DIAGNOSE_INFO进行诊断,查看是否有异常情况出现

复制代码
select * from GV$OB_COMPACTION_DIAGNOSE_INFO;

3.3 诊断视图GV$OB_COMPACTION_DIAGNOSE_INFO指南

概念:在Compaction出现异常的情况下,OBServer会收集相关信息用于原因诊断。

用法:select * from GV$OB_COMPACTION_DIAGNOSE_INFO;

首先通过STATUS来过滤信息的严重程度,从低到高:

  • SPECIAL:用来输出一些相同问题的tablet数量
  • RS_UNCOMPACTED:不一定存在异常。说明还存在tablet版本尚未推高至当前合并版本号,可以先通过GV$OB_COMPACTION_PROGRESS判断是否处于正常合并进行的状态。如果还有RUNNING的合并,则大概率是合并任务的问题。
  • NOT_SCHEDULE:表示compaction长时间未被调度。比较常见的是出现在follow上,由于medium info的同步落后导致的合并未调度;以及由于dag数量超限导致的MINI未调度。
  • FAILED:表示出现一些明显的异常。

具体的问题主要通过DIAGNOSE_INFO字段来描述。

4.如何借助obdiag来分析合并问题

obdiag官网文档参见: OceanBase分布式数据库-海量数据 笔笔算数

使用 obdiag rca 命令可帮助 OceanBase 数据库相关的诊断信息分析,目前支持对 OceanBase 的异常场景进行分析,找出可能导致问题的原因。

复制代码
obdiag rca list # 列出所有的根因分析场景
obdiag rca run --scene=<scene_name> #执行具体场景的根因分析

scene_name 包含如下:

  • disconnection:一键断连诊断,基于obproxy的诊断日志。
  • major_hold: 一键卡合并诊断。
  • lock_conflict: 一键锁冲突诊断。

示例:分析卡合并场景

复制代码
obdiag rca run --scene=major_hold

5.总结

6. 附录

相关推荐
OceanBase数据库官方博客1 天前
主流关系型数据库系统缺陷实证研究——OceanBase 校企联合研究
数据库·oceanbase·分布式数据库
OceanBase数据库官方博客1 天前
客户案例|美的以OceanBase为基构建云中立数字化基座破局多云孤岛
数据库·oceanbase·分布式数据库
OceanBase数据库官方博客1 天前
基于分层协作多智能体的数据库参数调优——OceanBase 校企研究
数据库·oceanbase·分布式数据库
OceanBase数据库2 天前
滔搏基于OceanBase实现 15TB到0.9TB“无痛切换”与“系统瘦身”
oceanbase·分布式数据库
OceanBase数据库3 天前
基于分层协作多智能体的数据库参数调优——OceanBase 校企研究
oceanbase·分布式数据库
OceanBase数据库3 天前
美的以OceanBase为基构建云中立数字化基座破局多云孤岛
oceanbase·分布式数据库
OceanBase数据库5 天前
印尼头部私营征信机构基于OceanBase实现核心数据库现代化升级
oceanbase·分布式数据库
OceanBase数据库官方博客5 天前
深度解读 OceanBase 多模一体化能力
数据库·ai·oceanbase·分布式数据库
赵渝强老师9 天前
【赵渝强老师】国产金仓数据库的数据库对象
数据库·postgresql·oracle·oceanbase·国产数据库
OceanBase数据库官方博客10 天前
OceanBase 一体机实现极简运维 10:1数据压缩降成本
oceanbase·分布式数据库