在開放原始碼資料庫領域相當知名的PostgreSQL,全球開發團隊在5月底釋出16版第一個Beta測試版本,預先展示多種新特色,涵蓋效能、邏輯複寫(Logical Replication)功能強化、開發者體驗、安全性提升、監控與管理等層面。

後續經歷6月底發布Beta2版、8月中推出的Beta3版、8月底釋出候選版RC1,到了9月14日PostgreSQL 16正式版終於出爐!

新版上路最大賣點在於效能提升,可以大幅改善平行查詢、巨量資料載入、邏輯層面複製(logical replication)的應用,除此之外,這裡也提供更多SQL與JSON語法、新的工作負載監控狀態,同時能透過定義存取控制規則,以便針對多個大型群體的資料庫進行政策管理,從而獲得更多使用彈性。

就效能改善的特色而言,PostgreSQL 16新增查詢規畫最佳化調校機制,能夠顯著提升既有PostgreSQL的功能函式執行效率。實際上如何運作?這套資料庫系統配備的查詢規畫機制,能夠同時處理FULL與RIGHT的合併查詢(join),運用聚合(aggregate)函式搭配DISTINCT或ORDER BY子句,產生更理想的查詢計畫,也善用增量排序(incremental sorts)來處理SELECT DISTINCT查詢,並且將窗形函式(window functions)進行改良,以便提升執行效率。此外,這一版對於RIGHT、OUTER這類反連結(anti-joins)的查詢效率,也予以提升,使用者能透過這種敘述語句,要求系統列出不存在合併資料表中的資料列。

對於大量資料載入,PostgreSQL 16的效能增長更為具體。根據全球開發團隊的測試,若使用COPY敘述進行單一與並列的處理,在某些狀況下,效能改善幅度高達300%。

為何有如此驚人的成效?原因在於新版PostgreSQL對於使用libpq函式庫的個人端程式,增加負載平衡的支援,而且在用於資源回收、分析資料庫的VACUUM敘述進行改良,可減少資料庫因存取整張資料表而導致卡住的狀況。

關於這方面的改進,PostgreSQL商業版EnterpriseDB(EDB)的代理商歐立威科技,也在11月底的線上研討會揭露他們實測的Vacuum 效能控制差異,當中運用了新加入的參數 vacuum_buffer_usage_limit。

在硬體支援方面,PostgreSQL 16開始提供CPU加速功能,可運用x86與Arm架構都內建的單指令多資料(SIMD)技術,增加整體效能,基於這樣的機制,系統在處理ASCII與JSON字串,以及陣列、子交易(subtransaction)的搜尋時,均能獲得更理想的成效。

邏輯複製功能方面,PostgreSQL能讓用戶將資料流即時複製其他PostgreSQL執行個體,或是能夠解譯PostgreSQL邏輯複製協定的服務訂閱者,而在新版當中,用戶可從待命的資料庫執行個體執行邏輯複製,如此一來,這類執行個體也能將邏輯關係的異動發布到其他伺服器。而對於開發人員而言,若要進行分散工作負載,也能因此多出一種方法,不需麻煩長期處於忙碌狀態的主要執行個體,而是運用待命狀態的執行個體而非,來進行下游系統(downstream systems)的邏輯變更複製作業。

在過去至現行版本的PostgreSQL當中,使用者只能在主要的資料庫執行實例當中,建立邏輯複寫的發布者,到了第16版,將允許用戶也能在備援的資料庫執行實例當中,執行邏輯解碼,若要將工作負載分散執行,能有更多選擇,例如,在因應邏輯複寫變更的作業上,可運用較不忙碌的備援系統,而非只能仰賴主要系統來處理。

除此之外,訂閱者可運用多個平行的工作者(worker)執行大型交易,例如,針對未設置主鍵的資料表,訂閱者能使用二元樹(B-tree)索引,而毋須透過循序掃描的方式來尋找資料列,而在特定狀況下,使用者也能透過雙位元格式的採行,進而加快初始資料表的同步處理。

在邏輯複製的存取控制方面,PostgreSQL 16也提供多個改良特色,例如,增加預先定義的角色pg_create_subscription,可授權使用者建立新的邏輯訂閱;同時,新版也增添雙向邏輯複製功能的支援,以便從不同發布者的兩張資料表之間進行資料的複製。

在應用程式開發者的資料庫操作體驗方面,新版PostgreSQL在SQL/JSON當中增加更多語法,包含建構子與陳述方式,像是JSON_ARRAY()、JSON_ARRAYAGG(),以及IS JSON,也能使用底線來做為千分位分隔符號,例如5_432_000,以及非十進位的整數表示描述,像是0x1538、0o12470、0b1010100111000。

而在psql用戶端程式中也支援延伸查詢協定與增加指令,開發者可以執行「SELECT $1 + $2」這類查詢語句,並透過\bind執行帶有參數的查詢預先準備,也能以此來取代變數,例如「SELECT $1::int + $2::int \bind 1 2 \g」。

PostgreSQL也提供文字排序的規則,改善文字校對的支援。事實上,16版預設支援國際Unicode元件(ICU),能根據用戶環境決定預設的ICU所在國家地區,用戶可自定ICU校對規則。

關於資料庫效能調校,PostgreSQL 16新增pg_stat_io的觀點(view),可提供I/O狀態的資訊,有助於執行I/O存取模式的細緻分析,了解系統I/O作業帶來的影響。同時,新版也在pg_stat_all_tables的觀點增加欄位,可記錄資料表或索引最近一次被掃描的時間,對於auto_explain模組的使用,新版也透過記錄傳遞到參數化敘述的數值,促使其內容更容易理解,針對pg_stat_statements、pg_stat_activity這兩個功能,也改善查詢追蹤演算法的精確度。

就整套系統的供應形式而言,作為PostgreSQL商業軟體供應商的EDB,在11月初宣布正式支援第16版,範圍涵蓋旗下的資料庫版本,包含EDB Postgres Extended Server(PGE)、EDB Postgres Advanced Server(EPAS),以及延伸套件、工具。

在安全性方面,PGE、EPAS提供資料透明加密(Transparent Data Encryption,TDE),可選擇AES-128或AES-256等兩種加密等級,而EPAS 16額外提供權限分析(Privilege Analysis)的功能,用戶可追蹤與統計所有使用的權限,以及被批准卻未用於角色的權限,協助落實最低權限的原則,進而藉此對資料庫使用者移除過度授予的權限,避免有意或無意的資料存取與修改行為,並且更容易提供資料庫角色與權限的清單,方便稽核人員驗證。

兩大公有雲業者的資料庫服務近期也宣布支援PostgreSQL 16。例如,AWS在RC1推出當天,就開始在關聯式資料庫雲端服務預覽環境當中,提供Amazon RDS for PostgreSQL 16.0 RC1;而在新版正式發布隔天(9月15日),也預覽環境當中,提供Amazon RDS for PostgreSQL 16.0;

11月9日PostgreSQL 16.1發布,20日AWS宣布全面支援第16版,而且從16.1版開始供應。

微軟在10月底宣布資料庫服務Azure Cosmos DB for PostgreSQL支援PostgreSQL 16,既有的資料庫叢集可透過就地升級功能更新至這個版本。

11月中12月初,微軟也宣布Azure Database for PostgreSQL針對Flex Server的部署形式上,正式提供PostgreSQL 16。

產品資訊

PostgreSQL 16
●建議售價:
AWS Amazon RDS:db.t4g.micro亞太區域(東京)每小時0.025美元
Azure Database for PostgreSQL:單一伺服器1顆虛擬處理器搭配2 GiB記憶體,亞太地區每小時為0.065美元,儲存體每月每GiB為0.138美元
Azure Cosmos DB for PostgreSQL:單一節點1顆虛擬處理器搭配2 GiB記憶體,亞太地區每小時為0.030美元,單一節點儲存體每月128 GiB為22.144美元
●硬體環境需求:1 GHz處理器、2 GB記憶體、512 MB硬碟空間
●支援作業系統平臺:Windows Server(x86-64)、macOS(x86-64、Arm64)、Linux(x86-64、IBM Power)
●公有雲業者提供服務:AWS Amazon RDS、Azure Database for PostgreSQL、Azure Cosmos DB for PostgreSQL

【註:規格與價格由廠商提供,因時有異動,正確資訊請洽廠商】

熱門新聞

Advertisement