DTCC 2023專家解讀 | GaussDB技術(shù)解讀系列之運維自動駕駛探索
近日,在第14屆中國數(shù)據(jù)庫技術(shù)大會(DTCC2023)的GaussDB“五高兩易”核心技術(shù),給世界一個更優(yōu)選擇專場,華為云數(shù)據(jù)庫運維研發(fā)總監(jiān)李東詳細解讀了GaussDB運維系統(tǒng)自動駕駛探索和實踐。

以下為演講實錄:
大家好,我是來自華為云GaussDB數(shù)據(jù)庫的李東。隨著企業(yè)數(shù)字化轉(zhuǎn)型進入深水區(qū),數(shù)據(jù)庫系統(tǒng)越來越復雜,運維團隊維護的數(shù)據(jù)庫規(guī)模越來越大,傳統(tǒng)工具化的運維已無法滿足當前運維的要求,數(shù)據(jù)庫運維逐漸向智能化發(fā)展。
如何更好地感知和預測數(shù)據(jù)庫故障,進而進行智能診斷、自適應恢復,是我們一直探索的內(nèi)容。接下來我將分享GaussDB在運維自動化駕駛上的探索與實踐,分別從云數(shù)據(jù)庫運維挑戰(zhàn),GaussDB運維體系架構(gòu),以及我們?nèi)绾芜M行快速感知和快速診斷4個方向進行分享。
云數(shù)據(jù)庫運維面臨哪些挑戰(zhàn)?
隨著企業(yè)將數(shù)據(jù)庫搬遷上云,云上數(shù)據(jù)庫運維面臨的挑戰(zhàn)更加復雜。數(shù)據(jù)庫可能會部署在裸金屬、虛擬機、容器等多樣化的基礎(chǔ)設施上,不同的基礎(chǔ)設施面對的故障場景也隨之多樣化。
如果我們遇到一個性能抖動的亞健康問題,通常解決思路是從應用數(shù)據(jù)庫、操作系統(tǒng)、計算、存儲、網(wǎng)絡等方面多層次全面分析,每一層都可能發(fā)生故障,不同層次發(fā)生故障可能引發(fā)相同的亞健康現(xiàn)象。比如說一個慢SQL,可能是磁盤故障導致的,也有可能是網(wǎng)絡抖動引起的,但是表現(xiàn)上對于客戶來講都是一個慢SQL。
如果運維能力不足,我們很難在短時間內(nèi)去定位和解決亞健康問題,因為它在處理過程中一般有三個挑戰(zhàn):
第一,無法準確預測和監(jiān)控亞健康問題
這里主要涉及到多和少的問題,“少”就是在每一層上缺少對亞健康問題的監(jiān)控,比如說磁盤故障了,可以很容易感知到;但如果磁盤出現(xiàn)了壞塊或者慢盤的情況,我們就沒有辦法快速監(jiān)控?!岸唷斌w現(xiàn)在我們在每一層都做了監(jiān)控和告警,但告警之間是沒有關(guān)聯(lián)性的,很難從這些告警中識別真正發(fā)生問題的點在哪里,所以很難精確發(fā)現(xiàn)當前的亞健康問題。
第二,發(fā)現(xiàn)亞健康問題之后沒有辦法進行快速診斷
對于數(shù)據(jù)庫內(nèi)部發(fā)生的問題,往往依賴DBA經(jīng)驗進行診斷和決策,對運維的能力要求比較高,效率也無法保證。
第三,恢復能力不足
我們當前診斷到發(fā)生問題的根源之后需要去恢復,但恢復能力不足,比如限流、扛過載的有效能力不足,涉及數(shù)據(jù)庫參數(shù)調(diào)優(yōu)、爛SQL優(yōu)化等需要很深的數(shù)據(jù)庫能力和經(jīng)驗的積累。
GaussDB整體運維架構(gòu)
GaussDB是如何處理這些問題的?下面我們看一下GaussDB整體運維的架構(gòu),
GaussDB統(tǒng)一運維平臺主要分為5個部分:
第一部分是實例運維,主要負責GaussDB集群生命周期的管理,比如創(chuàng)建、變更以及進行備份恢復和參數(shù)調(diào)整。
第二部分是容災管理,主要提供流式容災、同城容災、兩地三中心能力。
第三部分是智能運維,是GaussDB運維體系中最關(guān)鍵的部分,通過AI4DB的能力打造自治運維系統(tǒng),主要分為以下四層:
第一層是數(shù)據(jù)采集層,負責采集各層的監(jiān)控數(shù)據(jù)以及上層下發(fā)的操作指令。
第二層是數(shù)據(jù)計算層,負責將采集到的數(shù)據(jù)進行緩存、持久化以及數(shù)據(jù)加工,包括時序數(shù)據(jù)庫、算法模型庫、故障規(guī)則庫等。
第三層是自治服務層,包括SQL診斷調(diào)優(yōu)、安全、數(shù)據(jù)庫運維等能力。
第四層是全景監(jiān)控,包括告警監(jiān)控、全量SQL等能力。
GaussDB通過構(gòu)建一系列的智能運維中心,打造了全鏈路、端到端的自動駕駛體驗。

GaussDB故障快速感知
數(shù)據(jù)庫全景監(jiān)控大盤,實時感知系統(tǒng)運行狀態(tài)
下面我們看一下GaussDB全景監(jiān)控大盤,通過全景監(jiān)控可以看出我們所維護的數(shù)據(jù)庫集群哪些是正常的,哪些是異常的,哪些是存在亞健康情況的。比如查看告警統(tǒng)計模塊,通過分析可以看出整個集群當前的告警情況,如果有緊急告警和重要告警,可以優(yōu)先處理。也可以看到資源使用的風險,通過資源使用預測能力預警即將會發(fā)生哪些資源瓶頸,比如說磁盤空間不足、CPU不足,方便我們及時處理和恢復。智能診斷這塊,通過分析當前數(shù)據(jù)庫有哪些性能瓶頸,同時也支持自定義監(jiān)控大盤,選取用戶重點業(yè)務數(shù)據(jù)庫,自定義重點監(jiān)控指標,對重點業(yè)務進行自定義維度的保障監(jiān)控。
數(shù)據(jù)庫全景大盤首先要依賴全鏈路、全方位的監(jiān)控。數(shù)據(jù)庫的可觀測能力對于數(shù)據(jù)庫的運維十分重要,GaussDB全鏈路監(jiān)控具備從硬件、OS、DB等分層監(jiān)控,構(gòu)建從采集、發(fā)送、展示、分析到巡檢等全鏈路能力,并且打通了硬件到操作系統(tǒng),到數(shù)據(jù)庫整個監(jiān)控鏈的通道。比如說硬件出現(xiàn)故障問題,如果在云上,硬件故障屬于不同部門維護,數(shù)據(jù)庫部門只能看到數(shù)據(jù)庫集群,如何感知到硬件發(fā)生亞健康或者操作系統(tǒng)存在問題,這個時候就得聯(lián)合硬件部門,打通硬件到操作系統(tǒng)、數(shù)據(jù)庫的通知機制,如果在這層發(fā)生了亞健康問題,可以把故障信息向上通知相關(guān)的運維部門解決。

全量SQL數(shù)據(jù)采集分析
接下來看一下全量SQL采集的能力。相較于傳統(tǒng)全量SQL采集方式,即通過流量抓取或者日志方式獲取全量SQL,GaussDB通過輕量化的方式構(gòu)建了全量SQL的洞察。采集進程與數(shù)據(jù)庫建立內(nèi)存緩沖區(qū)通道,直接從內(nèi)存通道里把SQL信息進行采集并轉(zhuǎn)存到外部設備中,這個過程不需要發(fā)生任何磁盤IO操作,對性能影響極低。
傳統(tǒng)的采集場景我們可能需要開啟全量SQL,對業(yè)務的影響在30%左右,一般情況下,用戶是不敢開啟的。而GaussDB的全量SQL,可以把風險降到最低。GaussDB提供的全量SQL方案具備以下4個特點:
?低風險
GaussDB通過內(nèi)存方式把日志信息全部讀取完再轉(zhuǎn)存到第三方,對數(shù)據(jù)庫性能損耗不超過5%。
?低成本
GaussDB不將全量SQL數(shù)據(jù)轉(zhuǎn)存到本地IO,而是直接轉(zhuǎn)存到第三方,比如說云上的OBS,并支持全量SQL的壓縮,成本比較低。
高擴展
GaussDB全量SQL會默認采集部分信息,如果這些信息不滿足當前的訴求,可以進行擴展。
?高安全
當需要將全量SQL轉(zhuǎn)存到第三方設備上時,GaussDB在轉(zhuǎn)存過程中進行了默認的數(shù)據(jù)脫敏,確保數(shù)據(jù)安全。
通過全鏈路監(jiān)控,GaussDB支持快速自動巡檢,對可用性、可靠性、性能、資源使用趨勢等內(nèi)容進行巡檢,并輸出巡檢報告,由此可以查看當前存在的問題,并給出一些相應建議。所以,通過上述全鏈路以及自動巡檢的能力,GaussDB可以做到快速感知。
GaussDB智能診斷
下面我們看一下GaussDB在故障診斷方面有哪些能力?
1. SQL自診斷
我們基于離線+在線的方式進行SQL診斷,首先收集可能存在慢SQL的場景,包括SQL文本、SQL執(zhí)行時間以及掃描行數(shù)、返回行數(shù),并收集跟數(shù)據(jù)庫、操作系統(tǒng)或者是資源相關(guān)的關(guān)鍵指標,通過業(yè)務SQL信息和關(guān)鍵指標信息,進行離線的訓練,最終得到一個慢SQL特征庫。
這個特征庫有什么用呢?當我們在生產(chǎn)環(huán)境中遇到慢SQL問題,可以基于特征庫和KNN算法進行在線推理,診斷出SQL產(chǎn)生的原因,然后針對根因給出一些優(yōu)化建議。
2. SQL全鏈路分析
之前有客戶反饋,平時我們的SQL執(zhí)行非??欤茉谝幻雰?nèi)返回,但是最近反饋偶現(xiàn)執(zhí)行頻繁超時。我們業(yè)務人員通過查看每一層狀況,對客戶端、數(shù)據(jù)庫CN、DN、操作系統(tǒng)等進行串行分析,發(fā)現(xiàn)這個偶現(xiàn)的問題可能發(fā)生在某個分片上,這樣的診斷效率非常低。
GaussDB提供的SQL全鏈路監(jiān)控分析能力則很好地解決了這個問題。它包括全鏈路追蹤和聚合分析兩方面,通過業(yè)務SQL關(guān)鍵字或客戶端traceID等條件查詢到數(shù)據(jù)庫SQLID,并追蹤該SQL在數(shù)據(jù)庫集群中的解析過程和執(zhí)行耗時,以及每條SQL在集群中的轉(zhuǎn)發(fā)、聚合情況,進而追蹤到問題發(fā)生的源頭。
3. 多維指標關(guān)聯(lián)分析
數(shù)據(jù)庫運維過程中需要對大量指標進行監(jiān)控,當其中某個或多個關(guān)鍵指標發(fā)生異常時,運維人員需要快速準確定位到異常根因,以便決定下一步的操作。但是當指標數(shù)量很多時,篩選信息的工作量也會很龐大,因此我們需要一個高效的工具去解決這個問題。
我們知道某些數(shù)據(jù)庫指標之間是存在強關(guān)聯(lián)性的,通過有方向性的關(guān)聯(lián)性算法,在異常發(fā)生時將同一時間段的指標進行比對,根據(jù)相關(guān)性的強弱將異常時間段內(nèi)與關(guān)鍵指標相關(guān)的指標篩選出來。GaussDB當前支持毛刺、持續(xù)增長、漂移、周期性等場景的檢測算法,可以幫助運維人員迅速定位問題,減輕運維人員的工作量,助其鎖定問題的根因。
4. 趨勢預測
在日常系統(tǒng)運維及故障處置實踐中,負載的變化往往也蘊含著當前系統(tǒng)的亞健康及故障的影響反饋,基于傳統(tǒng)的組件指標監(jiān)控和告警,在故障異常發(fā)現(xiàn)的及時性上具有挑戰(zhàn)。GaussDB通過建立對實例級關(guān)鍵指標的監(jiān)控,基于歷史數(shù)據(jù)和時序預測、異常檢測等關(guān)鍵算法,對黃金KPI進行指標預測,發(fā)現(xiàn)異常信息,進而提醒用戶采取措施,避免異常情況造成嚴重后果。
5. 索引推薦
應用開發(fā)者在對SQL進行優(yōu)化的過程中,索引優(yōu)化是關(guān)鍵的優(yōu)化內(nèi)容,但由于其在性能分析、優(yōu)化手段等多方面存在復雜分析和實踐門檻,給SQL優(yōu)化帶來了挑戰(zhàn)。
索引推薦的核心方法是基于原生的詞法和語法解析,對查詢語句中的字句和謂詞進行分析和處理,再結(jié)合字段選擇度、聚合條件、多表join關(guān)系等輸出最優(yōu)的索引建議。GaussDB 提供索引推薦功能,給出索引推薦列表,以及每一個索引的正向和負向SQL的收益,識別當前數(shù)據(jù)庫存在的冗余索引、無用索引,優(yōu)化數(shù)據(jù)庫查詢速度。GaussDB還提供了優(yōu)化器評估能力,它提供了一個虛擬索引的能力,不需要真實創(chuàng)建索引,通過虛擬索引評估索引推薦的結(jié)果是不是合適;通過持續(xù)對索引配置進行優(yōu)化,可以解決用戶的負載漂移情況,及時發(fā)現(xiàn)索引不優(yōu)、冗余索引,以便避免故障發(fā)生。
6. SQL會話查殺
應用開發(fā)的復雜邏輯可能導致人工難以發(fā)現(xiàn)的邏輯問題,出現(xiàn)異常SQL,需要有對應手段幫助運維人員快速對異常會話進行查殺限制。GaussDB應用平臺提供了一個會話管理的能力,實時會話頁面支持會話統(tǒng)計、活躍會話、會話鎖分析、會話查殺等功能,幫助運維和管理人員快速掌握實例的會話信息,管理實例會話,并高效定位數(shù)據(jù)庫會話連接相關(guān)人工難以發(fā)現(xiàn)的邏輯問題。
7.?SQL限流和自治限流
我們可以想象一個場景,在數(shù)據(jù)庫正常運行過程中,某一個應用上線了一個新功能,這個新功能引入了一個超級爛SQL,導致數(shù)據(jù)庫逐漸從正常對外服務狀態(tài)轉(zhuǎn)為資源使用逐漸升高,大量的SQL因為獲取不到線程、CPU等資源而執(zhí)行的速度變慢,最終導致業(yè)務異常。如果遇到異常SQL(如不優(yōu)索引)、SQL并發(fā)上升等場景,會對整個數(shù)據(jù)庫的可服務性影響比較大,這時我們就可以通過對SQL精準化限流的方式進行抑制,保證業(yè)務能夠正常運行。
GaussDB提供的SQL限流提供了以下能力:
全局快慢車道。所謂全局快慢車道,就是定義兩個資源池,一個是正常資源池,我們稱為快車道,快車道提供大量的資源,正常業(yè)務在快車道運行,如果出現(xiàn)交通事故,這里的交通事故就是指異常的SQL業(yè)務,我們可以通過頁面一鍵將異常SQL放到慢車道中,慢車道限制了對資源的使用,這樣交通事故處理完了,快車道可以繼續(xù)保持高速運行。
單類SQL精準管控。對于單類SQL,需要從執(zhí)行時間、IO使用等角度進行精準管控,因為管控這類SQL的資源占用,可以起到緊急限流的效果。
內(nèi)存熔斷。提供內(nèi)存上下限配置,內(nèi)存使用超過最大內(nèi)存上限后禁止新連接接入并kill當前會話,待內(nèi)存恢復到內(nèi)存下限后停止kill會話并允許新連接接入。
SQL自治限流。提供按照一定的SQL規(guī)則,或者CPU、內(nèi)存等資源使用規(guī)則,來進行SQL的自治限流能力,避免對應類別的SQL拖慢整個數(shù)據(jù)庫。
我們GaussDB運維中心還有很多其他的能力,會在今年10月份進行全新發(fā)布,屆時大家可以體驗,一起給我們提意見。
今天我分享的內(nèi)容主要到這里,謝謝大家!