如何排查合并问题——《OceanBase诊断系列》之七

1. 前言

OceanBase数据库的存储引擎以 LSM-Tree 架构为基础,区分静态基线数据(存储在只读SSTable)和动态增量数据(存储在可读写MemTable)。其中 SSTable 是只读的,一旦生成就不再被修改,存储于磁盘;MemTable 支持读写,存储于内存。当进行数据库的DML操作时,如插入、更新或删除,这些操作首先被写入MemTable。随着MemTable中的数据量逐渐增大到一定规模时,这些数据会被转储到磁盘上,形成SSTable。在进行查询时,系统需要同时对SSTable和MemTable进行查询操作,然后将这两个查询结果进行归并,最终将归并后的查询结果返回给SQL层。此外,为了避免对基线数据的随机读,OceanBase还在内存中实现了Block Cache和Row Cache。

当内存的增量数据达到一定规模的时候,会触发增量数据和基线数据的合并,将增量数据写入磁盘。此外,系统还会在每天晚上的空闲时段自动进行每日合并操作。

1709088365

2. 视图介绍

视图功能
GV$OB_SSTABLES展示每台OBServer上各分区下的MEMTable和SSTable信息
CDB_OB_MAJOR_COMPACTION展示所有租户的全局合并信息
GV$OB_COMPACTION_PROGRESS展示租户的Server级compaction进度信息
GV$OB_TABLET_COMPACTION_PROGRESS展示tablet级的compaction进度信息
GV$OB_TABLET_COMPACTION_HISTORY展示tablet级的compaction历史信息
GV$OB_COMPACTION_DIAGNOSE_INFO展示compaction诊断信息
GV$OB_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.总结

1709089204

6. 附录

  • obdiag 官方文档: OceanBase分布式数据库-海量数据 笔笔算数
  • obdiag github地址: GitHub - oceanbase/oceanbase-diagnostic-tool: OceanBase Diagnostic Tool is designed to help OceanBase users quickly gather necessary information and analyze the cause of the problem.
第一篇如何修炼成“神医”——《OceanBase诊断系列》之一
第二篇走进SQL审计视图——《OceanBase诊断系列》之二
第三篇一键操作敏捷诊断工具obdiag收集诊断信息实践——《OceanBase诊断系列》之三
第四篇一键操作敏捷诊断工具obdiag分析OB集群日志设计与实践——《OceanBase诊断系列》之四
第五篇专为OceanBase打造的巡检工具已推出!给OceanBase进行一次体检吧——《OceanBase诊断系列》之五
第六篇obdiag帮你读懂全链路诊断日志——《OceanBase诊断系列》之六
第七篇如何排查合并问题——《OceanBase诊断系列》之七

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么给3d模型贴图?---模大狮模型网

在3D建模软件中给模型贴图是一种常见的操作&#xff0c;可以让模型外表更加生动和具有视觉效果。 给3D模型贴图&#xff1a; 准备贴图&#xff1a;首先需要准备好你要用来贴图的纹理图片&#xff0c;确保图片符合模型的尺寸和比例。 导入贴图&#xff1a;在3D建模软件中打开模…

多模态入门

VIT处理图像 CNN VS Transformer 多模态BLIP模型 网络结构 视觉编码器: 就是 ViT 的架构。将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征。视觉编码器不采用之前的基于目标检测器的形式,因为 ViLT 和…

YOLOv9(2):YOLOv9网络结构

1. 前言 本文仅以官方提供的yolov9.yaml来进行简要讲解。 讲解之前&#xff0c;还是要做一些简单的铺垫。 Slice层不做任何的操作&#xff0c;纯粹是做一个占位层。这样一来&#xff0c;在parse_model时&#xff0c;ch[n]可表示第n层的输出通道。 Detect和DDetect主要区别还…

Media Encoder 2024:未来媒体编码的新纪元 mac/win版

随着科技的飞速发展&#xff0c;媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求&#xff0c;Media Encoder 2024应运而生&#xff0c;它凭借卓越的技术和创新的特性&#xff0c;重塑了媒体编码的未来。 Media Encoder 2024软件获…

计算机的基础知识

计算机的特点及应用&#xff1a; 图灵说–计算就是基于规则的符号串变换从20世纪80年代开始&#xff0c;发达国家开始研制第五代计算机&#xff0c;研究的目标是能够打破以往计算机固有的体系结构&#xff0c;使计算机能够具有像人一样的思维、推理和判断能力&#xff0c;向智…

mysql的语法总结2

命令&#xff1a; mysql -u 用户名 -p mysql登录 命令&#xff1a;create database u1 创建数据库u1 查询数据库 使用数据库u1 创建表department 查询表department ALTER TABLE 表名 操作类型&#xff1b; 操作类型可以有以下的操作&#xff1a; 添加列&#x…

SpringMVC | SpringMVC的“入门“

目录: Spring MVC入门 :Spring MVC 概述第一个Spring MVC应用SpringMVC 的 “工作流程” Spring MVC入门 : 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正在努力学习、努力敲代码中! 让我们一起继续努力学习&#xff01; 该文章参考学习教材为&a…

一文读懂Persistence One- 如何将Restaking带入Cosmos

Persistence One正在将Restaking引入Cosmos。用户将能够通过pSTAKE、Stride、Quicksilver和Milkyway将Liquid Staked Tokens&#xff08;如ATOM、TIA、DYDX等&#xff09;存入Persistence One&#xff0c;对其进行Restaking&#xff0c;从而安全地连接更多区块链&#xff0c;首…

计算机网络之传输层 + 应用层

.1 CIDR地址块中还有三个特殊的地址块 a. 前缀 n 32 , 即32位IP地址都是前缀, 没有主机号, 这其实就是一个IP地址, 用于主机路由 b. 前缀 n 31 , 这个地址块中有两个IP地址, 主机号分别为0/1 , 这个地址块用于点对点链路 c. 前缀 n 0 , 用于默认路由使用二叉线索树查找转发…

就业班 2401--3.7 Linux Day13--日志轮转+jumpserver堡垒机

一、日志轮转 日志重要性 Linux系统日志对管理员来说&#xff0c;是了解系统运行的主要途径&#xff0c;因此需要对 Linux 日志系统有个详细的了解。 Linux 系统内核和许多程序会产生各种错误信息、告警信息和其他的提示信息&#xff0c;这些各种信息都应该记录到日志文件中&a…

【备战蓝桥杯系列】Java组国二选手笔记一:蓝桥杯中的常用语法特性

蓝桥杯Java国二选手笔记一&#xff1a;蓝桥杯中的常用语法特性 前言 参加了好几次蓝桥杯了&#xff0c;C组参加了&#xff0c;Java也参加过&#xff0c;也会用python刷算法。下面给出常用的Java语法特性在蓝桥杯中的使用&#xff0c;以及常见的需要注意的Java语法规范。有准备…

Git你必须知道的知识

一&#xff1a;使用Git的原因 我们在写版本的时候&#xff0c;可能会谢谢改改&#xff0c;可能要回到之前的文件&#xff0c;修改之前的文件&#xff0c;因此总是要保持很多个文件&#xff0c;且书写文件名也很麻烦。git可以有一个仓库&#xff0c;版本库&#xff0c;可以保存这…

c语言经典测试题12

1.题1 float f[10]; // 假设这里有对f进行初始化的代码 for(int i 0; i < 10;) { if(f[i] 0) break; } 上述代码有那些缺陷&#xff08;&#xff09; A: for(int i 0; i < 10;)这一行写错了 B: f是float型数据直接做相等判断有风险 C: f[i]应该是f[i] D: 没有缺…

GamiPress与MyCred:游戏化插件

游戏化插件很受欢迎&#xff0c;可以提高用户参与度并鼓励在动态网站和内容管理环境中采取所需的操作。GamiPress和MyCred 是游戏化领域的主要参与者&#xff0c;它们提供功能丰富的解决方案&#xff0c;将游戏机制有效地融入网站。旨在吸引并留住受众的组织面临着 GamiPress 和…

什么是攻防演练,能给企业带来什么

随着互联网技术的发展和企业信息化程度的提高&#xff0c;企业面临的网络安全威胁越来越多。为了保护企业的信息安全&#xff0c;攻防演练已经成为企业安全运营中不可或缺的一部分。攻击者通常会利用各种方法来破坏企业的安全系统和数据&#xff0c;因此企业需要像攻击者一样思…

TDengine 资深研发分享解决思路,长查询不再成为系统性能瓶颈!

长查询问题指的是在数据库写入和查询并存的日常应用场景中&#xff0c;存在处理数据量大且耗时很长的查询长时间占用系统资源&#xff0c;导致写入可能被阻塞的问题。有时&#xff0c;查询代码对于资源释放函数调用的遗忘也可能以长查询问题的形式表现出来。如何在数据写入不被…

一家新店怎么快速出体验分?教大家一个简单好用的方法,建议收藏

大家好&#xff0c;我是电商花花。 在现在直播电商时代&#xff0c;抖音电商已经成为了一种新兴的商业模式&#xff0c;在抖音小店的项目上&#xff0c;店铺体验分成为了抖音小店能否成功的一个关键因素之一。 店铺的体验分越高&#xff0c;我们店铺的权重才会更高&#xff0…

基于springboot+vue的在线远程考试系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

前端如何上传图片给后台?如何传递 multipart/form-data 类型的数据?图片大小、格式检查?

1. 如何上传图片&#xff1f; 图片上传需要传二进制流&#xff0c;请求头的 content-type 类型需为 multipart/form-data&#xff0c;传递的格式如下图所示 前后端交互通常为&#xff1a; 先调用接口上传二进制流图片然后再上传表单其他内容&#xff08;第一步通常会返回后台…

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习:创建并调用函数-字符集合的并集-上机代码

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习&#xff1a;创建并调用函数-字符集合的并集-上机代码 本文环境&#xff1a; win10 Thonny4.1.4 # 函数训练字符集合的并集 def my_union(str1,str2):list1 []list2 []i 0 while i < len(str1):lis…