請點選上方“民生運維人” 添加訂閱!
01
背景
近幾年,随着業務的增長、數字化轉型加速、網際網路金融業務快速發展和疊代,我行各系統資料庫的資料量和并發量也在急劇增長。通過分析過去幾年我行資料庫的生産事件報告,發現SQL性能和對象可用性相關問題占到了相當的比例,在這樣的背景下,我行決定引入SQL自動稽核機制。
SQL稽核的目标,是将SQL品質管理和優化的節點前移,由“部署生産->發現問題->SQL優化”變為“SQL評審->發現問題->SQL優化->部署生産”,通過在應用版本變更流程中增加SQL稽核環節,引導開發人員形成SQL稽核的意識,關注SQL性能和SQL書寫規範,提前發現可能存在的隐患,進行修複,進而提升系統的健壯性和穩定性。通過稽核工具的使用,有效地避免了以往人工方式低效、覆寫率低、依賴評審人技能水準等問題。
02
SQL稽核的次元
SQL稽核,就好比我們在野外捕魚,首先要知道在哪裡捕魚産出比較高,可能捕到什麼類型的魚。通過梳理SQL稽核的次元,有助于我們總結業務場景,防止遺漏。稽核次元可按SQL來源、稽核效果、稽核對象三個方面進行分類。
按SQL來源分類:
按稽核效果分類:
按稽核對象分類:
03
SQL稽核規則
明确了捕魚的地點,還得有适合工具,不然一網下去,魚都漏出去了,也是不行的。SQL稽核規則的有效性和覆寫面,直接決定了SQL稽核的效果。以下将從規則的來源、級别、分類、模闆幾方面進行說明。
規則來源:稽核規則的設計,主要來源于業内通用規範、我行資料庫SQL開發規範、以往發生的事件報告總結以及資料庫專家多年的運維經驗,通過對這些規範和案例進行總結,設計觸發條件和優化方案。
規則級别:根據對資料庫性能和對象可用性的影響程度,可将規則分為“提示”、“警告”、“嚴重”三種級别。“提示”類一般為建議型,“警告”和“嚴重”級别是需要重點關注的,尤其“嚴重”類型,如無特殊情況,都是不可以通過稽核的。
規則分類:我行稽核規則支援DB2、Oracle、MySQL三種資料庫類型,按照稽核關注點的不同,可分為性能問題、開發規範、資料丢失風險、對象失效或錯誤語句幾方面。
DB2主要規則如下圖所示:
針對每個稽核規則,都需要有相應的說明資訊,以DB2其中一個規則舉例說明:
規則模闆:按照對接系統的不同,可将多個規則組合成不同的規則模闆,在模闆中對規則進行設定,以适應不同的業務需求,比如對接DevOps開發流程,需要稽核所有規則,而對接運維視點則隻需要稽核書寫規範和性能類規則即可。
04
SQL稽核流程
有了捕魚的地點和工具,下一步就是确定捕魚的流程了,這期間需要各個崗位緊密配合共同努力才行。
首先确定SQL稽核介入點,通過對我行應用版本釋出流程的梳理,通常的開發流程為開發環境->UAT環境->版本環境,而每次生産版本更新前,都會在版本環境中進行部署驗證,是以選擇在釋出版本環境前介入SQL稽核。
然後确定稽核人,按應用系統級别不同,A類系統由DBA負責稽核,B類系統由應用運維負責稽核、DBA輔助支援,以便達到人員配置和稽核效果的平衡。
最後示範SQL稽核的機制,示意圖如下所示:
1) 開發人員申請釋出版本環境,DevOps收集變更SQL和應用程式裡的差異SQL,連同資料庫資訊一起發送給SQL稽核服務API。
2) SQL稽核服務API接受到請求後,連接配接CMDB,複核所獲得的資料庫資訊是否正确,同時獲得所屬應用系統相關資訊,在背景自動建立稽核工單,此時可以在SQL稽核前端頁面檢視到此稽核單,狀态為“待稽核”。
3) SQL稽核服務API将稽核單号、資料庫資訊和SQL一并發送給SQL稽核引擎。
4) SQL稽核引擎接受到請求後,連接配接被稽核資料庫,按預定規則進行比對,稽核後的資料異步回傳給SQL稽核服務API。
5) SQL稽核服務API更新稽核單狀态為“已完成”,此時可從SQL稽核前端頁面檢視該次稽核詳情,同時會将稽核結果及稽核報告回報給DevOps。DevOps根據稽核結果進行後續操作的流程控制。
通過以上幾個部分的說明,SQL稽核的要點就介紹完了,接下來描述稽核工具所具備的功能。
05
稽核工具功能
作為資料庫統一管理平台的子產品之一,SQL稽核工具與資料庫統一管理平台其他子產品緊密結合,可實作如下功能:
SQL 語句稽核:建立或編輯SQL語句稽核,手工錄入或導入SQL,對SQL進行文法分析、執行計劃稽核,自動擷取稽核結果,評審人可對SQL稽核結果進行批注。
手工添加SQL稽核頁面如下圖所示:
稽核結果展示:展示資料庫連接配接資訊、SQL明細、SQL執行計劃、SQL所含對象詳情、觸發規則、觸發次數等。
稽核結果部分資訊如下圖所示:
稽核報告:可導出HTML形式的稽核報告,内容保護包含結果展示的大部分資訊。
增量SQL稽核:結合資料庫管理平台,擷取重要系統每日增量TOP SQL,進行彙總合并後,對SQL進行稽核,獲得稽核報告,并郵件給相關負責人,以便其了解資料庫近期SQL運作情況。
資料統計:對稽核資料按不同次元進行統計,比如獲得前10個觸發次數最多的規則、前10個問題最多的資料庫、每日稽核次數等,這些資料的統計,有助于了解稽核品質,進而推動運維人員去優化問題較多的系統。
6. 結束語
以上是對SQL稽核工具的介紹,目前稽核工具正在我行逐漸推廣,A類系統已初見成效。部分工作還在持續完善階段。相信随着系統和流程的優化,自動化程度的提高,加上開發和運維同僚的支援,SQL稽核工具能夠發揮預期的效果,為資料庫的穩定運作添磚加瓦。
李甯甯
Oracle OCM及MySQL OCP,有多年資料庫運維經驗,現任職于民生銀行資訊科技部系統管理中心,主要負責SQL稽核推廣及MySQL運維相關工作。
史國暢
十多年資料庫行業經驗,先後就職于百度、甲骨文等公司。現任職于民生銀行資訊科技部系統管理中心,主要負責Oracle、巨杉等産品運維相關工作。
李騰
民生銀行資訊科技部DBA,主要負責KAFKA相關運維工作。
編輯:民生運維文化建設小組