新聞中心
PG 16的第一個(gè)預(yù)覽版發(fā)布了,也就是說(shuō)PG社區(qū)已經(jīng)鎖定了PG 16的基本功能,到正式版發(fā)布雖然還有一段時(shí)間,不過(guò)在正式版里,剪掉某些功能是有可能的,增加某些功能基本上是無(wú)望了。很多PGer對(duì)于PG 16的功能更新有些失望,這次的失望恐怕要高于PG15。PGer最大的失望莫過(guò)于XID 64、內(nèi)置連接池等重要功能的缺席。我也看到了網(wǎng)上一些朋友對(duì)PG16擠牙膏似的功能更新感到無(wú)力吐槽。事實(shí)是否如此呢?今天老白以自己的觀點(diǎn)來(lái)給大家解析一下PG16更新的Highlight。

成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),10年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都成百上千客戶提供網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站開(kāi)發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營(yíng)銷型網(wǎng)站建設(shè),品牌網(wǎng)站制作,同時(shí)也為不同行業(yè)的客戶提供網(wǎng)站制作、成都網(wǎng)站制作的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)建站。
16個(gè)“亮眼”的新功能Highlight的第一個(gè)就是性能方面的,首先是并行查詢方面的性能提升。實(shí)際上如果仔細(xì)研究一下這些文字,里面包含的信息還是挺豐富的。在并行執(zhí)行方面,PG這些年還是下了很大功夫的,在近期的每個(gè)版本中都會(huì)出現(xiàn)一些和并行執(zhí)行相關(guān)的新特性。這說(shuō)明PG核心研發(fā)團(tuán)隊(duì)對(duì)于硬件技術(shù)的提升還是跟隨得很緊的,希望利用現(xiàn)代硬件的新特性來(lái)為PG的性能做加持。
PostgreSQL 16增加了更多的并行查詢能力,比如允許FULL和RIGHT JION在并行模式下執(zhí)行,這兩類都是SQL中常有的操作,可以對(duì)十分廣泛的SQL執(zhí)行加速。允許parallel group和parallel aggregate則會(huì)對(duì)統(tǒng)計(jì)類的SQL加速,從而更快的執(zhí)行一些大數(shù)據(jù)量分析的SQL。
另外一個(gè)性能方面的提升中的“增量排序”是指在排序時(shí),可以先對(duì)一部分?jǐn)?shù)據(jù)進(jìn)行排序,然后逐步加入更多的數(shù)據(jù),而不是一次性對(duì)所有數(shù)據(jù)進(jìn)行排序,從而節(jié)省內(nèi)存和時(shí)間。PostgreSQL 16可以在SELECT DISTINCT 查詢中使用增量排序,從而提高查詢的性能。
“窗口查詢”是指在執(zhí)行一個(gè)select查詢時(shí),可以對(duì)結(jié)果集中的每一行或每一組行應(yīng)用一些聚合函數(shù)或分析函數(shù),比如求和、平均、排名等。PostgreSQL 16對(duì)窗口查詢進(jìn)行了一些優(yōu)化,比如支持使用frame clause來(lái)指定窗口范圍,支持在此類SQL中,對(duì)RANGE和LIST分區(qū)使用push down predicate來(lái)過(guò)濾不需要的數(shù)據(jù),支持使用partition pruning來(lái)跳過(guò)不相關(guān)的分區(qū)等,并且支持在右外連接條件中使用“anti join”。
PG 16的并行執(zhí)行并不僅僅限于SELECT,對(duì)于BULK LOADING操作也支持并發(fā)模式,這個(gè)改進(jìn)可以將COPY命令的性能提升3倍。大數(shù)據(jù)量裝載在數(shù)據(jù)庫(kù)遷移和ETL等操作中都十分常見(jiàn),3倍的性能提升還是挺令人滿意的。
This release also introduces support for CPU acceleration using SIMD for both x86 and ARM architectures, including optimizations for processing ASCII and JSON strings, and array and subtransaction searches. Additionally, PostgreSQL 16 introduces load balancing to libpq, the client lib。
上面這句話包含了兩方面的內(nèi)容,一方面是PG16對(duì)SIMD的支持,一方面是libpq支持LOAD BALANCE了。不知道為什么要把這兩件事放在一段里,目前還沒(méi)有測(cè)試過(guò),所以也不清楚二者是否有關(guān)。不過(guò)這意味著libpq可以自動(dòng)選擇最佳的服務(wù)器來(lái)處理客戶端的請(qǐng)求,從而提高性能和可靠性。另外這個(gè)功能也意味著今后PG數(shù)據(jù)庫(kù)的高可用與讀寫(xiě)分離將會(huì)有更加簡(jiǎn)單的實(shí)現(xiàn),這也為某些以讀為主的應(yīng)用提供了一種更加簡(jiǎn)單的實(shí)現(xiàn)方式。
上面那句話的另外一面是關(guān)于SIMD的,PG 16支持SIMD了。這是一件大事嗎?對(duì)PG來(lái)說(shuō)也許是的,不過(guò)SIMD已經(jīng)不是啥新鮮玩意了,如果早上幾年,這也許算是一個(gè)創(chuàng)新。Oracle 12c的IMDB就已經(jīng)開(kāi)始使用SIMD來(lái)做行列轉(zhuǎn)換了,Clickhouse等數(shù)據(jù)庫(kù)也早就用上了,國(guó)產(chǎn)數(shù)據(jù)庫(kù)也大量使用SIMD,比如openGauss前些年就在宣傳對(duì)SIMD的支持了。SIMD 是一種 CPU 的加速技術(shù),可以充分利用CPU指令集的特性,比如INTEL的AVX-512指令集的能力實(shí)現(xiàn)超寬向量操作,讓 CPU 一次處理多個(gè)數(shù)據(jù),從而提高運(yùn)算速度。PostgreSQL 16針對(duì)X86和ARM CPU 支持使用 SIMD 技術(shù)來(lái)加速一些常見(jiàn)的操作,比如處理 ASCII 和 JSON 字符串。
針對(duì)這個(gè)特性,放在2023年的今天還放在HIGHLIGHT里作為一個(gè)亮點(diǎn)來(lái)介紹,似乎有點(diǎn)大驚小怪了,好像當(dāng)年Oracle 12c的新特性里壓根就放不下這一條。倒是一些國(guó)產(chǎn)數(shù)據(jù)庫(kù)只要用上一點(diǎn)SIMD就號(hào)稱在數(shù)據(jù)庫(kù)中支持矢量計(jì)算了。
在邏輯復(fù)制上,PG16也發(fā)布了一些新特性,其中最重要的是可以將邏輯復(fù)制的解碼工作從主庫(kù)下載到從庫(kù),這可以大大減輕主庫(kù)的工作壓力,在高負(fù)載情況下提高主庫(kù)的性能。另外在對(duì)大事務(wù)的復(fù)制優(yōu)化上,PG16支持對(duì)大事務(wù)進(jìn)行并行APPLY,從而解決大事務(wù)導(dǎo)致邏輯復(fù)制延時(shí)過(guò)大的問(wèn)題。另外一個(gè)性能優(yōu)化是,在邏輯復(fù)制UPDATE/DELETE操作時(shí),不僅僅可以使用主鍵,也可以使用其他索引。上述關(guān)于邏輯復(fù)制的性能優(yōu)化,算是中規(guī)中矩,從庫(kù)解碼和大事務(wù)并行APPLY都是十分有價(jià)值的更新。
今天時(shí)間有限,關(guān)于開(kāi)發(fā)體驗(yàn)和安全的新特性我們先跳過(guò),我們直接來(lái)看下一條:監(jiān)控與管理。這是DBA最為關(guān)心的內(nèi)容。其中最令DBA興奮的是pg_stat_io。DBA苦無(wú)法獲知PG的IO性能指標(biāo)久矣。在D-SMART里,PG數(shù)據(jù)庫(kù)的健康模型中冠以PGIO的指標(biāo)十分稀缺。
可以看到,在D-SMART的健康模型中,關(guān)于PG IO方面的指標(biāo)只有區(qū)區(qū)數(shù)個(gè),而且還都是參考性不夠強(qiáng)的指標(biāo)。
在同門(mén)兄弟openGauss中,指標(biāo)的數(shù)量與質(zhì)量都有了明顯的提高,我們的健康模型也更能夠反映出數(shù)據(jù)庫(kù)的IO負(fù)載與性能狀態(tài)。在PG16中,這些問(wèn)題得到了改善,pg_stat_io可以按照backend類型對(duì)IO進(jìn)行統(tǒng)計(jì),包括讀寫(xiě)次數(shù),讀寫(xiě)時(shí)間,回寫(xiě)次數(shù)等信息。
對(duì)于失望于沒(méi)有看到XID64的朋友,PG16給了大家一個(gè)安慰獎(jiǎng):“This release includes improvements to the page freezing strategy, which helps the performance of vacuuming and other maintenance operations.”??赡苁怯悬c(diǎn)不好意思吧,在新特性中僅僅提了上面一句話。PostgreSQL 16通過(guò)使用主動(dòng)的時(shí)間線來(lái)驅(qū)動(dòng) VACUUM 凍結(jié),從而避免不必要的凍結(jié)元組。這樣可以減少自動(dòng)清理的頻率,并提高清理效率。
關(guān)于這個(gè)問(wèn)題,大家意見(jiàn)比較大是可以理解的,不過(guò)我們也要理解修改XID的難處。以O(shè)racle為例,在2002年左右爆發(fā)的SCN HEADROOM問(wèn)題一些老DBA可能還記得,這是因?yàn)?8位的SCN以及40年前的設(shè)計(jì)者為了讓Oracle數(shù)據(jù)庫(kù)能保用500年而設(shè)計(jì)的每秒SCN增長(zhǎng)16K的天花板。哪怕是剛剛出現(xiàn)問(wèn)題的2002年,每秒新增1.6萬(wàn)事務(wù)的估計(jì)顯得有點(diǎn)科幻,不過(guò)隨著硬件能力的提升,現(xiàn)在一秒鐘干20萬(wàn)筆事務(wù)的數(shù)據(jù)庫(kù)系統(tǒng)已經(jīng)很常見(jiàn)了。二十年前問(wèn)題剛剛爆發(fā)時(shí),Oracle官方就認(rèn)為徹底解決該問(wèn)題的方法是將48位的SCN升級(jí)為64位。不過(guò)20年過(guò)去了,Oracle還沒(méi)有實(shí)現(xiàn)這個(gè)升級(jí),而是把數(shù)據(jù)庫(kù)SCN必須你能夠保用500年這一條改掉了,誰(shuí)家的數(shù)據(jù)庫(kù)能一庫(kù)到底500年?讓SCN HEADROOM突破16K的限制比把SCN改成64位簡(jiǎn)單多了。我想目前PG社區(qū)的老大們目前也在往這方面想吧。
今天因?yàn)闀r(shí)間問(wèn)題,我就寫(xiě)這么多吧,一些其他的特性就不做詳細(xì)的解讀了。目前我也僅僅是解讀了文檔,并沒(méi)有真正的去使用PG16,有些東西是不是我想象的這樣,這就需要今后實(shí)踐中去體驗(yàn)了。從對(duì)PG16新特性的解析上看,雖然說(shuō)對(duì)于一個(gè)年度更新大版本的數(shù)據(jù)庫(kù)產(chǎn)品來(lái)說(shuō),這些提升還是說(shuō)得過(guò)去的,不過(guò)也看出了PG社區(qū)的大佬們還是偏于保守,不過(guò)對(duì)于數(shù)據(jù)庫(kù)產(chǎn)品來(lái)說(shuō),穩(wěn)定是第一位的,確保數(shù)據(jù)安全的優(yōu)先級(jí)是遠(yuǎn)高于創(chuàng)新的,所以大家也不要太失望。
當(dāng)前名稱:PG16的新特性是不是在擠牙膏呢?
網(wǎng)頁(yè)網(wǎng)址:http://www.dlmjj.cn/article/djegchh.html


咨詢
建站咨詢
