当前位置: 首页 > article >正文

与中国联通技术共建:通过obdiag分析OceanBase DDL中的报错场景

中国联通软件研究院(简称联通软研院)在全面评估与广泛调研后,在 2021年底决定采用OceanBase  作为基础,自研分布式数据库产品CUDB(即China Unicom Database,中国联通数据库)。目前,该分布式CUDB已在中国联通的338多个项目中顺利实施,助力完成了85TB的应用数据迁移,使慢SQL查询数量减少了43%,同时数据库运维效率的人均提升达到了20%。

为完善产品能力,支撑中国联通个性化的业务需求,联通软研院与OceanBase社区在数据库的内核和外围工具层面展开共建,比如事务日志解析LogMiner、敏捷诊断工具obdiag 等功能的深度共建,以及实现多个核心功能的研发,修复多个OceanBase内核BUG。其中,对于LogMiner的共建历程与经验已发文分享,本文主要分享obdiag共建的技术背景、设计思路、实现细节及其带来的价值。

一、分布式CUDB演进历程 

四年前,中国联通基于内部数据库系统的痛点与外部100%自研要求的背景,启动全栈分布式数据库建设。从替代高危 MySQL、降低商用依赖,以及提升中国联通软研院软实力等多方面考虑,选定基于国内开源分布式数据库产品OceanBase打造自研数据库产品分布式CUDB(详情见生产系统稳定上线600天 ——中国联通分布式 CUDB 的开源共建和规模化应用)。

1730081746

对于分布式 CUDB 的演进历程,简言之,联通软研院在引进OceanBase的第一年着重于产品化建设。实现产品的一键开通、弹性扩缩、高效迁移,并且开始试点推广应用。2023年开始对接监控运维体系,并且开始大规模推广使用。重点聚焦数据库产品生态工具方面的补齐和人员能力的提升,为替代 MySQL 和新上应用提供全栈国产的数据库资源及服务能力。 

虽然联通软研院做了很多产品能力建设,如高效的数据迁移、异地容灾高可用、完善的数据库自治服务、智能预测与诊断自愈,形成了相对完善的产品体系。但仍面临诸多挑战,比如现有功能不完全满足联通的个性化需求,再比如运维人员对数据库内核和源码的掌控不足,导致处理集群问题时非常棘手。

因此,在2024年,联通软研院推动智能化运维,着手智能运维建设。其中,为进一步提高自动化运维诊断效率,联通软研院与OceanBase携手合作,在OceanBase敏捷诊断工具obdiag的基础上进行深度共建,并深入内核研究,共同研发了一项全新的功能——建索引报错的根因分析功能。

、敏捷诊断工具obdiag共建背景

OceanBase是原生分布式数据库系统,故障根因分析通常是比较繁琐的,涉及的因素可能有很多,如机器环境、配置参数、运行负载等。专家在排查问题的时候需要获取大量的信息来分析故障。

那么,如何高效地获取故障场景下分散在各个节点的信息,挖掘其中的关联性,帮助用户自助诊断问题呢?

在引入obdiag前,每当遇到OceanBase数据库系统的复杂故障时,用户往往求助于原厂的专业团队。这不仅是因为故障排查涉及大量分布在不同节点上的信息,而且收集和整理这些信息缺乏统一的工具,再加上与专家反复沟通确认细节的过程,使整个故障解决周期变得漫长且充满变数。

1730081776

拥有obdiag这一敏捷诊断工具后,通过obdiag的一键集群巡检、一键诊断分析、一键信息收集及一键根因分析功能,大大简化了故障排查的交互过程。即便是经验相对不足的技术人员也能够快速地识别出潜在问题,并根据诊断结果采取相应的措施,提升了故障排查工作的效率。 

然而,obdiag现有的功能并不能满足联通软研院的故障排查需求。众所周知,在数据库运维中,DDL(Data Definition Language)操作是常见且重要的组成部分,其中包括创建、删除或修改数据库对象,比如表、索引等。但在实际生产环境中,DDL操作可能会因为各种原因失败,比如资源不足、并发冲突等,这会给业务带来不必要的中断和损失。为了解决这个问题,联通软研院基于obdiag框架进行了扩展,设计并实现了新的根因分析功能——建索引报错的根因分析。该功能能够在建索引失败时,像专家一样分析建索引失败的原因,给出分析报告。

三、建索引报错的根因分析

建索引报错的日志分析的基本思路是根据建索引的基本步骤,判断建索引失败在哪一步,然后决策收集哪些机器的日志。排查思路如下图所示。

1730081807

排查共8个步骤。

第1步:租户名、数据库名、表名、创建索引失败的索引名字,作为输入参数。

第2步:根据入参,获取对应的tenant_id、database_id、table_id。

# 获取租户idselect tenant_id from __all_tenant where tenant_name = '租户名';# 获取数据库idselect database_id from  __all_database  where database_name='数据库名';# 获取表idselect table_id  from __all_virtual_table where table_name = '表名' and tenant_id = '租户id' and database_id='数据库id';  

第3步:根据索引名,获取索引表id。

# 获取索引表idselect table_id from __all_virtual_table_history where tenant_id = '租户id' and data_table_id = '数据库id' and table_name like '%索引名%';  

第4步:根据索引表ID,查询__all_virtual_ddl_error_message表格中是否有记录。

# 获取task_id、trace_idselect task_id ,trace_id from __all_virtual_ddl_error_message where tenant_id = '租户id' and object_id = '索引表id';  

如果无记录,那说明失败在发送RPC,打印出信息,提示此时需要人工接入排查,否则进入步骤5

第5步:根据task_id,查询__all_rootservice_event_history表。

# 查询__all_rootservice_event_history表select event, value6,rs_svr_ip, rs_svr_port from __all_rootservice_event_history where value4 = 'task_id' and value2 != 0 and event != 'switch_state' and event not like 'index build task process fail' order by gmt_create desc limit 1;  

如果event字段的值为是ddl wait trans end ctx try_wait,那么进入第6步,如果是 index sstable build task finish,那么进入第7步,如果是其他的步骤,那么进入第8步。

第6步:event的名字为ddl wait trans end ctx try_wait,那么根据trace_id,去捞主表所有的tablet所在leader节点的日志。

第7步:event的名字为 index sstable build task finish,根据trace_id去捞取observer的日志。

第8步:event既不是ddl wait trans end ctx try_wait,也不是index sstable build task finish,此时需要根据trace_id去捞取rootservice.log.。

目前obdiag支持了增加索引时报错诊断场景,该支持适用于OceanBase 4.2.3 版本及OceanBase 4.3版本以上。

obdiag rca run --scene=index_ddl_error --input_parameters='{"tenant_name":"cudb_test","table_name":"test1245","database_name":"test","index_name":"idx_name"}' -c obce423config.yml  

input_patameters是一个用于输入不同根因分析场景下需要引入的变量赋值,输入对象的应该为一个json格式的字符串用于解析。

tenant_name:租户名table_name:表名database_name:库名index_name:索引名  

示例:如下为一次调用的结果record的展示。

1730081933

总结

联通软研院与OceanBase的合作不仅是技术上的交流,更是对未来发展趋势的一种探索。通过共建obdiag的新功能,双方旨在达成四个目标。

·       提升运维效率:通过自动化的故障诊断,减少人工介入的时间成本,提升整体运维效率。

·       增强系统稳定性:及时发现并解决问题,提高数据库系统的稳定性和可靠性。

·       促进技术创新:借助双方的技术积累,共同探索数据库领域的前沿技术,推动技术创新。

·       增强用户体验:为用户提供更可靠、更高效的数据库服务,提高用户满意度。

在此过程中,特别感谢OceanBase谢振江(花名:仓氐)提供的排查思路及流程,以及中国联通软件研究院靖永栋提供根因分析场景编码实现。

附录

OceanBase GitHub仓库: GitHub - oceanbase/oceanbase: OceanBase is an enterprise distributed relational database with high availability, high performance, horizontal scalability, and compatibility with SQL standards.

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

•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 技术交流

相关文章:

与中国联通技术共建:通过obdiag分析OceanBase DDL中的报错场景

中国联通软件研究院(简称联通软研院)在全面评估与广泛调研后,在 2021年底决定采用OceanBase 作为基础,自研分布式数据库产品CUDB(即China Unicom Database,中国联通数据库)。目前,该…...

大数据与网络安全讲座

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 大数据的价值为大家公认。业界通常以4个“V”来概括大数据的基本特征——Volume(数据体量巨大)、Variety(数据类型繁多)、Value(价值密度低)、Velocity(处理速度快…...

AtCoder Beginner Contest 395 E

点我写题 题意:给个有向图,从1出发,每次可以走一条有向边,花费为1,也可以选择把全部有向边翻转,花费x,问到n的最小花费 思路:最短路dp,定义dis[i][0/1]表示走到i为止&…...

Linux进程管理6 - CFS调度

0、CFS调度器 CFS调度器使用完全公平调度算法。 完全公平调度算法引入虚拟运行时间的概念:虚拟运行时间 = 实际运行时间 * nice_0_weight / 进程的权重。完全公平调度算法使用红黑树把进程按虚拟运行时间从小到大排序,每次调度选择虚拟运行时间最小的进程。时间片 操作系统进…...

张驰咨询:用六西格玛重构动力电池行业的BOM成本逻辑

在动力电池行业,BOM(物料清单)成本每降低1%,都可能改写企业的利润曲线。某头部企业的三元锂电池BOM成本曾较行业标杆高出11%,单电芯利润率被压缩至3%的生死线。然而,通过张驰咨询的六西格玛方法论&#xff…...

pyside6学习专栏(九):在PySide6中使用PySide6.QtCharts绘制6种不同的图表的示例代码

PySide6的QtCharts类支持绘制各种型状的图表,如面积区域图、饼状图、折线图、直方图、线条曲线图、离散点图等,下面的代码是采用示例数据绘制这6种图表的示例代码,并可实现动画显示效果,实际使用时参照代码中示例数据的格式将实际数据替换即可…...

SpringBoot获取YAML配置文件中的属性值(二):使用Environment环境组件读取值

Spring Boot 使用 Properties 和 YAML 配置文件文件,系列文章: 《Spring使用@Value注解与@PropertySource注解加载配置文件》 《SpringBoot获取YAML配置文件中的属性值(一):使用@Value注解、@ConfigurationProperties注解》 《SpringBoot获取YAML配置文件中的属性值(二)…...

14天 -- Redis 的持久化机制有哪些?Redis 主从复制的实现原理是什么? Redis 数据过期后的删除策略是什么?

Redis 的持久化机制有哪些? Redis 是一种高性能的键值存储系统,主要用于缓存、消息队列等场景。为了防止数据丢失,Redis 提供了多种持久化机制,主要包括以下两种: 1. RDB(Redis Database Backup&#xff…...

《深度学习实战》第10集:联邦学习与隐私保护

第10集:联邦学习与隐私保护 2025年3月4日更新了代码,补充了实例程序运行截图 和 如何提高模型准确率的方法 系统梳理 集集精彩 代码验证 保证实战 随着数据隐私问题日益受到关注,联邦学习(Federated Learning) 作为一…...

如何解决跨域请求的问题(CORS)?

文章目录 1. 引言2. 理解 CORS2.1 CORS 基本概念2.2 同源策略与跨域分类 3. CORS 的核心机制3.1 预检请求(Preflight Request)3.2 简单请求 4. 服务器端配置 CORS4.1 关键响应头4.2 Node.js (Express) 示例4.3 其他后端语言配置 5. 前端处理 CORS 请求5.…...

【数据结构】二叉树总结篇

遍历 递归 递归三部曲: 1.参数和返回值 2.终止条件 3.单层逻辑(遍历顺序) var preorderTraversal function(root) { // 第一种let res[];const dfsfunction(root){if(rootnull)return ;//先序遍历所以从父节点开始res.push(root.val);//递归…...

软考-数据库开发工程师-3.1-数据结构-线性结构

第3章内容比较多,内容考试分数占比较大,6分左右 线性表 1、线性表的定义 一个线性表是n个元素的有限序列(n≥0),通常表示为(a1,a2, a3,…an). 2、线性表的顺序存储(顺序表) 是指用一组地址连续的存储单元依次存储线性表中的数据元…...

【五.LangChain技术与应用】【2.LangChain虚拟环境搭建(下):环境优化与调试】

一、Docker化部署:别让你的环境成为薛定谔的猫 经历过"在我机器上能跑"惨案的老铁都懂,传统虚拟环境就像个黑盒子。去年我帮客户部署LangChain应用,因为glibc版本差了0.1,整个服务直接崩成烟花。从那天起,我所有项目都强制上Docker! Dockerfile生存指南: #…...

deepseek+mermaid【自动生成流程图】

成果: 第一步打开deepseek官网(或百度版(更快一点)): 百度AI搜索 - 办公学习一站解决 第二步,生成对应的Mermaid流程图: 丢给deepseek代码,或题目要求 生成mermaid代码 第三步将代码复制到me…...

Java实现大数据量导出报表

一、实现方式 在Java中,导出数据到Excel有多种方式,每种方式都有其优缺点,适用于不同的场景。以下是常见的几种方式及其特点: 1.1 Apache POI Apache POI 是 Java 中最流行的库,支持读写 Excel 文件(包括…...

在 Element Plus 的 <el-select> 组件中,如果需要将 <el-option> 的默认值设置为 null。 用于枚举传值

文章目录 引言轻松实现 `<el-option>` 的默认值为 `null`I 实现方式监听清空事件 【推荐】使用 v-model 绑定 null添加一个值为 null 的选项处理 null 值的显示引言 背景:接口签名规则要求空串参与,空对象不参与签名计算 // 空字符串“” 参与签名组串,null不参与签…...

Spring Boot 接口 JSON 序列化优化:忽略 Null 值的九种解决方案详解

一、针对特定接口null的处理&#xff1a; 方法一&#xff1a;使用 JsonInclude 注解 1.1 类级别&#xff1a;在接口返回的 ‌DTO 类或字段‌ 上添加 JsonInclude 注解&#xff0c;强制忽略 null 值&#xff1a; 类级别&#xff1a;所有字段为 null 时不返回 JsonInclude(Js…...

解码未来!安徽艾德未来智能科技有限公司荣获“GAS消费电子科创奖-产品创新奖”!

在2025年“GAS消费电子科创奖”评选中&#xff0c;安徽艾德未来智能科技有限公司提交的“讯飞AI会议耳机iFLYBUDS Pro 2”&#xff0c;在技术创新性、设计创新性、工艺创新性、智能化创新性及原创性五大维度均获得评委的高度认可&#xff0c;荣获“产品创新奖”。 这一殊荣不仅…...

Velox 之 Expression

Round 函数 velox/functions/prestosql/Arithmetic.h template <typename T> struct RoundFunction {template <typename TInput>FOLLY_ALWAYS_INLINE voidcall(TInput& result, const TInput& a, const int32_t b = 0) {result = round(a, b);} };/// R…...

【零基础到精通Java合集】第二十四集:ZGC收集器详解

课程标题:ZGC收集器——突破停顿时间极限的下一代垃圾回收器(15分钟) 目标:掌握ZGC的核心技术原理、适用场景与调优策略,理解其如何实现亚毫秒级停顿 0-1分钟:课程引入与ZGC设计目标 以“高速公路无障碍通行”类比ZGC核心思想:通过染色指针与读屏障技术,实现垃圾回收…...

力扣hot100刷题——栈

文章目录 69.有效的括号题目描述思路&#xff1a;栈code 70.最小栈题目描述思路&#xff1a;双栈法code优化&#xff1a;单栈法code 71.字符串解码题目描述思路&#xff1a;栈code 73.每日温度题目描述思路&#xff1a;单调栈code 74.柱状图中最大的矩形题目描述思路&#xff1…...

TMS320F28P550SJ9学习笔记2:Sysconfig 配置与点亮LED

今日学习使用Sysconfig 对引脚进行配置&#xff0c;并点亮开发板上的LED4 与LED5 我的单片机开发板平台是 LAUNCHXL_F28P55x 我是在上文描述的驱动库C2000ware官方例程example的工程基础之上进行添加功能的 该例程路径如下&#xff1a;D:\C2000Ware_5_04_00_00\driverlib\f28p…...

STM32MP1xx的启动流程

https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview 根据提供的知识库内容&#xff0c;以下是STM32 MPU启动链的详细解析&#xff1a; 1. 通用启动流程 STM32 MPU启动分为多阶段&#xff0c;逐步初始化外设和内存&#xff0c;并建立信任链&#xff1a; 1.1 ROM代码&…...

开源之夏经验分享|Koupleless 社区黄兴抗:在开源中培养工程思维

开源之夏经验分享&#xff5c;Koupleless 社区黄兴抗&#xff1a;在开源中培养工程思维 文|黄兴抗 电子信息工程专业 Koupleless 社区贡献者 就读于南昌师范学院&#xff0c;电子信息工程专业的大三学生。 本文 2634 字&#xff0c;预计阅读 7​ 分钟​ 今天 SOFAStack 邀…...

健康养生:开启活力人生的钥匙

在快节奏的现代生活中&#xff0c;健康养生已成为我们追求美好生活的关键。它不仅关乎身体的强健&#xff0c;更与心灵的宁静息息相关。 合理饮食是健康养生的基石。多吃蔬菜、水果&#xff0c;它们富含维生素与矿物质&#xff0c;为身体提供充足养分。全谷物食品也是不错的选…...

HTTP 与 HTTPS 协议:从基础到安全强化

引言 互联网的消息是如何传递的&#xff1f; 是在路由器上不断进行跳转 IP的目的是在寻址 HTTP 协议&#xff1a;互联网的基石 定义 HTTP&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;&#xff0c;即超文本传输协…...

项目工坊|Python驱动淘宝信息爬虫

目录 前言 1 完整代码 2 代码解读 2.1 导入模块 2.2 定义 TaoBao 类 2.3 search_infor_price_from_web 方法 2.3.1 获取下载路径 2.3.2 设置浏览器选项 2.3.3 反爬虫处理 2.3.4 启动浏览器 2.3.5 修改浏览器属性 2.3.6 设置下载行为 2.3.7 打开淘宝登录页面 2.3.…...

SQLite Alter 命令详解

SQLite Alter 命令详解 SQLite 是一种轻量级的数据库&#xff0c;广泛用于各种嵌入式系统、移动应用和小型项目。SQLite 的ALTER TABLE命令用于修改已存在的表结构&#xff0c;包括添加、删除或修改列&#xff0c;以及重命名表等操作。本文将详细解析SQLite的ALTER TABLE命令&…...

【Linux】冯诺依曼体系结构-操作系统

一.冯诺依曼体系结构 我们所使用的计算机&#xff0c;如笔记本等都是按照冯诺依曼来设计的&#xff1a; 截止目前&#xff0c;我们所知道的计算机都是由一个一个的硬件组装起来的&#xff0c;这些硬件又由于功能的不同被分为了输入设备&#xff0c;输出设备&#xff0c;存储器…...

mapbox进阶,使用点类型geojson加载symbol符号图层,用于标注带图标的注记,且文字居中在图标内,图标大小自适应文字

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;前言1.1 ☘️mapboxgl.Map 地图对象…...