与中国联通技术共建:通过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 技术交流

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

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

相关文章

机器学习-随机森林解析

目录 一、.随机森林的思想 二、随机森林构建步骤 1.自助采样 2.特征随机选择 3构建决策树 4.集成预测 三. 随机森林的关键优势 ​**(1) 减少过拟合** ​**(2) 高效并行化** ​**(3) 特征重要性评估** ​**(4) 耐抗噪声** 四. 随机森林的优缺点 ​优点 ​缺点 五.…

深度集成DeepSeek,智问BI@GPT引领商业智能“深度思考“革命

当下传统的数据分析工具如同显微镜,虽然能帮助我们看到数据的细节,却难以揭示数据背后的深层规律。亿信华辰最新升级的智问BIGPT产品,通过深度集成DeepSeek大模型,首次在商业智能领域实现了"深度思考"功能。这项突破性创…

Mysql安装方式

方式一:安装包安装 下载安装包 官网直接下载:https://dev.mysql.com/downloads/ 安装配置 2.1、双击刚刚下载好的msi文件,开始安装MySQL。 2.2、选择自定义模式Custom安装 2.3、点击选择自己电脑对应的mysql安装目录 2.5、继续点击下一步&…

unity调用本地部署deepseek全流程

unity调用本地部署deepseek全流程 deepseek本地部署 安装Ollama 搜索并打开Ollama官网[Ollama](https://ollama.com/download) 点击Download下载对应版本 下载后点击直接安装 安装deepseek大语言模型 官网选择Models 选择deepseek-r1,选择对应的模型&#xff0…

Linux - 网络基础(应用层,传输层)

一、应用层 1)发送接收流程 1. 发送文件 write 函数发送数据到 TCP 套接字时,内容不一定会立即通过网络发送出去。这是因为网络通信涉及多个层次的缓冲和处理,TCP 是一个面向连接的协议,它需要进行一定的排队、确认和重传等处理…

wxWidgets GUI 跨平台 入门学习笔记

准备 参考 https://wiki.wxwidgets.org/Microsoft_Visual_C_NuGethttps://wiki.wxwidgets.org/Tools#Rapid_Application_Development_.2F_GUI_Buildershttps://docs.wxwidgets.org/3.2/https://docs.wxwidgets.org/latest/overview_helloworld.htmlhttps://wizardforcel.gitb…

使用joblib 多线程/多进程

文章目录 1. Joblib 并行计算的两种模式多进程(Multiprocessing,适用于 CPU 密集型任务)多线程(Multithreading,适用于 I/O 密集型任务)2. Joblib 的基本用法3. Joblib 多进程示例(适用于 CPU 密集型任务)示例:计算平方4. Joblib 多线程示例(适用于 I/O 密集型任务)…

神旗视讯Linux client 3.4版本发布和开源

在国产化替代的大潮中,神旗视讯推出专为统信 Linux、麒麟 Linux OS 打造打造的开源视频会议客户端,全面适配国产 x86 及 arm64 架构 CPU,以稳定、安全、灵活的特性,为国产操作系统用户带来前所未有的高效沟通体验,同时…

HCIA-IP路由动态-RIP

一、概念 动态路由是指路由器通过运行动态路由协议(RIP、OSPF等),自动学习和发现网络中的路由信息。路由器之间通过交换路由协议数据包,互相通告自己所知道的网络信息,从而构建和更新路由表。 二、RIP(路由信息协议)…

VEC系列-RabbitMQ 入门笔记

消息队列(MQ)对于开发者来说是一个经常听到的词汇,但在实际开发中,大多数人并不会真正用到它。网上已经有很多关于 MQ 概述和原理的详细讲解,官网文档和技术博客也都介绍得很深入,因此,我在这里…

js中??是什么意思

在 JavaScript 中,?? 是一个逻辑运算符,称为 空值合并运算符(Nullish Coalescing Operator)。它用于检查左侧的值是否为 null 或 undefined,如果是,则返回右侧的值;否则返回左侧的值。 语法 …

常见限流算法

限流是指在高并发、大流量请求的情况下,限制新的流量对系统的访问,以保证系统服务的安全性。常见的限流算法及其详细介绍如下: 计数器算法(Fixed Window Counter) 原理:使用一个固定时间窗口内的计数器来…

YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及

YOLOv12 是“你只看一次”(You Only Look Once, YOLO)系列的最新版本,于 2025 年 2 月发布。它引入了注意力机制,提升了检测精度,同时保持了高效的实时性能。在保持速度的同时,显著提升了检测精度。例如&am…

【原创】C# HttpClient 读取流数据的问题

默认情况下HttpClient中有缓存,在读取流数据的时候,往往要等一小会儿,然后读出一大堆。 我们在请求OpenAI类的大模型的时候,往往要一边读取一边显示(输出),这时候需要禁止HttpClient 中内置的缓…

能源行业标杆:信创系统在智能电网中的3个创新应用案例

在当今数字化浪潮汹涌澎湃的时代,信息技术应用创新(信创)已成为推动我国经济社会发展的重要引擎。智能电网作为能源行业的核心领域,其信息化建设对于保障国家能源安全和促进能源转型具有重要意义。今天,让我们一同探索…

AcWing 蓝桥杯集训·每日一题2025·5526. 平衡细菌

5526. 平衡细菌 题意 给定一个序列 ( a i ) (a_i) (ai​),每次操作可以选择一个位置 (p),令从 ( a p ) (a_p) (ap​) 开始的每个数都加上一个以 (1) 或者 (-1) 为公差的从 ( 1 / − 1 ) (1 / -1) (1/−1) 开始的等差数列。求最小化让序列归零的操作…

PTA 7-6 列出连通集

题目详情: 给定一个有 n 个顶点和 m 条边的无向图,请用深度优先遍历(DFS)和广度优先遍历(BFS)分别列出其所有的连通集。假设顶点从 0 到 n−1 编号。进行搜索时,假设我们总是从编号最小的顶点出…

ES中数据刷新策略refresh

在 Elasticsearch 中,插入数据时的 refresh 参数控制文档在写入后何时对搜索可见,其行为直接影响数据可见性和系统性能。以下是 refresh 参数的三个可选值(true、false、wait_for)的详细说明及适用场景: 1. refreshtr…

用Python的Pandas库解锁数据科学:从入门到实战

用Python的Pandas库解锁数据科学:从入门到实战 引言 Python的Pandas库(名称源自"Panel Data")作为数据科学生态系统的基石,凭借其强大的数据结构和灵活的操作功能,已成为全球超过90%数据工作者的首选工具。…

如何提高域名解析速度?

在搭建网站或使用在线服务时,许多人会问:“为什么我的网站加载速度这么慢?”“如何提高域名解析速度?”“域名解析速度对网站性能有什么影响?”域名解析速度直接影响用户访问网站的体验,因此,了解如何提高域名解析速度尤为重要…