怎么查看一个网站是用什么程序做的,wordpress 搜索 提示,制作简单的站点推广方案,企业logo设计app中国联通软件研究院#xff08;简称联通软研院#xff09;在全面评估与广泛调研后#xff0c;在 2021年底决定采用OceanBase 作为基础#xff0c;自研分布式数据库产品CUDB#xff08;即China Unicom Database#xff0c;中国联通数据库#xff09;。目前#xff0c;该…中国联通软件研究院简称联通软研院在全面评估与广泛调研后在 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 的开源共建和规模化应用。 对于分布式 CUDB 的演进历程简言之联通软研院在引进OceanBase的第一年着重于产品化建设。实现产品的一键开通、弹性扩缩、高效迁移并且开始试点推广应用。2023年开始对接监控运维体系并且开始大规模推广使用。重点聚焦数据库产品生态工具方面的补齐和人员能力的提升为替代 MySQL 和新上应用提供全栈国产的数据库资源及服务能力。
虽然联通软研院做了很多产品能力建设如高效的数据迁移、异地容灾高可用、完善的数据库自治服务、智能预测与诊断自愈形成了相对完善的产品体系。但仍面临诸多挑战比如现有功能不完全满足联通的个性化需求再比如运维人员对数据库内核和源码的掌控不足导致处理集群问题时非常棘手。
因此在2024年联通软研院推动智能化运维着手智能运维建设。其中为进一步提高自动化运维诊断效率联通软研院与OceanBase携手合作在OceanBase敏捷诊断工具obdiag的基础上进行深度共建并深入内核研究共同研发了一项全新的功能——建索引报错的根因分析功能。
二、敏捷诊断工具obdiag共建背景
OceanBase是原生分布式数据库系统故障根因分析通常是比较繁琐的涉及的因素可能有很多如机器环境、配置参数、运行负载等。专家在排查问题的时候需要获取大量的信息来分析故障。
那么如何高效地获取故障场景下分散在各个节点的信息挖掘其中的关联性帮助用户自助诊断问题呢
在引入obdiag前每当遇到OceanBase数据库系统的复杂故障时用户往往求助于原厂的专业团队。这不仅是因为故障排查涉及大量分布在不同节点上的信息而且收集和整理这些信息缺乏统一的工具再加上与专家反复沟通确认细节的过程使整个故障解决周期变得漫长且充满变数。 拥有obdiag这一敏捷诊断工具后通过obdiag的一键集群巡检、一键诊断分析、一键信息收集及一键根因分析功能大大简化了故障排查的交互过程。即便是经验相对不足的技术人员也能够快速地识别出潜在问题并根据诊断结果采取相应的措施提升了故障排查工作的效率。
然而obdiag现有的功能并不能满足联通软研院的故障排查需求。众所周知在数据库运维中DDLData Definition Language操作是常见且重要的组成部分其中包括创建、删除或修改数据库对象比如表、索引等。但在实际生产环境中DDL操作可能会因为各种原因失败比如资源不足、并发冲突等这会给业务带来不必要的中断和损失。为了解决这个问题联通软研院基于obdiag框架进行了扩展设计并实现了新的根因分析功能——建索引报错的根因分析。该功能能够在建索引失败时像专家一样分析建索引失败的原因给出分析报告。
三、建索引报错的根因分析
建索引报错的日志分析的基本思路是根据建索引的基本步骤判断建索引失败在哪一步然后决策收集哪些机器的日志。排查思路如下图所示。 排查共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 --sceneindex_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的展示。 总结
联通软研院与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 技术交流