與中國聯通技術共建:通過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.pswp.cn/news/897138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897138.shtml
英文地址,請注明出處:http://en.pswp.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%數據工作者的首選工具。…

如何提高域名解析速度?

在搭建網站或使用在線服務時,許多人會問:“為什么我的網站加載速度這么慢?”“如何提高域名解析速度?”“域名解析速度對網站性能有什么影響?”域名解析速度直接影響用戶訪問網站的體驗,因此,了解如何提高域名解析速度尤為重要…