PolarDB PostgreSQL版(相容Oracle)2.0版本相較於1.0版本,基於全新的相容性架構,以相容Oracle文法為開發基準。2.0版本在分布式負載條件下的高並發、高寫入負載、並行查詢及邏輯複製等效能方面,相較於1.0版本,獲得了顯著提升。本文將詳細描述兩個版本之間的具體區別,供您參考。請以目前發布的PolarDB PostgreSQL版(相容Oracle)2.0版本(20250630)為準,部分特性將在後續版本中逐步支援。
效能顯著提升
使用pgbench進行唯讀情境(select-only)與讀寫情境(tpcb-like)的效能測試,採用的叢集規格為polar.o.x8.xlarge,測試資料如下:
情境 | PolarDB PostgreSQL版(相容Oracle)1.0版本 | PolarDB PostgreSQL版(相容Oracle)2.0版本 | 效能提升 |
唯讀情境(select-only) | 109141.30 | 120803.95 | 10.69% |
讀寫情境(tpcb-like) | 49226.71 | 64752.41 | 31.54% |
PolarDB PostgreSQL版(相容Oracle)2.0版本相比於1.0版本在效能方面有了顯著的提升,特別是在tpcb-like的讀寫情境壓力下,效能提升了超過30%。此外,在存在大量串連的情境下,PolarDB PostgreSQL版(相容Oracle)2.0版本大幅提高了事務輸送量,在測試情境下最高可提升1倍。
為了進一步提高效能,2.0版本增加了許多並行查詢功能。例如,PL/pgSQL函數內的RETURN QUERY返回結果時支援QUERY的並行計算,REFRESH MATERIALIZED VIEW命令也可以使用並行查詢。此外,支援並行順序掃描chunk,提高大範圍資料掃描的IO吞吐,使其接近塊裝置的IO吞吐極限。
索引增強
PolarDB PostgreSQL版(相容Oracle)2.0版本在處理B樹索引(標準資料庫索引)中的重複資料方面進行了有效最佳化,從而降低了B樹索引的總體空間使用量,同時提高了總體查詢效能。具體而言,該版本通過引入去重技術的索引壓縮策略,可以自動去重並壓縮B樹索引中的重複資料,從而減少索引佔用的空間。同時,2.0版本還解決了B-樹索引的資源消耗問題,包括頻繁更新索引導致的表膨脹問題。
此外,該版本還提供了GiST索引,在構建過程中預先排序資料,從而可以大幅提高GiST和SP-GiST索引的建立速度,並減少索引的大小。
分區表提升
PolarDB PostgreSQL版(相容Oracle)2.0版本通過改進分區系統,使得使用分區表進行查詢時獲得了更好的效能提升。現在,您可以使用更靈活的分區裁剪和智能JOIN。此外,該版本還增強了對於觸發器的支援,同時增加了邏輯複製的支援,使得資料複製和同步更加高效可靠。
此外,2.0版本最佳化了分區裁剪能力,減少了子分區SubPlan和重複的cached plans,從而可以更快地執行查詢操作。同時,在增減分區時使用alter table detach|attach PARTITION concurrently模式,避免了鎖衝突,提高了資料庫的可用性和穩定性。
並行VACUUM(記憶體回收)
ACUUM機制在PolarDB PostgreSQL版(相容Oracle)2.0版本的資料庫管理中非常重要,能夠釋放掉已經不再使用的資料表空間,以緩解常見的表膨脹問題。為了進一步最佳化記憶體回收的效率和效能,2.0版本引入了並行的索引回收機制。此外,您還可以自行指定並行工作者的數量,以便更好地滿足需求。
通過這些最佳化措施,PolarDB PostgreSQL版(相容Oracle)2.0版本的資料庫管理具備更高的效率、可靠性和穩定性,使得您可以更加輕鬆地進行資料管理和維護工作。
查詢最佳化
引入了增量排序,其中查詢中較早步驟的排序資料可以加速後續步驟的排序。這一最佳化措施可以顯著提高查詢的效能和效率。
增加了更多類型的彙總和分組集查詢,能夠利用PostgreSQL高效的雜湊彙總功能。這意味著具有大型彙總的查詢不必完全裝入記憶體,從而大幅降低記憶體使用量和I/O開銷。
支援
linear search TO hash table probe,可以顯著提升IN語句的處理效能。特別是在多條件或需要過濾大量資料的SQL中,效能提升更為顯著。
支援LZ4壓縮演算法及安全特性增強
PolarDB PostgreSQL版(相容Oracle)2.0版本引入了多項新功能,包括支援您選擇LZ4演算法進行資料列壓縮,以提高壓縮效能,同時仍保留對原來pglz壓縮方式的支援。此外,還可以通過使用pg_read_all_data和pg_write_all_data兩個預定義的角色,實現一次性授權tables/views/sequences對象的唯讀或唯寫許可權,為您提供更加靈活的資料管理方式。
2.0版本採用了對象許可權粒度的雲上許可權管理,保障資料安全性和可靠性。這一最佳化措施可以協助使用者更好地保護敏感性資料,避免資料泄露和安全性漏洞。
核心功能特性
資料類型相容性
函數與操作符相容性
SQL文法相容性
DDL文法相容性
分區表功能
交易處理能力
觸發器功能
支援DDL系統觸發器,便於處理DDL操作相關觸發器。
支援
ALTER TRIGGER ENABLE/DISABLE管理系統觸發器,便於控制觸發器的行為。支援
Schema/Database層級的DDL系統觸發器,便於處理相應層級的DDL操作。支援觸發器子函數調用
updating('col')文法,便於處理複雜的觸發器邏輯。
PL/SQL編程支援
包(Package)功能
支援自訂包功能的建立和刪除。
支援常見的關聯陣列、巢狀表格、可變長的數組等集合類型。
支援集合類型的基本初始化、調用、賦值等操作。
支援包中一維
SUBTYPE,擴充包的資料模型支援。包中
record支援constraint,確保資料完整性。支援包忽略大小寫訪問。
支援包函數依賴後續定義的類型。
支援包函數預存程序忽略預設值。
支援使用包變數指定包函數參數類型。
支援包變數作為預存程序變數和子函數參數預設值。
集合類型支援
支援使用關聯陣列作為參數和傳回值,便於處理複雜的資料結構。
支援變長資料等價聲明,簡化集合類型空間管理邏輯。
支援集合類型範圍刪除。
支援內建包內建關聯陣列。
支援三維關聯陣列,擴充了集合類型的功能。
支援關聯陣列元素為二維
record,增強複合類型表達,且支援與record嵌套。支援
fetch bulk into至coll(idx).recfield集合類型,最佳化DML執行效率。支援在DML語句中使用高維集合類型。
支援集合類型的函數參數預設值。
支援關聯陣列構造器。
支援集合類型的轉換操作和集合操作。
內建包生態
PolarDB PostgreSQL版(相容Oracle)2.0版本提供了豐富的Oracle相容內建包,涵蓋了企業級應用的各個方面:
DBMS_AQ:提供訊息佇列入隊、出隊操作的函數。
DBMS_AQADM:提供訊息佇列的配置和管理功能。
DBMS_ALERT:提供一組預存程序,用於註冊警報、發送警報和接收警報。
DBMS_APPLICATION_INFO:記錄資料庫中正在執行的模組或事務的名稱,用於效能跟蹤和調試。
DBMS_CRYPTO:提供對儲存資料進行加密、解密的功能,支援AES、DES、雜湊以及訊息摘要等功能。
DBMS_DDL:便於處理DDL相關的操作。
DBMS_JOB:用來建立和管理定時任務,使用者可以提交定時任務在資料庫中定時執行。
DBMS_LOB:提供對大對象的訪問和操作方式,包括
BLOB和CLOB等。DBMS_LOCK:提供將當前會話暫停一段時間的
SLEEP內建函數。DBMS_METADATA:提供擷取資料庫物件的中繼資料資訊的方法,用於重建資料庫中的對象。
DBMS_MVIEW:支援在
REFRESH時不包含依賴的對象。DBMS_OUTPUT:可以從預存程序、包或觸發器發送資訊。
DBMS_XMLGEN:提供
convert函數,便於處理XML資料轉換。DBMS_XMLPARSER:提供對XML文檔的解析方法,可以用於產生Document對象。
DBMS_PIPE:支援同一常式在不同會話之間進行管道通訊。
DBMS_RANDOM:提供一系列隨機函數、預存程序。
DBMS_REDACT:提供對低許可權使用者或應用查詢的資料進行脫敏處理的函數,保護資料庫資料安全。
DBMS_RLS:可以使虛擬私人資料庫VPD執行於特定的PolarDB資料庫物件上。
DBMS_SESSION:提供從PL/SQL訪問會話、使用者以及其他資訊的介面。
DBMS_SPACE:便於處理空間管理相關的操作。
DBMS_SQL:提供使用動態SQL執行DML和DDL語句、執行PL/SQL匿名塊以及調用PL/SQL預存程序和函數的介面。
DBMS_TRANSACTION:用於處理事務相關的操作。
DBMS_UTILITY:提供各種實用子程式、包擷取依賴。
DBMS_XMLDOM:提供對XML文檔的DOM提供者,支援定義以及產生多種DOM對象。
UTL_ENCODE:提供一組進行資料編解碼的函數,方便資料在不同主機之間的傳輸。
UTL_I18N:提供
ESCAPE_REFERENCE和UNESCAPE_REFERENCE函數組成的服務,為PL/SQL編寫的應用程式提供附加的全球化功能。UTL_MATCH:增強字串模式比對功能,簡化文本操作流程。
UTL_HTTP:拓展Web互動功能。
UTL_RAW:提供用於操作RAW類型資料的函數。
UTL_TCP:強化TCP通訊功能,擴充網路傳輸情境。
UTL_URL:提供轉換URL中的非法字元和保留字元的方法。
系統檢視表相容性
支援
ALL_PART_KEY_COLUMNS、USER_PART_KEY_COLUMNS、DBA_PART_KEY_COLUMNS、DBA_ROLE_PRIVS、USER_ROLE_PRIVS等Oracle常用的視圖。支援
DBA_COL_COMMENTS視圖,用於查看和管理列注釋資訊。支援
nls參數視圖,擴充國際化參數的支援,增強多語言組態管理。支援全參數的
DBA_TAB_COLUMNS視圖,提供更全面的表列資訊。支援
SESSION_ROLE內建視圖,擴充會話角色管理的功能。支援
USER_TAB_PARTITIONS視圖HIGH_VALUE欄位,最佳化分區表高值管理。支援
DBA_OBJECTS視圖CREATED欄位,用於查看對象的建立時間。
其他進階功能特性
文法相容性差異說明
PolarDB PostgreSQL版(相容Oracle)2.0版本相較於1.0版本,存在以下差異:
類型 | 說明 |
資料類型 | 不支援 |
DDL文法 |
|
視圖和分區表 |
|
函數、預存程序及觸發器 |
|
事務 | 如果自治事務中發生了寫操作,必須顯式提交或復原事務來結束,否則事務會失敗。 |
SQL查詢 |
|
包 |
|
PL/SQL及集合類型 |
|