基於程式覆蓋資訊的資料庫核心問題定位工具

yaobase發表於2023-12-15

隨著資料庫核心程式碼規模和複雜度不斷增長,軟體測試與故障定位也越來越耗時。為了修復引發資料庫故障的程式缺陷,開發人員往往需要花費大量的時間和精力去定位並解決問題。因此提高故障定位的精度和效率是資料庫核心開發與測試中至關重要的一個環節。

YaoBase為了提高的測試中的故障定位效率,自研了基於程式覆蓋資訊的故障定位技術的覆蓋測試工具,主要包含程式覆蓋資訊收集和基於程式覆蓋資訊的故障定位兩個步驟。

1.  程式覆蓋資訊收集

圖1  程式覆蓋資訊收集工具

2. 基於程式覆蓋資訊的故障定位

圖2  基於程式覆蓋資訊的故障定位框架

該框架透過對比分析不同版本的 YaoBase程式碼(正常版本程式碼和故障發生版本程式碼)對同一個測試用例集的覆蓋情況,從而定位程式中的可疑位置,透過開發人員對可疑位置進行確認,從而確定故障所在位置。

故障定位依賴於多個模組的執行,首先需要使用採用圖 1工具收集待測測試用例的程式覆蓋資訊,注意需要針對包含BUG的YaoBase版本程式碼和正常的YaoBase版本程式碼(不包含BUG)執行待測用例集,收集覆蓋資訊;其次,使用YaoBase的覆蓋率統計工具統計測試完成後,測試用例集對不同版本程式碼的覆蓋資訊;然後,透過對比兩個不同版本程式碼生成的覆蓋資訊的差異,找到覆蓋資訊不同的部分,併為每一個不同的部分(程式片段)新增一個可疑度度量的標準,並對可疑度進行排序;最後,開發人員透過可疑度排序的結果,從可疑度最大的部分依次確認是否是該部分程式引發的故障。

以下說明一個基於 sysbench測試覆蓋資訊的效能問題分析案例。

首先對兩個特定版本(版本 v1和版本v2)的程式碼在相同硬體環境下進行了點查詢場景下的效能測試,測試併發執行緒包括100,200,400,800,1000。測試結果顯示在不同執行緒下,v2比v1的TPS效能平均下降了300。收集圖2框架,收集了兩個版本程式碼的覆蓋資訊並按照可疑度排序的結果,選出可疑程式碼段。最終篩選出了分佈在12個檔案中的16個函式,認為這部分程式碼可能是引起YaoBase效能下降的主要原因。詳細分析後,發現16個函式可以分類以下兩類:

1.  Cache相關的函式的呼叫差異

v1版本程式碼中有部分Cache相關的函式被呼叫,但是在v2版本中Cache相關函式沒有被呼叫,由此分析v1版本TPS較高的原因可能是由於Cache命中引起的。於是調換了兩次程式碼版本執行效能測試的順序,以確認效能差異是否由Cache命中差異引起。但經過驗證,調整兩個版本的測試順序對效能差異影響不大,所以排除了效能差異是由Cache命中引起有差異引起的。

2.  SQLError相關的函式呼叫差異

v1版本的程式碼中有部分SQLError相關的函式被反覆呼叫,但是在v2版本程式碼中卻沒有呼叫,因此我們分析兩個版本程式碼的效能差異可能是sysbench測試中有部分請求失敗,導致SQL未執行,由此影響了效能。

由於當前版本的 sysbench不支援返回SQL執行過程中錯誤的次數,透過分析YaoBase日誌,最終確認由於測試中部分請求失敗,導致SQL未執行是引起兩個版本效能差異的主要原因。

YaoBase透過以上自研的覆蓋測試工具,作為確保測試覆蓋的有利措施,不僅確保測試全面,也為發生問題時的快速定位提供有效的資訊,提高了研發效率。

YAOBASE(堯)分散式資料庫是一款自主研製具有獨特的增量聚集系統架構的國產金融級NewSQL分散式關係型資料庫軟體,廣泛應用於國民經濟關鍵領域海量、高併發、複雜業務等應用場景。為使用者提供高效能、高安全及高可控的資料庫能力,為海量資料的安全性及自主可控性提供服務。

YAOBASE(堯)分散式資料庫相容 Oracle/DB2/MYSQL 等特性,具備卓越的水平擴充套件能力,特有的增量聚集架構能有效的控制分散式事務比例,大大程度上消弱這一關鍵約束,有效地保證整體效能。因此能更好的適應複雜業務場景,減少使用者在遷移過程中對應用程式的改動,有效控制遷移成本、提升遷移效率、降低遷移風險。


公司官網:


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70021154/viewspace-3000334/,如需轉載,請註明出處,否則將追究法律責任。

相關文章