如何用 obdiag 排查 OceanBase数据库的卡合并问题——《OceanBase诊断系列》14

1. 背景

卡合并在OceanBase中是一个复杂的问题,其产生可能源于多种因素。目前,对于卡合并的明确界定尚不存在统一标准,一方面,我们界定超过36小时未完成合并为合并超时,此时RS会记录ERROR日志;另一方面,用户也可能依据自身经验来判断合并是否超时。当用户怀疑合并可能已超时,可利用巡检工具进行检查,以确认是否存在问题,并且得到一系列基础数据方便研发做一个初步的判断,省去一些反复沟通的时间。本文描述了 OceanBase 4.x 版本基于obdiag,如何进行卡合并的分析和诊断。

2. 卡合并诊断流程说明

2.1. 发现卡合并问题

巡检认为合并/转储存在潜在问题可以有三点:

  1. CDB_OB_MAJOR_COMPACTION里IS_ERROR=YES
    1. 其中当CDB_OB_MAJOR_COMPACTION里IS_SUSPENT=YES,可以提示用户,用户可能是有意设置也有可能是无意设置
  2. __all_virtual_compaction_diagnose_info里存在status=FAILED的记录
  3. GV$OB_COMPACTION_PROGRESS表中,根据上一次合并记录中的data_size/(estimated_finish_time-start_time)与当前合并版本记录中(data_size-unfinished_data_size)/(当前时间-start_time)相比,如果差距过大(当前合并比上一次合并慢很多,以5倍为指标),那可能可以认为合并存在异常

2.2. 卡合并诊断

2.2.1. 确定合并记录

查询CDB_OB_MAJOR_COMPACTION,找到status=COMPACTING的记录(需要收集回来)

    1. 可以先检查一下IS_ERROR和IS_SUSPENDED是否非NO,IS_ERROR通常发生在出现数据不一致的时候,INFO里会显示具体问题;IS_SUSPENDED表示暂停了合并,有时候会忘了执行过暂停合并操作,需要手动恢复合并(ALTER SYSTEM RESUME MERGE;

1726058071

  1. 查询__all_virtual_compaction_diagnose_info,最好根据上面得到的结果,每个租户查一次,方便看(需要收集回来)。
  2. 如果有记录,根据DIAGNOSE_INFO字段的内容来具体分析。这里只介绍了一部分常见的信息,其他的目前还是考虑先把诊断表结果拿回来,我分析后再手动进行下一步:
    1. schedule medium failed
      1. 查找这台机器上,CREATE_TIME附近时间的observer.log,grep "decide_medium_snapshot",捞到信息后,把线程号摘出来,更换过滤关键字grep "\[线程号]",收集decide_medium_snapshot关键字前后20行的日志。通常里面会有报错上下文
    2. %error_no=%error_trace=%
      1. 这种情况通常有dag任务失败了,首先查__all_virtual_tablet_meta_table,看下这个分区的compaction_scn是否小于合并版本(global_broadcast_scn),如果小于再进行步骤2
      2. 在对应机器的对应时间附近,grep "error_trace",收集这部分日志回来,整个trace的日志通常不会很多,尽可能捞到报错前后的日志。
不影响正常流程的错误码!!!
constexpr int OB_NO_NEED_MERGE = -4677; // 调度的时候发现可以做Compaction,实际执行时发现不满足Compaction要求
constexpr int OB_CANCELED = -4072; // dag任务被cancel掉,上层逻辑停止了compaction任务
如果是scheduler报错4072,怀疑是执行了suspend merge,需要resume merge--4.0版本--
constexpr int OB_TABLE_IS_DELETED = -4279; // 表被删除
constexpr int OB_TENANT_HAS_BEEN_DROPPED = -5685; //租户被删
constexpr int OB_LS_NOT_EXIST = -4719; // 日志流不存在
constexpr int OB_TABLET_NOT_EXIST = -4725; //表被删比较危险的错误
constexpr int OB_CHECKSUM_ERROR = -4103; // 数据checksum报错
constexpr int OB_ROWKEY_ORDER_ERROR = -4105; // rowkey乱序
constexpr int OB_PHYSIC_CHECKSUM_ERROR = -4108; // 物理checksum问题,多发现于物理盘有问题
constexpr int OB_CS_OUTOF_DISK_SPACE = -4184; // datafile中没有空闲宏块时报错,表示集群写的数据达到上限。需要扩展存储空间

   3. weak read ts is not ready

      1. 查询对应租户和ls_id的__all_virtual_ls_info结果(收集)
      2. 过滤出weak_read_scn比合并版本(global_broadcast_scn)小的记录,到相应机器上在最新几个observer日志里grep "weak_read_scn+1的值"、"generate_weak_read_timestamp_"以及"log disk space is almost full"(收集)
      3. 如何进一步判断可以咨询日志或事务组同学

   4. memtable can not create dag successfully

      1. 首先查__all_virtual_tablet_meta_table,看下这个分区的compaction_scn是否小于合并版本(global_broadcast_scn),如果小于再进行ii
      2. 查询这台机器这个租户的__all_virtual_dag_scheduler(收集回来)

   5. medium wait for freeze或者major wait for freeze

      1. 查询这台机器这个租户的__all_virtual_dag_scheduler(收集回来)

   6. major not schedule for long time

      1. 查询该分区的__all_virtual_tablet_compaction_info(收集回来)
      2. 到该机器observer.log 查找grep "MediumLoo" | grep T租户id,然后摘出线程号,更换关键词grep "\[线程号]",在最新日志里收集1000行日志

3. 查询GV$OB_COMPACTION_PROGRESS,指定租户和compaction_scn,分别查compaction_scn=当前合并版本global_broadcast_scn以及compaction_scn=上一个合并版本(last_scn)的记录(收集回来)

    1. 如果当前版本的所有记录status都是FINISH,那么查询CDB_OB_LS_LOCATIONS,查到租户ls_id=1的leader机器,到该机器上查找最新的几个rootservice.log,grep "major_merge_progress_checker" | grep Txxxx,将日志收集回来
    2. 根据上一次合并记录中的data_size/(estimated_finish_time-start_time)与当前合并版本记录中unfinished_data_size/当前时间-start_time相比,如果差距过大(当前合并比上一次合并慢很多),那可能可以认为合并存在异常

4. 查询GV$OB_COMPACTION_SUGGESTIONS,把结果收集回来

5. 查询oceanbase.__all_virtual_dag_warning_history,收集status="RETRYED",type like "%MERGE%"的结果。并收集gmt_create附近时间点的observer日志,过滤task_id

4. 如何借助obdiag来快速处理卡合并问题

目前阶段卡合并场景主要用于初步的分析定位及有效信息收集,需要在完成后将收集的有效信息进行打包并上传社区 问答区或 OceanBase 运维进行进一步分析。

obdiag rca run --scene=major_hold 

案例参考:OB社区版4.2.1 1T数据量10G以下数据增量 每日合并时间20小时左右 如何优化

4. 后续场景升级

目前实现仅作为排查的信息收集对于底层的分析未实现,后续将逐步进行深入的根因分析

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

5. 技术支持

排查思路及流程感谢 镜水(胡皓胜) 提供。

附录

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

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

•obdiag github地址: GitHub - oceanbase/obdiag: obdiag (OceanBase Diagnostic Tool) is designed to help OceanBase users quickly gather necessary information and analyze the root cause of the problem.

•obdiag SIG 营地: [obdiag SIG] 诊断工具组 · OceanBase 技术交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4个硬盘数据修复攻略:让你的数据失而复得。

据统计,在硬盘数据丢失的情况当中,有7成是因误删除、格式化和病毒攻击导致的。并且对与很多人来说,数据丢失是一个不小的问题。今天我就给大家分享几款能够帮助硬盘恢复数据的工具,希望能够在数据丢失是减小大家的焦虑。 1、福昕硬…

mac nwjs程序签名公证(其他mac程序也一样适用)

为什么需要公证 mac os14.5之后的系统,如果不对应用进行公证,安装,打开,权限使用上都会存在问题,而且有些问题你强制开启(sudo spctl --master-disable)使用后可能会有另外的问题, …

Python+pytest接口自动化之session会话保持的实现

前言 在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢?我们可以通过Cookie绕过登录,其实这就是保持登录状态的方法之一。那么今天笔者想讲通过session进行会话保持…

衡石分析平台系统分析人员手册-导入图表库图表

导入图表库图表​ 本文讲述在仪表盘中如何使用图表库图表,如果您还不了解图表库,请先点击链接了解它的功能和作用。 在数据集市中建立图表库后,分析人员可以在应用创作中引用图表库图表,快速的进行数据分析工作。 导入图表库图…

Unix:Linux的“祖师爷”

目录 Unix的诞生 Unix对Linux的深远影响 Unix与Linux区别在哪里? Unix的诞生 Unix操作系统诞生于1969年,由肯汤普逊(Kenneth Lane Thompson)和丹尼斯里奇(Dennis MacAlistair Ritchie)在AT&T的贝尔实…

前端算法:树(力扣144、94、145、100、104题)

目录 一、树(Tree) 1.介绍 2.特点 3.基本术语 4.种类 二、树之操作 1.遍历 前序遍历(Pre-order Traversal):访问根节点 -> 遍历左子树 -> 遍历右子树。 中序遍历(In-order Traversal&#xf…

Spring Web MVC 入门

1. 什么是 Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从从⼀开始就包含在Spring框架中。它的 正式名称“SpringWebMVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC". 什么是Servlet呢? Ser…

Oracle OCP认证考试考点详解082系列01

题记: 本篇博文是Oracle OCP认证考试考点详解082系列的第一篇,本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 1. 第一题: 1. 题目 2. 解析及答案 关于Oracle数据库中节…

映射问题的解决办法(mybaitis)

最初我用的是注解来操控数据库&#xff08;注释掉的部分&#xff09; Mapper public interface ThreadMapper {// Select("SELECT * FROM thread LIMIT #{page}, #{size}")List<Thread> getListByPage(Param("page") int page, Param("size&qu…

嵌入式学习-网络-Day03

嵌入式学习-网络-Day03 1.linux下IO模型及特点 1.1阻塞式IO 1.2非阻塞式IO 设置非阻塞&#xff1a; 1&#xff09;通过函数参数设置 2&#xff09;通过fcntl函数设置文件描述符属性 1.3信号驱动IO&#xff08;异步IO&#xff09; 1.4IO多路复用&#xff08;重点&#xff09; IO…

【Qt】QTableView添加下拉框过滤条件

实现通过带复选框的下拉框来为表格添加过滤条件 带复选框的下拉框 .h文件 #pragma once #include <QCheckBox> #include <QComboBox> #include <QEvent> #include <QLineEdit> #include <QListWidget>class TableComboBox : public QComboBox …

云渲染渲染100怎么使用?

下载安装步骤&#xff1a; 访问官方网站下载客户端&#xff1a; 请访问渲染100官网&#xff1a;云渲染_性价比更高的3D云渲染平台_渲染100【官网】&#xff0c;并点击“客户端下载”按钮。 安装程序&#xff1a; 下载完成后&#xff0c;双击安装文件进行安装。在安装过程中&am…

记录运维大屏监控平台的开发、springboot实现服务器性能监测分析系统

1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a;windows 7…

Cesium基础-(Entity)-(Box)

** 里边包含Vue、React框架代码详细步骤、以及代码详细解释 ** 3、Box 盒子 以下是 BoxGeometry 类的属性、方法和静态方法,以表格形式展示: 属性 属性名类型默认值描述minimumCartesian3盒子的最小 x, y, 和 z 坐标。maximumCartesian3盒子的最大 x, y, 和 z 坐标。vertex…

CRC 校验码

试题&#xff1a;若信息码字为111000110&#xff0c;生成多项式G(x)x5x3 x1&#xff0c;则计算出的CRC校验码为&#xff08; &#xff09;。 1、多项式 通过多项式和信息码来生成校验码 按照从最高次幂到最低次幂的顺序&#xff0c;将系数依次排列就可以得到二进制表达式 x5x3…

2024年下教师资格证面试报名详细流程❗

⏰ 重要时间节点&#xff1a; &#xff08;一&#xff09;下半年笔试成绩查询&#xff1a;11月8日10:00 &#xff08;二&#xff09;注册报名&#xff1a;11月8日10:00-11日18:00 &#xff08;三&#xff09;网上审核&#xff1a;11月8日10:00-11日18:00 &#xff08;四&#x…

Flume的安装配置

一、上传解压 tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /usr/local/soft/#***在环境变量中增加如下命令&#xff0c;可以使用 soft 快速切换到 /usr/local/soft***alias softcd /usr/local/soft/ 二、配置环境变量 soft #重命名 mv apache-flume-1.9.0-bin/ flume-1.9.0…

React写关键字高亮的三个方案

1.js正则replaceAlldangerouslySetInnerHTML{{ __html: xxx }}危险属性 步骤最简单,但是是危险属性,不推荐使用,项目中实在没有头绪,可以使用它应急 通过useMemo计算得到新的状态值,赋值给dangerouslySetInnerHTML属性的__html 关键代码: const [state1, setState1] useSt…

基于YOLOv11的动物类别实时检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)

100多种【基于YOLOv8/v10/v11的目标检测系统】目录&#xff08;pythonpyside6界面系统源码可训练的数据集也完成的训练模型&#xff09; 摘要&#xff1a; 本文提出了一种基于YOLOv11算法的动物检测系统&#xff0c;利用7101张图片&#xff08;5521张训练集&#xff0c;1580张…

OutLook for Windows(New) 滚蛋吧

电脑OS:Windows 10 问题发生原因,不小心点击了应用商店里面的全部更新,电脑上的邮件 (UWP)应用直接给升级成最新的了,点击邮件直接闪切OutLook for Windows(New) 这个软件, 应用升级本来是一件好的事情,但是在Windows应用商店里面就是一件非常差劲的事情,有的软件升级之后更难…