用一個(gè)Gaussdb的例子探討一下指標(biāo)波動(dòng)的關(guān)聯(lián)性
數(shù)據(jù)庫(kù)系統(tǒng)是一個(gè)十分神奇的系統(tǒng),我們以前習(xí)慣于監(jiān)控某個(gè)指標(biāo)是否出現(xiàn)了異常。不過(guò)單一指標(biāo)的波動(dòng)與異常往往很難定位故障或者問(wèn)題。不同的應(yīng)用系統(tǒng)中,指標(biāo)之間的關(guān)聯(lián)度會(huì)有很大的差異。如果在類(lèi)似業(yè)務(wù)場(chǎng)景,類(lèi)似的負(fù)載情況下,數(shù)據(jù)庫(kù)的指標(biāo)波動(dòng)與相互影響還是具有一定的相似性的。這也是智能化運(yùn)維的算法具有一定的普適性應(yīng)用范圍的理論基礎(chǔ)。
我們探究指標(biāo)后面的復(fù)雜關(guān)系是為了分析問(wèn)題時(shí)能夠盡快抓住要點(diǎn),從而避開(kāi)錯(cuò)誤的路徑分叉,直擊問(wèn)題的根源于本質(zhì)。因此我們對(duì)數(shù)據(jù)庫(kù)的指標(biāo)體系理解的越為深刻,分析問(wèn)題的能力也就越強(qiáng)。在二十多年的Oracle數(shù)據(jù)庫(kù)運(yùn)維工作中,我就是通過(guò)不斷的理解指標(biāo)與指標(biāo)后面的復(fù)雜關(guān)聯(lián)關(guān)系,再結(jié)合Oracle數(shù)據(jù)庫(kù)內(nèi)部原理與基礎(chǔ)概念,去不斷的提升自己的分析問(wèn)題的能力的。
接下來(lái)我們來(lái)看一個(gè)例子,這個(gè)例子來(lái)自于一套負(fù)載比較高的Gaussdb數(shù)據(jù)庫(kù)系統(tǒng),這套數(shù)據(jù)庫(kù)的配置比較豪華,有6個(gè)CN節(jié)點(diǎn),12個(gè)DN節(jié)點(diǎn),運(yùn)行于華為云上,每個(gè)CN節(jié)點(diǎn)配置了16個(gè)CPU核心。Gaussdb的CN是采用負(fù)載均衡的模式接受來(lái)自應(yīng)用的負(fù)載的,這套應(yīng)用系統(tǒng)是十分典型的后臺(tái)交易型業(yè)務(wù),大部分業(yè)務(wù)負(fù)載來(lái)自于前端過(guò)來(lái)的流式交易數(shù)據(jù)。數(shù)據(jù)庫(kù)是均勻分區(qū)在多個(gè)DN上的,應(yīng)用負(fù)載也是較為均勻的分布在多個(gè)CN上的。
在一般情況下,這幾個(gè)CN承載的業(yè)務(wù)與業(yè)務(wù)負(fù)載十分相近,也不存在特別差的SQL語(yǔ)句。我們選取相同的時(shí)間片切面,用“每秒返回行數(shù)”這個(gè)指標(biāo),看看在同一時(shí)間切片上,不同的CN節(jié)點(diǎn)中,與這個(gè)指標(biāo)具有較為相似的波動(dòng)特性的指標(biāo)有哪些。
圖片
首先我們來(lái)看187節(jié)點(diǎn)的情況,有較強(qiáng)關(guān)聯(lián)性的指標(biāo)是每秒邏輯讀、每秒獲取行數(shù)、活躍會(huì)話數(shù)(低相似性)這幾個(gè)指標(biāo)。
圖片
再來(lái)看看224節(jié)點(diǎn)的情況,也十分類(lèi)似,關(guān)聯(lián)性最強(qiáng)的是每秒邏輯讀和每秒獲取行數(shù)。
圖片
235節(jié)點(diǎn)的情況又會(huì)如何呢?也差不多,不過(guò)每秒獲取行數(shù)的指標(biāo)波動(dòng)更為相近一些。
圖片
從上面的數(shù)據(jù)可以看出,每秒邏輯讀與每秒獲取行數(shù)是關(guān)聯(lián)性最強(qiáng)的兩個(gè)指標(biāo)。邏輯讀是與返回行數(shù)與并發(fā)SQL執(zhí)行量是十分強(qiáng)關(guān)聯(lián)的指標(biāo),因此這個(gè)指標(biāo)的波動(dòng)特性與每秒返回行數(shù)的關(guān)聯(lián)系很強(qiáng),在大多數(shù)場(chǎng)景中都可能會(huì)出現(xiàn)。
而每秒獲取行數(shù)指標(biāo)看上去和每秒返回行數(shù)的血緣關(guān)系十分相近。不過(guò)實(shí)際上在不同的應(yīng)用場(chǎng)景中,二者可能會(huì)有較大的差異。每秒獲取行數(shù)是在掃描表或者訪問(wèn)表時(shí)讀取的行的數(shù)量,而每秒返回行數(shù)是每秒返回到客戶端的行的數(shù)量。這二者在不同的SQL中可能會(huì)有較大的差異。比如SELECT COUNT(*)可能統(tǒng)計(jì)了1萬(wàn)條數(shù)據(jù),但是只返回了1條數(shù)據(jù),這樣訪問(wèn)數(shù)和返回?cái)?shù)可能會(huì)相差萬(wàn)倍。再比如說(shuō)我們通過(guò)索引找出了一萬(wàn)行數(shù)據(jù),再根據(jù)SQL中的和索引無(wú)關(guān)的過(guò)濾條件從中篩選出1000條,那么二者會(huì)有10倍的差異。從這兩個(gè)指標(biāo)的波動(dòng)關(guān)聯(lián)性強(qiáng)弱可以看出數(shù)據(jù)庫(kù)執(zhí)行的SQL是否發(fā)生了變化,亦或是SQL訪問(wèn)的數(shù)據(jù)或者使用的參數(shù)是否發(fā)生了變化。一般來(lái)說(shuō)探索這些問(wèn)題需要很復(fù)雜的過(guò)程,而通過(guò)指標(biāo)波動(dòng)關(guān)聯(lián)性的分析就可以比較簡(jiǎn)單,粗略的獲得了。
下面我把時(shí)間窗口調(diào)整到0點(diǎn)系統(tǒng)做批處理報(bào)表的時(shí)間段,我們會(huì)發(fā)現(xiàn)指標(biāo)波動(dòng)的規(guī)律完全改變了。
圖片
白天的業(yè)務(wù)特點(diǎn)是大量的小型的查詢(xún)語(yǔ)句并發(fā)執(zhí)行,因此與之關(guān)聯(lián)的指標(biāo)數(shù)量較多,集中度較低。而晚上是少量的批處理作業(yè)在執(zhí)行,因此指標(biāo)波動(dòng)的集中度很高,波動(dòng)相似性也較強(qiáng),每秒邏輯讀與返回行數(shù)的關(guān)系十分相近。
雖然說(shuō)某種業(yè)務(wù)下的某個(gè)指標(biāo)的波動(dòng)關(guān)聯(lián)性會(huì)發(fā)生一些變化,不過(guò)有些東西是不會(huì)變的,那就是指標(biāo)之間的波動(dòng)關(guān)聯(lián)性都是與數(shù)據(jù)庫(kù)的基本原理有關(guān)的。一般情況下不會(huì)存在兩個(gè)完全不相干的指標(biāo)之間存在較強(qiáng)的波動(dòng)關(guān)聯(lián)性。
數(shù)據(jù)庫(kù)系統(tǒng)中的指標(biāo)波動(dòng)特性是存在內(nèi)在的必然聯(lián)系的。比如說(shuō)我們這個(gè)例子中的每秒返回行數(shù)指標(biāo),與每秒獲取行數(shù)(獲取是指從數(shù)據(jù)庫(kù)中訪問(wèn)到了,但是并不一定返回客戶端了)、每秒邏輯讀、每秒物理讀、長(zhǎng)查詢(xún)數(shù)量等,這些指標(biāo)之間都是存在較大的關(guān)聯(lián)關(guān)系的?;钴S會(huì)話數(shù)雖然與這些指標(biāo)直接不存在直接的關(guān)系,不過(guò)是能夠標(biāo)識(shí)出數(shù)據(jù)庫(kù)的活躍程度的,與之存在稍微弱一點(diǎn)的波動(dòng)關(guān)聯(lián)性也是解釋得過(guò)去的。
研究與分析指標(biāo)之間的關(guān)系,有助于理解某個(gè)數(shù)據(jù)庫(kù)產(chǎn)品的基本特性,有助于在分析問(wèn)題時(shí)抓住隱藏在表面之下的問(wèn)題。這些年我們對(duì)Oracle數(shù)據(jù)庫(kù)的研究已經(jīng)十分深入了,這方面的知識(shí)很豐富。不過(guò)不幸的是,目前的國(guó)產(chǎn)數(shù)據(jù)庫(kù)廠家并沒(méi)有對(duì)外公布任何這方面的知識(shí),這對(duì)于我們今后運(yùn)維國(guó)產(chǎn)數(shù)據(jù)庫(kù)形成了一定的障礙。我想現(xiàn)在肯定有一些從事數(shù)據(jù)庫(kù)服務(wù)的企業(yè)與個(gè)人已經(jīng)開(kāi)展了這方面的研究,我們也希望數(shù)據(jù)庫(kù)廠商除了完善用戶文檔外,也發(fā)布一些這方面的知識(shí),從而豐富國(guó)產(chǎn)數(shù)據(jù)庫(kù)運(yùn)維生態(tài)中的知識(shí)庫(kù)。我們團(tuán)隊(duì)也會(huì)通過(guò)我的公眾號(hào),不斷的向外公開(kāi)一些我們的研究成果。