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