分布式數(shù)據(jù)庫(kù)上,參數(shù)管理很重要,你知道嗎?
本周要開(kāi)啟一次艱苦的差旅行程,一周之內(nèi)在五個(gè)城市間穿梭,拜訪數(shù)個(gè)客戶(hù)。因此本周可能只能寫(xiě)一兩篇了。
上周五OBDIAG周會(huì)上,我提了兩個(gè)小工具的需求,其中一個(gè)是參數(shù)比對(duì)工具,希望OBDIAG提供一個(gè)能夠?qū)B參數(shù)進(jìn)行分析的工具。
分布式數(shù)據(jù)庫(kù)的復(fù)雜度遠(yuǎn)遠(yuǎn)高于集中式數(shù)據(jù)庫(kù),其最關(guān)鍵的一點(diǎn)就是節(jié)點(diǎn)和組件眾多,精細(xì)化管理眾多的節(jié)點(diǎn)會(huì)帶來(lái)很多問(wèn)題,其中一個(gè)比較麻煩的問(wèn)題就是參數(shù)管理。
對(duì)分布式數(shù)據(jù)庫(kù)而言,集群有集群的參數(shù),每個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),每個(gè)分布式數(shù)據(jù)庫(kù)組件也都有參數(shù),同類(lèi)的組件數(shù)量也很多,這些相同功能的組件都有完全相同的參數(shù)集,有些可以不同,有些不能不同。雖然你可以在安裝部署時(shí)盡可能使用相同的參數(shù),但是在實(shí)際生產(chǎn)應(yīng)用內(nèi)中還是需要對(duì)參數(shù)進(jìn)行調(diào)整,想要保持分布式數(shù)據(jù)庫(kù)的參數(shù)設(shè)置基本合理,其難度是很大的。
隨著數(shù)據(jù)庫(kù)上線運(yùn)行、不斷擴(kuò)容以及應(yīng)對(duì)各種突發(fā)的問(wèn)題,數(shù)據(jù)庫(kù)參數(shù)的變更會(huì)變得多起來(lái),這些組件之間的參數(shù)可能會(huì)比較難以管理。OCEANBASE上可能有些OBSERVER的參數(shù)與大多數(shù)OBSERVER不同,從而導(dǎo)致這幾個(gè)OBSERVER的性能或者其他方面總是會(huì)出點(diǎn)小問(wèn)題。GAUSSDB的某個(gè)CN節(jié)點(diǎn)的工作內(nèi)存忘記調(diào)大了,跑在這個(gè)節(jié)點(diǎn)上的SQL就總是會(huì)慢一點(diǎn),亦或是某個(gè)DN節(jié)點(diǎn)上的OS參數(shù)忘記調(diào)優(yōu)了,這個(gè)節(jié)點(diǎn)的內(nèi)存總是會(huì)換頁(yè)。
大多數(shù)分布式數(shù)據(jù)庫(kù)都有參數(shù)的白屏管理工具,不過(guò)這些工具都或多或少存在一些問(wèn)題,需要人去利用工具一點(diǎn)點(diǎn)檢查參數(shù)設(shè)置是否存在問(wèn)題,與真正的運(yùn)維工作有很大的差距。面對(duì)數(shù)十個(gè)甚至上百個(gè)節(jié)點(diǎn)或組件,有些組件甚至可能有成百上千的參數(shù),目前的國(guó)產(chǎn)分布式數(shù)據(jù)庫(kù)的白屏管理工具在這方面做得都不算太好。
分布式數(shù)據(jù)庫(kù)的參數(shù)分析工具需要什么功能呢?首先能夠找出所有的非默認(rèn)的,被修改過(guò)的參數(shù),詳細(xì)列出其在每個(gè)分布式組件上的值。一般情況下參數(shù)設(shè)置錯(cuò)誤導(dǎo)致的數(shù)據(jù)庫(kù)問(wèn)題都是人手工修改過(guò)的,因此我們需要對(duì)修改過(guò)的參數(shù)做重點(diǎn)分析。某些分布式數(shù)據(jù)庫(kù)目前還不一定具備直接找出非默認(rèn)參數(shù)的能力,那么就需要定期對(duì)參數(shù)做備份,每天自動(dòng)比對(duì)了。每天比對(duì)還可以找出最近變更的情況,比僅僅找出非默認(rèn)參數(shù)更有價(jià)值。
如果工具做得再好點(diǎn),不僅僅要找出最近修改過(guò)的參數(shù),還要標(biāo)注出這些參數(shù)是否是高危參數(shù)。我曾經(jīng)和一些數(shù)據(jù)庫(kù)廠商的研發(fā)人員交流過(guò)這個(gè)問(wèn)題,他們對(duì)“高位參數(shù)”或者參數(shù)的危險(xiǎn)度分級(jí)問(wèn)題也十分模糊。確實(shí),高危參數(shù)不一定能在參數(shù)設(shè)置時(shí)搞清楚,有些高危參數(shù)是在運(yùn)維實(shí)踐中才被發(fā)現(xiàn)出來(lái)的。雖然如此,數(shù)據(jù)庫(kù)原廠對(duì)自己的數(shù)據(jù)庫(kù)還是最了解的,是能夠標(biāo)注出大量高危參數(shù)的。這項(xiàng)工作,OBDIAG團(tuán)隊(duì)和OCEANBASE研發(fā)的同學(xué)已經(jīng)在對(duì)接了。
如果這件工作再進(jìn)一步,那就不僅僅是標(biāo)注出高危參數(shù),還需要找出配置不合理的高危參數(shù),如果可能,最好能夠分析出建議配置。對(duì)于目前用戶(hù)對(duì)國(guó)產(chǎn)分布式數(shù)據(jù)庫(kù)的熟悉程度而言,這些工作依靠用戶(hù)的DBA還是十分困難的,如果有自動(dòng)化工具支撐會(huì)相當(dāng)有價(jià)值。
其次是標(biāo)注出多個(gè)相同類(lèi)型組件中存在差異的參數(shù),一般情況下,一個(gè)分布式數(shù)據(jù)庫(kù)的不同服務(wù)組件中的同一個(gè)參數(shù)的設(shè)置都是類(lèi)似的,當(dāng)然也有些參數(shù)可能需要根據(jù)硬件環(huán)境等因素做不同的設(shè)置,存在不同的參數(shù)配置不一定就是不合理的。因此工具需要在表格中安排一列,告訴DBA這些參數(shù)的分布式環(huán)境設(shè)置策略,比如必須相同,建議相同,建議不同,必須不同等,這個(gè)標(biāo)注也最好是數(shù)據(jù)庫(kù)原廠出具建議。
第三方面是對(duì)參數(shù)做個(gè)分類(lèi),比如數(shù)據(jù)庫(kù)緩存,數(shù)據(jù)庫(kù)編譯,數(shù)據(jù)庫(kù)并發(fā),并行查詢(xún),連接排序,RPC通訊等等。分類(lèi)可以讓DBA更加明確地了解參數(shù)的大體作用。雖然數(shù)據(jù)庫(kù)廠商也在參考文檔中對(duì)參數(shù)做了解釋?zhuān)沁@些解釋過(guò)于泛泛,文字也大多干澀,讓人看了摸不清頭腦。而且數(shù)據(jù)庫(kù)參數(shù)在數(shù)據(jù)庫(kù)版本升級(jí)后變化很快,而文檔不一定跟得上其節(jié)奏,因此在工具中列出參數(shù)分類(lèi)與一些使用建議對(duì)運(yùn)維的幫助就很大了 。
分布式數(shù)據(jù)庫(kù)參數(shù)管理方面的問(wèn)題,其實(shí)已經(jīng)在很多用戶(hù)現(xiàn)場(chǎng)被用戶(hù)發(fā)現(xiàn)了,只是大家感覺(jué)到這個(gè)方面的問(wèn)題似乎不是那么緊迫,因此也沒(méi)有向數(shù)據(jù)庫(kù)廠商提出,數(shù)據(jù)庫(kù)廠商哪怕接到了用戶(hù)這方面的需求,也沒(méi)有當(dāng)成比較急迫的需求來(lái)應(yīng)對(duì)。實(shí)際上這方面的工作十分瑣碎,在數(shù)據(jù)庫(kù)原廠的配合下,由工具生態(tài)來(lái)完成也沒(méi)有問(wèn)題,OBDIAG已經(jīng)把我的這個(gè)需求放到了2.2版的實(shí)現(xiàn)任務(wù)里了。