D-SMART如何利用數據庫的可觀測性能力的
昨天我發了一篇數據庫可觀測性的文章,談了可觀測性與監控的差別。在運維領域,監控是一個強需求,無論如何,你的數據庫在跑一些有價值的業務應用,你就必須去監控數據庫。而可觀測性并不是時時需要的,如果巡檢做完以后,發現的問題也無法得到解決,那么巡檢就變成了一個樣子貨了。
可觀測性也是如此,平時的時候,一些小問題還不至于讓人興師動眾。不過當系統出現了一個比較大的問題,導致了一些嚴重后果的時候,IT部門才發現,我們需要對日常發現的一些小問題做閉環管理,要防患于未然。實際上防患于未然這句話好說,卻極難落地,因為這背后是巨大的成本。只有做到系統優化常態化的企業才能真正做到閉環管理和防患于未然,對于大多數運維經費有限的企業來說只能嘴上向領導表表態而無法真正去實施了。
D-SMART是一個基于數據庫可觀測性能力構建的深度運維工具,在研發之初,我們就希望充分利用數據庫的可觀測性能力,盡可能地將數據庫系統數字化。因此每種數據庫我們都采集了數百個指標與配置項。當我幾年前和一個客戶談到我們的系統采集了數百個數據庫的指標與配置項的時候,他直搖頭,我們不需要那么多指標,有幾個指標夠我們監控就行了。太多了,我們也看不過來。實際上,D-SMART采集那么多數據并不是讓你看的,運維監控人員確實只能聚焦在少量的幾個指標上。D-SMART的指標大多數是用于分析的,并不是用于監控,如果要監控,只需要看“健康模型”或者監控主界面上的那幾個關鍵指標就行了。
D-SMART利用數據庫運維專家多年來積累的經驗采集了數百個指標,這些指標來自于數據庫的系統狀態、METRIC、等待事件、日志、TOPSQL、跟蹤數據等。為了減少D-SMART采集對于數據庫的影響,這些采集都采用開銷最小的方法,從系統視圖中一次性獲取,然后在D-SMART上加工的方式。
數據采集中已經包含了大量的專家經驗,比如Oracle數據庫的表空間使用率,實際上采集這個數據需要對數據庫進行全庫掃描,如果系統比較大,IO性能較差,系統比較繁忙的情況下,這個采集對數據庫影響還是挺大的。我們以前也遇到過一個客戶的數據庫超融合一體機的一個故障,就是因為他們的一體機管理軟件的表空間使用率采集是分鐘級的,而一次采集需要30分鐘才能完成,大量采集任務積壓導致了一體機IO鏈路故障,導致了宕機。在D-SMART中,表空間使用率采集是4小時一次或者1天一次的,當上一次沒有完成之前,新的采集不會發起,從而避免在一些極端的情況下因為運維監控導致數據庫出問題。而在系統的指標體系中,使用了一些“風險”類和“可用天數”的指標來真正地反映出系統存在的風險,這些指標都是通過分析和計算后獲得的。
從另外一個例子上可以看到D-SMART在監控指標設計上的專家經驗特征。
很多監控軟件在采集共享池信息時,喜歡把一些X$視圖的數據采集回來做展示。實際上X$視圖都是Oracle數據庫的內存結構,采集時需要對這些數據加閂鎖。如果數據庫系統的共享池存在問題的時候,這種采集很可能成為駱駝身上添加的最后一根稻草。前陣子我們的一個商用版用戶反饋說他們的共享池性能有點問題,就是用我們的一個共享池分析工具去分析共享池碎片情況,沒想到觸發了一個BUG,報了ORA-600錯誤。確實是的,當共享池有問題的時候,如果去訪問那些X$視圖去查看共享池的情況,是很容易觸發一些BUG的,嚴重時候會出現實例宕機的情況。
為了既能夠發現共享池存在的問題,又避免平時不過多干擾共享池,我們使用了上面的一些指標來綜合評估共享池可能存在的風險。大家可以看出,這些指標都不需要去對共享池加閂鎖。這種設計后面體現的是一幫老司機的經驗。
有了強大的指標體系,才能更加充分地利用數據庫的可觀測性能力?;谌绱素S富的指標數據,我們就可以實現各種深度的運維能力了。
比如我們給系統監控者提供的工具包括“健康模型”、“等待事件實時分析工具”,“等待事件歷史分析工具”,“問題分析工具”(用于分析一段時間內系統可能存在的各種問題)、“運維經驗告警”,“TOP SQL分析工具”、“SQL審計工具”,“關鍵SQL跟蹤分析工具”,“容量分析工具”,“集群拓撲查看工具”、“日檢、月檢、特檢、審計工具”等一系列的運維工具。運維人員不需要盯著指標看,甚至不需要盯著D-SMART看,把短信告警或者微信告警、郵件告警接好,收到告警信息再去看看系統就可以了。
充分利用數據庫的可觀測性可以干很多事情,專家直接看數據也行,利用數據庫提供的工具(WDR/AWR/ASH等報告)也行,采集回來放著,一旦發生問題去回溯分析也可以。實際上D-SMART發布社區版的想法來自于一個合作伙伴的需求。當時我們的一個合作伙伴提出有幾十個客戶,沒多少錢,希望出問題后我們能派專家去現場分析。我們算了一下,如果專家去現場,每年多出幾次問題就虧了。于是提出能不能遠程分析,不過那些客戶里大多數是不允許VPN連上去分析的。于是我們提出來使用d-smart輔助。測試了一兩個客戶,發現效果還不錯,用戶出問題的時候,D-SMART生成幾份報告,遠程分析一下,就基本上解決問題了。不過讓這些用戶都買一套D-SMART,用戶也買不起,那怎么辦,經過幾次討論,我們想出了一個發布D-SMART社區版的方法。利用社區版日常采集的數據,到需要提供服務時就可以生成遠程分析所需要的報告了。