PostgreSQL是一款功能強大的開來源資料庫。今年9月,官方發布了PostgreSQL 17.0版本,在效能、邏輯複製、開發人員體驗、監控、許可權&安全等多個方面進行了重要的改進和最佳化。阿里雲RDS PostgreSQL已全面支援PostgreSQL 17.0版本。同時,RDS PostgreSQL在社區版17.0的基礎上,在安全性、成本效益、可營運性等多個方面進行了增強,並新增了多種核心與外掛程式特性,以滿足使用者特定業務情境的需求。
上線時間
2024年10月17日
功能簡介
社區PostgreSQL 17的主要亮點
官方發布的PostgreSQL 17.0在效能、邏輯複製、開發人員體驗、監控、許可權&安全等方面進行了改進和最佳化。
效能
VACUUM
使用了新的資料結構tid store(內部實現為radix tree)記錄死元組,從而提升了VACUUM的效率並降低了記憶體消耗。
解除VACUUM 1GB記憶體使用量上限。當清理包含索引的表時,VACUUM會將死元組記錄在記憶體中,記憶體受限時會觸發對索引檔案的掃描。因此,提升VACUUM的記憶體使用量上限,可以減少對索引檔案的掃描次數,從而加速VACUUM過程並節約IO資源。
WAL
最佳化了WAL鎖的管理方式,提升了高並發修改的效能。
最佳化器
可以同時利用統計資訊和WITH查詢進行更深入的最佳化。
當IN從句中能夠使用B樹索引時,查詢速度會顯著提升。
對於具有NOT NULL約束的欄位,系統可以自動去除冗餘的IS NOT NULL語句。
邏輯複製
支援邏輯複製槽的容錯移轉功能。
從PostgreSQL 17升級至更高版本時,可保留邏輯複製槽。
新增二進位工具
pg_createsubscriber,可以將兩個物理複製的執行個體轉化為邏輯複製。提升大量子事務情境下邏輯解碼的效能。
監控
新增視圖
pg_stat_checkpointer,旨在提供有關checkpoint的統計資訊,以便更有效地監控checkpoint的頻率及其資源消耗。新增視圖
pg_wait_events,提供了等待事件的原因。EXPLAIN可以輸出最佳化器的記憶體消耗情況。
許可權&安全
新增表級許可權
MAINTAIN,並保留了使用者pg_maintain,以便對錶的VACUUM、REINDEX等操作進行許可權控制。新增參數
sslnegotiation,以實現直接執行TLS握手,從而消除了網路往返延遲。
開發人員體驗
更為完善的JSON支援。
新增函數
JSON_TABLE(),該函數能夠在SQL語句中將JSON資料轉換為一個表。新增JSON構建函數
JSON()、JSON_SCALAR()和JSON_SERIALIZE()。新增JSON查詢函數
JSON_EXISTS()、JSON_QUERY()和JSON_VALUE()。
提供函數
pg_column_toast_chunk_id()用於擷取指定TOAST的Chunk ID。
為什麼選擇使用RDS PostgreSQL 17
RDS PostgreSQL完全相容社區版PostgreSQL,採用雲原生架構,經過軟硬體協調最佳化,為使用者提供穩定可靠的高性價比資料庫服務。同時,憑藉豐富的外掛程式擴充,RDS PostgreSQL能夠支援各領域的情境化業務需求。
RDS PostgreSQL全面支援社區版PostgreSQL 17,自主研發的功能將持續相容PostgreSQL 17。同時,RDS PostgreSQL還引入了多項自主研發的核心特性,以增強社區版本,滿足使用者在特定業務情境中的需求。
成本
(新功能)高效能雲端硬碟資料歸檔
RDS PostgreSQL執行個體利用資料表空間和外部檔案系統來實現對OSS的訪問,允許使用者通過DDL完成資料在ESSD和OSS之間的轉換。開啟RDS PostgreSQL資料歸檔功能後,利用OSS的海量、安全、低成本和高可靠特性,使用者可以在RDS PostgreSQL上實現極低成本、無限容量的歸檔資料存放區,並支援低頻資料訪問。相較於ESSD PL1雲端硬碟,資料存放區成本下降了80%。詳情請參見資料歸檔。
適用情境:執行個體中存在大量不常訪問的資料。
資料表空間層級的透明頁壓縮TPC(Transparent Page Compression)
頁壓縮是指對Buffer Pool中的頁執行即時的I/O壓縮和解壓縮,透明是指使用過程中無感知,資料在寫入磁碟時自動壓縮,資料在從磁碟讀取時自動解壓縮。透明頁壓縮的主要目標是減少儲存空間的使用,並提高資料庫的讀效能。通過壓縮資料,可以降低磁碟I/O,減少儲存,提高緩衝效率,並加快資料轉送速度。
透明頁壓縮的優勢:儲存成本平均可節約50%,IO使用平均可節約50%,在讀情境TPS會有提高,最高可提升100%。詳情請參見透明頁壓縮TPC。
適用情境:執行個體資料量較大,業務情境以讀取為主。
AP能力
(新功能)高效能OLAP引擎rds_duckdb
rds_duckdb在RDS PostgreSQL中引入了高效、資源友好的DuckDB,以增強分析型查詢能力。該外掛程式可以將RDS PostgreSQL中的本地表匯出為列存表,並啟用分析型查詢加速(Analytical Processing Query Acceleration,簡稱AP)功能,顯著提升了複雜查詢的執行速度。啟用該外掛程式後,使用者可以在RDS PostgreSQL上實現高效的分析查詢,效能提升可高達幾十倍。詳情請參見AP加速引擎(rds_duckdb)。
適用情境:複雜分析型查詢加速情境。
安全
表層級的透明資料加密(TDE)
所有加密解密操作均在記憶體中進行,記憶體中的資料是明文,磁碟中的資料是密文。這一措施有效防止了因磁碟被盜而導致的資料泄露問題,同時資料庫的使用方式保持不變,無需額外的適配成本。更細粒度的加密能夠在確保安全的前提下盡量降低因加密和解密所帶來的效能損耗,並且支援開啟預設加密選項。詳情請參見透明資料加密TDE。
適用情境:需要對資料實施加密措施,或滿足特定的安全合規要求。
營運
緩衝淘汰功能
解決了多表情境下原生PostgreSQL長串連佔用過多記憶體的問題。PostgreSQL中,後端進程每次訪問一個表時,會將該表的元資訊緩衝到本地,並且這些緩衝不會被主動釋放,以減少後續對磁碟的訪問。這導致長串連可能會積累大量緩衝,從而引發記憶體溢出(OOM)。詳情請參見緩衝淘汰。
適用情境:具有大量長串連的SaaS情境。
SQL限流功能
通過限制並發SQL數,從而避免過高的資料庫負載,保證資料庫的穩定性和可靠性。詳情請參見SQL限流(rds_ccl)。
適用情境:高並發訪問,防止惡意攻擊,控制資源使用等。
自研/第三方外掛程式
除此之外,RDS PostgreSQL還支援多種自研、第三方外掛程式,為使用者提供豐富的擴充功能,詳情請參見支援外掛程式列表。例如:
pgvector向量外掛程式(三方開源):能夠儲存向量類型資料,並實現向量相似性匹配,為AI產品提供底層資料支援。
Ganos時空引擎(自研):PostgreSQL Ganos時空引擎提供了一系列資料類型、函數和預存程序,使使用者能夠在阿里雲RDS PostgreSQL中對空間/時空資料進行高效地儲存、索引、查詢和分析計算。
全密態資料庫(自研):使用者可對資料庫表中的敏感性資料列進行加密,這些列中的敏感性資料將以密文形式進行傳輸、計算和儲存。全密態資料庫能夠有效解決使用者在不同應用情境下的資料安全問題,例如平台安全營運、敏感性資料合規及多來源資料融合等情況。
index_adviser索引推薦(自研):可以協助使用者確定應該對哪些列編製索引,以提高指定工作負載中的效能。能夠協助使用者識別應在哪些列上建立索引,以提升特定工作負載的效能。
oss_fdw讀寫外部資料文字檔(自研):支援將OSS中的資料載入到RDS PostgreSQL資料庫中,也支援將RDS PostgreSQL資料庫中的資料寫入OSS。
pgbouncer輕量級串連池(三方開源):用於最佳化資料庫連接的效能和資源使用率。當應用程式需要與PostgreSQL資料庫建立串連時,它可以通過串連池複用現有的資料庫連接,避免了頻繁地建立和銷毀串連產生的效能開銷。這種串連複用可以顯著減少資料庫伺服器的負載,提高應用程式的響應速度和並發效能。適用於短串連較多,頻繁建立和銷毀串連的情境。
pg_jieba中文分詞外掛程式(三方開源基礎上加入自研功能):用於中文的全文檢索搜尋,支援自訂詞庫。
使用RDS PostgreSQL 17
升級原執行個體到RDS PostgreSQL 17
為助力使用者順利升級至17版本,RDS PostgreSQL提供了全面的大版本升級功能,主要包括藍綠部署和本地升級兩種模式。
藍綠部署模式,既可以使用不割接的方式,在不影響原執行個體的情況下驗證整個升級流程;同時,也可以採用割接的方式,在大版本升級期間實現無需停機,並在升級完成後自動交換原執行個體與新執行個體的串連地址,確保業務側無感知。
本地升級方式,不會建立新版本執行個體,升級後繼承原有的訂單、執行個體名稱、標籤、參數配置、付費模式、CloudMonitor警示規則及備份規則等。
詳情請參見升級資料庫大版本。
全新建立RDS PostgreSQL 17執行個體
詳情請參見建立RDS PostgreSQL執行個體。