新聞中心
PG 15傳聞中的超級(jí)令人激動(dòng)的功能大多數(shù)跳票了,年初我也寫(xiě)過(guò)一個(gè)關(guān)于PG15新功能跳票的文章。PG 15 BETA已經(jīng)發(fā)出幾個(gè)月了,似乎PG 15里令人激動(dòng)人心的功能不多,不過(guò)從長(zhǎng)長(zhǎng)的新功能列表里,我還是能夠從中學(xué)到不少東西。數(shù)據(jù)庫(kù)的發(fā)展是和現(xiàn)代硬件技術(shù)的發(fā)展密切相關(guān)的,而數(shù)據(jù)庫(kù)在某一個(gè)方面的突破,可以為應(yīng)用提供更大的舞臺(tái),讓?xiě)?yīng)用能夠更加適應(yīng)某些特定場(chǎng)景。

實(shí)際上經(jīng)過(guò)幾個(gè)重要特性的跳票之后,我對(duì)PG 15的期待最主要集中在FULL PAGE WRITE的優(yōu)化上了。以前我也多次寫(xiě)文章研究過(guò)PG的WAL產(chǎn)生以及CHECKPOINT對(duì)高負(fù)載應(yīng)用寫(xiě)入性能的影響。其實(shí)這些性能影響大部分來(lái)自于FULL PAGE WRITE。因?yàn)楫?dāng)某個(gè)臟塊在CHECKPOINT完成后的第一次被寫(xiě)入的時(shí)候,都需要做一次FULL PAGE WRITE,以避免數(shù)據(jù)庫(kù)需要恢復(fù)時(shí)出現(xiàn)塊斷裂的情況。而FULL PAGE WRITE大規(guī)模產(chǎn)生的時(shí)候,因?yàn)閃AL的寫(xiě)入量大大增加,就會(huì)導(dǎo)致高并發(fā)寫(xiě)應(yīng)用的性能問(wèn)題。實(shí)際上,當(dāng)我們?cè)谧鰌g_basebackup等在線備份操作時(shí),也是會(huì)引發(fā)大量的FULL PAGE WRITE的。緩解這個(gè)問(wèn)題的方法是加大CHECKPOINT的延時(shí),讓兩次CHECPOINT的間隔更長(zhǎng)一些,這樣就會(huì)大量減少FULL PAGE WRITE。
加大CHEKPOINT的延時(shí)也是一個(gè)雙刃劍,因?yàn)檫@會(huì)讓數(shù)據(jù)庫(kù)在恢復(fù)時(shí)需要RECOVER更多的頁(yè),同時(shí)也會(huì)在一個(gè)CHECKPOINT時(shí)集中寫(xiě)入大量的數(shù)據(jù)塊。在瞬時(shí)對(duì)IO產(chǎn)生更大的影響。
在PG中關(guān)閉FULL PAGE WRITE也是一個(gè)選項(xiàng),只不過(guò)需要找到支持PG關(guān)閉FULL PAGE WRITE的文件系統(tǒng)或者存儲(chǔ)系統(tǒng)。我們以前曾經(jīng)在ZFS上嘗試過(guò)關(guān)閉FULL PAGE WRITE,效果是相當(dāng)不錯(cuò)的。只不過(guò)在我們的大多數(shù)PG運(yùn)行環(huán)境中并沒(méi)有使用ZFS,因此對(duì)于PG 15在FULL PAGE WRITE上的優(yōu)化,我們還是很期待的。
我曾經(jīng)也考慮過(guò)通過(guò)WAL壓縮來(lái)緩解FULL PAGE WRITE的問(wèn)題,在PG 12上我們做過(guò)一個(gè)測(cè)試,打開(kāi)WAL壓縮。只不過(guò)打開(kāi)WAL壓縮后,PG數(shù)據(jù)塊的高并發(fā)寫(xiě)入性能并未提升,反而略有下降。能夠從以前的PG 12的WAL壓縮中獲得性能提升的場(chǎng)景十分有限。
PG 15的WAL壓縮有了一個(gè)十分令人興奮的改進(jìn),除了支持PGLZ外,WAL壓縮還支持LZ4和ZSTANDARD兩種壓縮算法。
從官方的對(duì)比來(lái)看,ZSTD是一種平衡了壓縮解壓吞吐量與壓縮比的十分優(yōu)秀的壓縮算法,而LZ在壓縮比上雖然不如ZSTD,但是在壓縮吞吐量上有著特別優(yōu)秀的表現(xiàn)。這兩種壓縮算法的引入,必定會(huì)大大改善WAL壓縮的性能。
因?yàn)闀r(shí)間關(guān)系,我們目前還沒(méi)有全面開(kāi)展PG 15的測(cè)試,我想還是等正式版出來(lái)后再做完整的測(cè)試。不過(guò)從目前國(guó)外一些朋友對(duì)PG 15的測(cè)試來(lái)看,還是十分令人期待的。我們根據(jù)Mark Callaghan的測(cè)試用例來(lái)看一看效果吧。
和我們的預(yù)期相同,使用以前的pglz,對(duì)于僅有PK的場(chǎng)景影響并不大,對(duì)于PG來(lái)說(shuō),第一次數(shù)據(jù)寫(xiě)入,都是創(chuàng)建的新塊,不同的算法之間的影響還不算太大。但是對(duì)于其他場(chǎng)景影響較大。而使用LZ4的效果極佳,裝載性能有了明顯的提升。zstd在有多個(gè)索引時(shí)的數(shù)據(jù)裝載表現(xiàn)出了較好的性能。
不過(guò)從上面的測(cè)試來(lái)看,還是比較簡(jiǎn)單的,因此這個(gè)測(cè)試結(jié)果頁(yè)并不說(shuō)明太多的問(wèn)題。不過(guò)有一點(diǎn)是可以確定的,那就是LZ4和ZSTD的引入,會(huì)大大優(yōu)化WAL 壓縮的性能,從而緩解FULL PAGE WRITE的問(wèn)題,也可以大大減輕DBA優(yōu)化CHECKPOINT的工作。CHECKPOINT的優(yōu)化可能會(huì)在大多數(shù)場(chǎng)景下變得更簡(jiǎn)單了,我們只要根據(jù)自己的場(chǎng)景需求,選擇設(shè)置WAL壓縮參數(shù)就可以了。
挺巧的是,在PG 15里,增加了一個(gè)新的權(quán)限:pg_checkpointer。以往checkpint命令只能由超級(jí)用戶(hù)來(lái)執(zhí)行。而PG 15里,只要是授予這個(gè)權(quán)限的用戶(hù),都可以在自己的應(yīng)用里執(zhí)行checkpoint命令了。將checkpoint命令的權(quán)限下放,是PG 15細(xì)粒度權(quán)限控制優(yōu)化的一部分。不過(guò)既然敢下放權(quán)限,那就說(shuō)明checkpoint帶來(lái)的副作用已經(jīng)可控了。隨著現(xiàn)代硬件的發(fā)展,IO問(wèn)題已經(jīng)得到了大大地緩解,同時(shí)因?yàn)閃AL壓縮的優(yōu)化,也為checkpoint權(quán)限下放提供了有力的支撐。
不過(guò)業(yè)務(wù)場(chǎng)景十分復(fù)雜,這個(gè)權(quán)限還是不要隨便授予,因?yàn)槟壳皝?lái)看,我還沒(méi)有想清楚,這個(gè)權(quán)限下放的真實(shí)好處在什么地方,什么場(chǎng)景下,應(yīng)用需要自己去控制checkpoint。如果有一天,DBA發(fā)現(xiàn)一個(gè)撓頭的IO性能問(wèn)題,是因?yàn)槟硞€(gè)應(yīng)用系統(tǒng)頻繁執(zhí)行checkpoint引發(fā)的,那就麻煩大了。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),讓每條記錄盡快寫(xiě)盤(pán)肯定是件喜聞樂(lè)見(jiàn)的事情,而對(duì)于DBA來(lái)說(shuō),那可能是個(gè)災(zāi)難。
分享名稱(chēng):從PG15WAL壓縮優(yōu)化說(shuō)起,你明白了嗎?
網(wǎng)站URL:http://www.dlmjj.cn/article/dhjiidi.html


咨詢(xún)
建站咨詢(xún)
