
PostgreSQL 12專注于性能和優化。此版本的釋出并未考慮到全新的閃亮功能;相反,它是對現有PostgreSQL功能的微調和精心設計的實作。因為PostgreSQL每年都會釋出新版本,是以并不是每一個新功能都完全具備。在釋出了幾個版本之後,當該功能有機會從其最初的實作中發展出來時,其性能将得到改善,邊緣情況将得到支援,缺失的功能将得到實作。
這是PostgreSQL 12中發現的八個最重要的改進。
1.分區性能
分區并不是一項新功能,它已經存在了好幾年了,但是分區開銷卻降低了性能。PostgreSQL 11引入了一些分區性能改進,而PostgreSQL 12提供了完善的實作。對于從具有數千個分區的其他資料庫遷移來的使用者,PostgreSQL 12現在通過提供可同時有效處理數千個分區的功能而帶來性能優勢。分區性能增強可以提高查詢性能,尤其是INSERT和COPY語句的性能。此外,使用者現在可以更改分區表而不會阻止查詢,并可以使用外鍵引用分區表。
2. B樹增強
B-Tree功能是近年來對PostgreSQL添加的最複雜的功能之一。使用B樹的好處是減少了通路的磁盤塊的數量。考慮到B-Tree技術可以追溯到1970年代,很難對已經存在數十年的可靠功能進行改進。但是PostgreSQL 12團隊緻力于提供可自動啟用的重大性能改進,旨在避免某些極端情況和B樹代碼中曾經存在的“病理行為”。現在,通過更有效地利用空間,多列索引大小最多可減少40%,進而節省了磁盤空間。具有重複項(非唯一B樹索引)的索引的性能得以提高,并且從索引中删除元組(行)的真空運作效率更高。此外,索引更新期間的鎖定要求有所降低。
3.多列最有價值(MCV)統計資訊
此更新已經進行了幾年的開發,旨在解決多年來引起投訴的問題:查詢中相關列的邊緣情況。以俄亥俄州辛辛那提為例-您有一個标記為“城市”的字段,另一字段稱為“州”,其中“辛辛那提”位于一列,而俄亥俄州則在另一列。俄亥俄州的辛辛那提市将相當普遍,但亞利桑那州的辛辛那提市卻很少見。在此功能之前,PostgreSQL僅記錄了多個列的單個相關值。從本質上講,它将俄亥俄州的辛辛那提和亞利桑那州的辛辛那提視為同一件事。現在,您可以比較多個列并關聯組合以優化查詢索引。
4.公用表表達式(CTE)
正确實作的另一個過期功能是通用表表達式(帶有查詢内聯)。公用表表達式充當優化障礙,公用表表達式中的查詢首先執行,然後PostgreSQL将在查詢中執行之後的任何操作。一些使用者采用通用表表達式來提高SQL的可讀性和調試,而不是優化SQL的執行。這些使用者不可避免地會遇到優化行為。PostgreSQL 12使用關鍵字“ MATERIALIZE”實作了一項新功能,該功能允許使用者打開優化圍欄。如果您不使用MATERIALIZE,則不會獲得優化範圍,并且可能會看到更快的查詢。
5.準備好的計劃控制
一項重要的新功能使使用者可以控制PostgreSQL優化器的行為,并有可能提高性能。早期版本的PostgreSQL将使用自定義計劃五次,第六次建立一個通用計劃,并在與自定義計劃一樣好的情況下使用它。現在,可以通過名為“ plan_cache_mode”的新變量手動控制此行為,該變量允許使用者立即強制執行通用計劃。這為那些知道其參數恒定并且知道通用計劃将起作用的使用者帶來了顯着的性能優勢。
6.即時編譯
PostgreSQL 11最初引入的一項功能是現在在PostgreSQL 12中預設啟用即時複雜功能。即時編譯允許處理大量資料的資料倉庫查詢來更有效地運作執行程式。由于許多使用者啟用了此功能,是以該功能現已成為PostgreSQL 12的預設功能。
7.校驗和控制
追溯到2013年,PostgreSQL引入了一種校驗和功能,用于識别資料損壞。首次初始化資料庫時必須打開此功能,否則使用者必須轉儲,打開該功能并重新加載資料。這使得某些使用者幾乎無法使用該功能。在PostgreSQL 12中,通過一個稱為“ pg checksums”的指令(以前稱為pg verify checksum),使用者可以在不轉儲和重新加載資料的情況下将群集從無校驗和更改為校驗和。目前,在此更改期間,群集必須處于脫機狀态,但是正在開發聯機校驗和支援。
8.并發重新編制索引
索引并發功能已經存在多年,允許使用者建立索引而又不阻止寫入索引。重新索引不允許您在寫入資料庫時建立索引。同時使用reindex,通過在同一位置建立新索引來替換現有索引。同時使用Reindex可以寫入索引并保留原始索引名稱。顯然,當替換索引時,最小的鎖定将發生,直到實作替換為止。長期以來要求的功能很難開發,但最終在PostgreSQL 12中傳遞。
更新到PostgreSQL 12
這八個功能隻是PostgreSQL 12中許多改進中的幾個。從分區改進到公用表表達式的實作,PostgreSQL 12提供了顯着的可用性增強,将使許多新使用者和長期使用者滿意。
Postgres已成為資料庫領域的巨頭。根據2019年Stack Overflow對近90,000名開發人員的調查,Postgres的部署現在比SQL Server部署得更為普遍。
原文:https://www.enterprisedb.com/ko/blog/8-major-improvements-postgresql-12
本文:http://jiagoushi.pro/8-major-improvements-postgresql-12