PostgreSQL 12 正式發布性能與功能全面提升
PostgreSQL 12已經發布,該版本在各方面都得到了加強,包括顯著地提升查詢性能,特別是對大數據集,總的空間利用率方面。這個版本為應用程序開發人員提供了更多的功能,比如對SQL/JSON路徑表達式的支持,優化公共表達式(WITH
查詢)的執行,以及對生成列的支持等。
PostgreSQL 除了持續對PostgreSQL 系統的可擴展性、穩健性進行開發外,還更多地在本地化、授權控制以及更加容易的管理進行增強。這個版本也引入了可插撥的表存取接口,來允許開發者在表的創建和使用時使用不同的存取方式。具體如下:
全面的性能提升
PostgreSQL 12版本在性能和易維護性方面有了顯著的增強,尤其是對索引和分區子系統。
PostgreSQL 12 對標準索引類型B樹索引進行了優化,以使其可以可以更好地處理索引更新頻率較高類型的負載的的總體性能,使用最常使用的TPC-C 性能測試,PostgreSQL 12 平均可以提升約40% 的空間利用率和查詢性能。
對分區表的查詢也得到了較大改進,特別是對那些有數千個分區的表,而結果只需從幾個有限的分區提取數據的查詢。PostgreSQL 12對通過INSERT和COPY
指令將數據加入分區表的操作,也有加強,包括現在可以在不阻塞查詢的情況下增加新的分區。
另外,PostgreSQL 12對索引的優化也提升了總體的性能,包括生成GiST、GIN或SP-GiST索引的WAL日誌的負載顯著減少,在GiST類型索引上創建INCLUDE
選項的包含索引,SP-GiST索引現在支持<->距離操作的K-NN(即相鄰最近)查詢,以及CREATE STATISTICS
指令現在支持最常用值MCV的統計來幫助那些字段值非均勻分佈的查詢生成更優化的查詢計劃。
通過使用LLVM,從PostgreSQL 11 版引入的JIT 即時編譯,在PostgreSQL 12 中缺省已是啟用狀態,JIT 即時編譯對帶有WHERE 條件、對象列表、 聚合以及一些內部操作都會提供性能上的幫助。當然,用戶在安裝或是編譯時需要包含LLVM 模塊。
對SQL 標準一致性和功能的增強
PostgreSQL 一直以來以其對SQL 標準符合性而著稱,這也是其名稱由POSTGRES 改為PostgreSQL 的一個小原因。PostgreSQL 12 又增加了幾個新特性來持續實現對SQL 標準的符合性的強化。
PostgreSQL 12 加入了對JSON 文檔進行查詢時使用JSON 路徑表達式的功能,這也是SQL/JSON 中定義的規範。對使用JSONB 格式保存的文檔,這些查詢可以利用已有的索引機制來高效地提取數據。
公共表達式,也稱之為WITH 查詢,在PostgreSQL 12 中可以實現非物化操作處理,這對很多現在已有的查詢有很大幫助。目前在這個版本中,WITH 查詢的前提條件是非遞歸查詢並且僅可被外層查詢引用一次。
PostgreSQL 12 也引入了“生成列”功能,這也是SQL 標準中的要求,這些字段值是通過同一表中其它列計算而來的。在這一版本中,PostgreSQL 支持“保存生成列值”的功能,即將這些計算出來的數據存儲在磁盤上。
本地化
PostgreSQL 12 擴充了對ICU 排序規則的支持,允許用戶自行定義非標準的排序方式,比如允許大小寫不敏感或是按口音不敏感的比較規則。
授權控制
PostgreSQL通過再次擴展了一些的安全方面的功能來強化了它本來就很穩健的權限控制。這個版本中通過GSSAPI接口支持客戶端和服務端的雙向加密,如果在編譯時加入OpenLDAP模塊,PostgreSQL也支持搜索LDAP 服務器的功能。
另外,PostgreSQL 12現在支持多約束的授權方式。如在使用scram-sha-256
的授權方式,PostgreSQL服務器現在可以強制一個客戶端在提供用戶名、使用clientcert=verify-full
選項,再必須提供有效的SSL證書的方式來強化安全授權。
系統管理
PostgreSQL 12的REINDEX CONCURRENTLY
指令可以在不影響新的索引寫入的前提下讓用戶執行重那建索引操作,這有助於用戶實現不停機對較大索引的重建。
還有,PostgreSQL 12通過使用pg_checksums
指令對停機的PostgreSQL來開啟或關閉頁校驗功能,該功能有助於檢查已寫入磁盤的數據一致性,而以前版本中該操作僅允許在 initdb
的階段來執行。
發佈公告: