基於程式覆蓋資訊的資料庫核心問題定位工具
隨著資料庫核心程式碼規模和複雜度不斷增長,軟體測試與故障定位也越來越耗時。為了修復引發資料庫故障的程式缺陷,開發人員往往需要花費大量的時間和精力去定位並解決問題。因此提高故障定位的精度和效率是資料庫核心開發與測試中至關重要的一個環節。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於oracle資料庫訊號量的問題Oracle資料庫
- 教你兩種資料庫覆蓋式資料匯入方法資料庫
- 如何解決倉庫無線覆蓋的問題?
- 線段覆蓋問題
- 棋盤覆蓋問題
- 資料庫系列:覆蓋索引和規避回表資料庫索引
- 圖資料庫 Nebula Graph 的程式碼變更測試覆蓋率實踐資料庫
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- 利用ENV/深度學習工具提取防塵網覆蓋資訊深度學習
- rest_framework django 簡單使用(資料庫建立資料, 覆蓋資料, 其他的大同小異)RESTFrameworkDjango資料庫
- 圖資料庫選型:問題、方法與工具資料庫
- 【離散優化】覆蓋問題優化
- 騰訊基於全時態資料庫技術的資料閃回資料庫
- firefox覆蓋原來網頁的問題Firefox網頁
- 基於隨機定位的地圖資訊獲取方式隨機地圖
- 基於Jacoco的單元測試程式碼覆蓋率統計
- 關於 SAP HANA 資料庫的死鎖問題(deadlock)資料庫
- 簡單介紹mysql中資料庫覆蓋匯入的幾種方式MySql資料庫
- JVM問題定位工具JVM
- 事務註解(@Transactional)引起的資料覆蓋故障
- 樹上最小點覆蓋的一類問題
- 基於知識圖譜與異常檢測的PG資料庫故障定位資料庫
- 基於gin的golang web開發:訪問mysql資料庫GolangWebMySql資料庫
- 基於PMEM的PG資料庫Memhive資料庫Hive
- 融雲IM資訊託管服務,使用者資料、好友關係、群組資訊全覆蓋
- 資料庫常見問題資料庫
- openGauss資料庫分析問題資料庫
- 解決hive資料庫 插入資料很慢的問題Hive資料庫
- 做資料庫分離讀寫時,sqlServer資料庫資料同步的問題:資料庫SQLServer
- 遷移資料庫資料考慮問題資料庫
- 公園無線覆蓋維護問題
- resultMap 和 resultType 的欄位對映覆蓋問題
- python中多程式處理資料庫連線的問題Python資料庫
- 資料庫系列:巨量資料表的分頁效能問題資料庫
- iOS 覆蓋率檢測原理與增量程式碼測試覆蓋率工具實現iOS
- 基於JaCoCo的Android測試覆蓋率統計(二)Android
- 大資料資訊保安問題有哪些大資料
- 基於vue解決大資料表格卡頓問題Vue大資料