基於程式覆蓋資訊的資料庫核心問題定位工具
隨著資料庫核心程式碼規模和複雜度不斷增長,軟體測試與故障定位也越來越耗時。為了修復引發資料庫故障的程式缺陷,開發人員往往需要花費大量的時間和精力去定位並解決問題。因此提高故障定位的精度和效率是資料庫核心開發與測試中至關重要的一個環節。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 線段覆蓋問題
- 如何解決倉庫無線覆蓋的問題?
- JS陣列push會覆蓋前面的資料問題JS陣列
- Jenkins日常運維筆記-重啟資料覆蓋問題、遷移、基於java程式碼發版(maven構建)Jenkins運維筆記JavaMaven
- 【離散優化】覆蓋問題優化
- 演算法題:頂點覆蓋問題演算法
- 教你兩種資料庫覆蓋式資料匯入方法資料庫
- EMMA 覆蓋率工具
- 資料庫系列:覆蓋索引和規避回表資料庫索引
- firefox覆蓋原來網頁的問題Firefox網頁
- 樹上最小點覆蓋的一類問題
- 圖資料庫 Nebula Graph 的程式碼變更測試覆蓋率實踐資料庫
- 演算法題系列:頂點覆蓋問題演算法
- 基於Jacoco的單元測試程式碼覆蓋率統計
- JVM問題定位工具JVM
- 基於mysql資料庫 關於sql優化的一些問題MySql資料庫優化
- JS基礎知識(覆蓋JS基礎面試題)JS面試題
- 利用ENV/深度學習工具提取防塵網覆蓋資訊深度學習
- resultMap 和 resultType 的欄位對映覆蓋問題
- sqoop export 資料覆蓋更新OOPExport
- 請問,關於資料庫連線的問題。資料庫
- iOS 覆蓋率檢測原理與增量程式碼測試覆蓋率工具實現iOS
- 程式碼覆蓋率工具 Istanbul 入門教程
- Google開源ScriptCover,JavaScript程式碼覆蓋率工具GoJavaScript
- 效能優化是資料庫應用的核心問題優化資料庫
- 都100%程式碼覆蓋了,還會有什麼問題?
- 分治演算法-求解棋盤覆蓋問題演算法
- 關於資料庫和jdbc的問題,指教資料庫JDBC
- 關於資料庫緩衝池的問題資料庫
- 程式碼覆蓋率與測試覆蓋率比較
- 企業WiFi覆蓋,解決覆蓋四大難題WiFi
- rest_framework django 簡單使用(資料庫建立資料, 覆蓋資料, 其他的大同小異)RESTFrameworkDjango資料庫
- 使用hibernate的query查詢時覆蓋值的問題
- logminer恢復誤覆蓋更新的資料
- 基於Internet Explorer核心的網頁資訊抓取程式網頁
- Mybatis基於註解的方式訪問資料庫MyBatis資料庫
- 自動化單元工具EvoSuie的程式碼覆蓋報告UI
- pHp程式碼覆蓋率PHP