PolarDB PostgreSQL(兼容Oracle)2.0版本商業(yè)化公告
PolarDB PostgreSQL版(兼容Oracle)2.0版本正式商業(yè)化。
公測(cè)結(jié)束時(shí)間
2023年6月30日
正式版發(fā)布時(shí)間
2023年7月5日
計(jì)費(fèi)說(shuō)明
全面支持包年包月和按量付費(fèi)兩種計(jì)費(fèi)模式。計(jì)費(fèi)詳情請(qǐng)參見(jiàn)產(chǎn)品計(jì)費(fèi)。
產(chǎn)品優(yōu)勢(shì)
PolarDB PostgreSQL版(兼容Oracle)2.0版本對(duì)PostgreSQL在分布式負(fù)載前提下的高并發(fā)、高寫入負(fù)載、并行查詢和邏輯復(fù)制等方面的性能相比于PolarDB PostgreSQL版(兼容Oracle)1.0版本有了進(jìn)一步提升。PolarDB PostgreSQL版(兼容Oracle)2.0版本的主要提升如下:
性能顯著提升
使用pgbench進(jìn)行只讀場(chǎng)景(select-only)與讀寫場(chǎng)景(tpcb-like)的性能測(cè)試,采用的集群規(guī)格為polar.o.x8.xlarge,測(cè)試數(shù)據(jù)如下:
場(chǎng)景 | PolarDB PostgreSQL版(兼容Oracle)1.0版本 | PolarDB PostgreSQL版(兼容Oracle)2.0版本 | 性能提升 |
只讀場(chǎng)景(select-only) | 109141.30 | 120803.95 | 10.69% |
讀寫場(chǎng)景(tpcb-like) | 49226.71 | 64752.41 | 31.54% |
性能測(cè)試中的參數(shù)均保持一致,其中參數(shù)polar_enable_stmt_transaction_rollback
與polar_default_with_rowid
設(shè)置為off
,其余參數(shù)使用默認(rèn)值。
PolarDB PostgreSQL版(兼容Oracle)2.0版本相比于PolarDB PostgreSQL版(兼容Oracle)1.0版本在性能方面有了顯著的提升,特別是在tpcb-like的讀寫場(chǎng)景壓力下,性能提升了超過(guò)30%。此外,在存在大量連接的場(chǎng)景下,PolarDB PostgreSQL版(兼容Oracle)2.0版本大幅提高了事務(wù)吞吐量,在測(cè)試場(chǎng)景下最高可提升1倍。
為了進(jìn)一步提高性能,PolarDB PostgreSQL版(兼容Oracle)2.0版本增加了許多并行查詢功能。例如,PL/pgSQL函數(shù)內(nèi)的RETURN QUERY
返回結(jié)果時(shí)支持QUERY的并行計(jì)算,REFRESH MATERIALIZED VIEW
命令也可以使用并行查詢。此外,支持并行順序掃描chunk,提高大范圍數(shù)據(jù)掃描的IO吞吐,使其接近塊設(shè)備的IO吞吐極限。
索引增強(qiáng)
PolarDB PostgreSQL版(兼容Oracle)2.0版本在處理B樹(shù)索引(標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)索引)中的重復(fù)數(shù)據(jù)方面進(jìn)行了有效優(yōu)化,從而降低了B樹(shù)索引的總體空間使用量,同時(shí)提高了總體查詢性能。具體而言,該版本通過(guò)引入去重技術(shù)的索引壓縮策略,可以自動(dòng)去重并壓縮B樹(shù)索引中的重復(fù)數(shù)據(jù),從而減少索引占用的空間。同時(shí),PolarDB PostgreSQL版(兼容Oracle)2.0版本還解決了B-樹(shù)索引的資源消耗問(wèn)題,包括頻繁更新索引導(dǎo)致的表膨脹問(wèn)題。此外,該版本還提供了GiST索引,在構(gòu)建過(guò)程中預(yù)先排序數(shù)據(jù),從而可以大幅提高GiST和SP-GiST索引的創(chuàng)建速度,并減少索引的大小。
分區(qū)表提升
PolarDB PostgreSQL版(兼容Oracle)2.0版本通過(guò)改進(jìn)分區(qū)系統(tǒng),使得使用分區(qū)表進(jìn)行查詢時(shí)獲得了更好的性能提升。現(xiàn)在,用戶可以使用更靈活的分區(qū)裁剪和智能join。此外,該版本還增強(qiáng)了對(duì)于觸發(fā)器的支持,同時(shí)增加了邏輯復(fù)制的支持,使得數(shù)據(jù)復(fù)制和同步更加高效可靠。
此外,PolarDB PostgreSQL版(兼容Oracle)2.0版本優(yōu)化了分區(qū)裁剪能力,減少了子分區(qū)subplan和重復(fù)的cached plans,從而可以更快地執(zhí)行查詢操作。同時(shí),在增減分區(qū)時(shí)使用alter table detach|attach PARTITION concurrently
模式,避免了鎖沖突,提高了數(shù)據(jù)庫(kù)的可用性和穩(wěn)定性。
并行VACUUM(垃圾回收)
VACUUM機(jī)制在PolarDB PostgreSQL版(兼容Oracle)2.0版本的數(shù)據(jù)庫(kù)管理中非常重要,能夠釋放掉已經(jīng)不再使用的表空間,以緩解常見(jiàn)的表膨脹問(wèn)題。為了進(jìn)一步優(yōu)化垃圾回收的效率和性能,PolarDB PostgreSQL版(兼容Oracle)2.0版本引入了并行的索引回收機(jī)制。此外,用戶還可以自行指定并行工作者的數(shù)量,以便更好地滿足需求。
通過(guò)這些優(yōu)化措施,PolarDB PostgreSQL版(兼容Oracle)2.0版本的數(shù)據(jù)庫(kù)管理具備更高的效率、可靠性和穩(wěn)定性,使得用戶可以更加輕松地進(jìn)行數(shù)據(jù)管理和維護(hù)工作。
查詢優(yōu)化
PolarDB PostgreSQL版(兼容Oracle)2.0版本引入了增量排序,其中查詢中較早步驟的排序數(shù)據(jù)可以加速后續(xù)步驟的排序。這一優(yōu)化措施可以顯著提高查詢的性能和效率。
PolarDB PostgreSQL版(兼容Oracle)2.0版本還增加了更多類型的聚合和分組集查詢,能夠利用PostgreSQL高效的哈希聚合功能。這意味著具有大型聚合的查詢不必完全裝入內(nèi)存,從而大幅降低內(nèi)存使用和I/O開(kāi)銷。
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持linear search TO hash table probe
,可以顯著提升IN語(yǔ)句的處理性能。特別是在多條件或需要過(guò)濾大量數(shù)據(jù)的SQL中,性能提升更為顯著。
支持LZ4壓縮算法及安全特性增強(qiáng)
PolarDB PostgreSQL版(兼容Oracle)2.0版本引入了多項(xiàng)新功能,包括支持用戶選擇LZ4算法進(jìn)行數(shù)據(jù)列壓縮,以提高壓縮性能,同時(shí)仍保留對(duì)原來(lái)pglz壓縮方式的支持。此外,用戶還可以通過(guò)使用pg_read_all_data
和pg_write_all_data
兩個(gè)預(yù)定義的角色,實(shí)現(xiàn)一次性授權(quán)tables/views/sequences對(duì)象的只讀或只寫權(quán)限,為用戶提供更加靈活的數(shù)據(jù)管理方式。
PolarDB PostgreSQL版(兼容Oracle)2.0版本采用了對(duì)象權(quán)限粒度的云上權(quán)限管理,保障數(shù)據(jù)安全性和可靠性。這一優(yōu)化措施可以幫助用戶更好地保護(hù)敏感數(shù)據(jù),避免數(shù)據(jù)泄露和安全漏洞。
主要功能
PolarDB PostgreSQL版(兼容Oracle)2.0版本高度兼容Oracle語(yǔ)法,支持Oracle常見(jiàn)語(yǔ)法特性以及分區(qū)表、事務(wù)能力、PL/SQL、包、異構(gòu)連接等重要功能,并且進(jìn)一步提升了高并發(fā)、高寫入負(fù)載、并行查詢和邏輯復(fù)制等方面的性能。
PolarDB PostgreSQL版(兼容Oracle)2.0版本主要的Oracle兼容性功能如下:
支持Oracle兼容的字符串類型、數(shù)字類型、二進(jìn)制類型、支持64位的Date類型存儲(chǔ)
PolarDB PostgreSQL版(兼容Oracle)2.0版本擴(kuò)展支持64位的Date類型存儲(chǔ),支持Oracle兼容的年、月、日、時(shí)、分、秒級(jí)別的Date類型存儲(chǔ)及展示。支持char/varchar2/nvarchar2/nvarchar/binary_integer/number/row/rowid等類型,支持nls_date_format、nls_timestamp_format來(lái)控制時(shí)間類型的輸出格式。
支持Oracle兼容的一系列操作符
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持decode
、group_id
操作符;支持聚合函數(shù)中的order by
操作符;支持在內(nèi)置二元操作符中間添加空格;支持minus
集合操作符、支持a.b
形式的函數(shù)不帶括號(hào)調(diào)用;支持空串視為NULL。
支持Oracle兼容的字符串函數(shù)、數(shù)字函數(shù)、二進(jìn)制函數(shù)、正則函數(shù)、采樣函數(shù)、聚合函數(shù)
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持to_date/add_month
等一系列時(shí)間類型內(nèi)置的函數(shù);支持instr/lpad/rpad
等一系列字符串內(nèi)置函數(shù);支持rawtohex/hextoraw/vsize
等一系列二進(jìn)制相關(guān)函數(shù);支持sys_guid
等編碼內(nèi)置函數(shù);支持sample function
等采樣函數(shù);支持regexp_count/regex_instr/regex_substr/regex_like
等一系列正則函數(shù)。支持Oracle兼容風(fēng)格的聚合函數(shù)創(chuàng)建。
支持Oracle兼容的別名、列名、子句、視圖
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持在不同層級(jí)的子查詢中使用相同別名、支持表名、列名稱大小寫兼容、支持關(guān)鍵字別名全兼容;insert/select
的語(yǔ)法結(jié)構(gòu)中支持使用別名;支持目標(biāo)列中默認(rèn)的distinct
、order by
子句;支持order by
子句中的count(*)
聚集函數(shù);支持merge
子句中update/delete
語(yǔ)法與where
并聯(lián)使用;支持insert/update
后跟形如namespace.table.col
語(yǔ)法;支持(+)
表連接操作符。
支持ALL_PART_KEY_COLUMNS/USER_PART_KEY_COLUMNS/DBA_PART_KEY_COLUMNS/DBA_ROLE_PRIVS/USER_ROLE_PRIVS
等Oracle常用的視圖。
支持Oracle兼容的偽列、序列、DML、DDL等相關(guān)語(yǔ)法特性
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持rownum
語(yǔ)法來(lái)標(biāo)志查詢結(jié)果中的行號(hào);支持全局唯一的序列;支持select/delete/update
作用于子查詢的語(yǔ)法;支持select for update wait
語(yǔ)法;支持merge into
語(yǔ)法在視圖中使用;支持基本的HINT
語(yǔ)法;支持Rename To
語(yǔ)法;支持alter table add (col1, col2)
語(yǔ)法;支持create directory
語(yǔ)法;支持create context
語(yǔ)法;支持connect by
子句在執(zhí)行分層查詢時(shí)確定行的父子關(guān)系。
支持Oracle兼容的分區(qū)表創(chuàng)建、修改、擴(kuò)展功能
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持Oracle風(fēng)格的分區(qū)表,包括一級(jí)、二級(jí)分區(qū)的創(chuàng)建,支持List、Range、Hash三種分區(qū)的創(chuàng)建。支持常見(jiàn)的CREATE、COALESCE、DROP、EXCHANGE、MERGE、MODIFY、MOVE、RENAME、SPLIT、TRUNCATE等分區(qū)管理操作。支持分區(qū)表子模板分區(qū)、支持間隔分區(qū)自動(dòng)創(chuàng)建、支持Oracle兼容的如同A PARTITION(B)
的分區(qū)調(diào)用。
數(shù)據(jù)庫(kù)事務(wù)CSN事務(wù)快照機(jī)制、支持自治事務(wù)、支持語(yǔ)句級(jí)別事務(wù)回滾
PolarDB PostgreSQL版(兼容Oracle)2.0版本中CSN事務(wù)快照是一種新的事務(wù)快照機(jī)制,用于提升MVCC性能,與原生PostgreSQL使用xid事務(wù)號(hào)列表作為事務(wù)快照不同,CSN快照使用一個(gè)單調(diào)遞增的64位整數(shù)值作為事務(wù)快照,既可以加速事務(wù)快照生成,也可以提升MVCC中的行可見(jiàn)性判斷性能。
支持在存儲(chǔ)過(guò)程、匿名塊中使用自治事務(wù),使得該事務(wù)特提交狀態(tài)獨(dú)立于父事務(wù)。
支持語(yǔ)句級(jí)事務(wù)回滾,在關(guān)閉自動(dòng)提交的前提下,語(yǔ)句級(jí)別的錯(cuò)誤只會(huì)回滾當(dāng)前子事務(wù),而保留主事務(wù)運(yùn)行狀態(tài)。
支持Oracle兼容的PL/SQL塊行為
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持PL/SQL不帶$$
符號(hào)調(diào)用;函數(shù)/存儲(chǔ)過(guò)程支持IN、OUT、INOUT參數(shù),用于對(duì)參數(shù)進(jìn)行值的引用傳遞;匿名塊支持變量綁定和兩階段運(yùn)行;支持constant
變量兼容;支持隱式聲明的record
類型循環(huán)變量;支持存儲(chǔ)過(guò)程中的:NEW/:OLD
語(yǔ)法現(xiàn)象 ;支持觸發(fā)器中使用無(wú)返回值;支持自定義Exception
變量;支持Trigger觸發(fā)器中的begin
、end
語(yǔ)法。
支持Oracle兼容的包功能及集合類型
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持自定義包功能的創(chuàng)建和刪除;支持常見(jiàn)的關(guān)聯(lián)數(shù)組、嵌套表、可變長(zhǎng)的數(shù)組等集合類型;支持集合類型的基本初始化、調(diào)用、賦值等操作。
支持Oracle兼容的內(nèi)置包
DBMS_AQ包提供了消息隊(duì)列入隊(duì)、出隊(duì)操作的函數(shù)。
DBMS_AQADM包提供了消息隊(duì)列的配置和管理功能。
DBMS_ALERT包提供一組存儲(chǔ)過(guò)程,用于注冊(cè)警報(bào)、發(fā)送警報(bào)和接收警報(bào)。
DBMS_APPLICATION_INFO包來(lái)記錄數(shù)據(jù)庫(kù)中正在執(zhí)行的模塊或事務(wù)的名稱,以供以后跟蹤各種模塊的性能和調(diào)試時(shí)使用。
DBMS_CRYPTO包提供對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行加密、解密的功能,支持AES、DES、哈希以及消息摘要等功能。
DBMS_JOB包用來(lái)創(chuàng)建和管理定時(shí)任務(wù),用戶可以提交定時(shí)任務(wù)在數(shù)據(jù)庫(kù)中定時(shí)執(zhí)行。
DBMS_LOB包提供了對(duì)大對(duì)象的訪問(wèn)和操作方式,包括BLOB和CLOB等。
DBMS_LOCK包提供了將當(dāng)前會(huì)話暫停一段時(shí)間的sleep內(nèi)置函數(shù)。
DBMS_METADATA包提供了獲取數(shù)據(jù)庫(kù)對(duì)象的元數(shù)據(jù)信息的方法,用于重建數(shù)據(jù)庫(kù)中的對(duì)象。
DBMS_OUTPUT包可以從存儲(chǔ)過(guò)程、包或觸發(fā)器發(fā)送信息。
DBMS_PIPE包支持同一例程在不同會(huì)話之間進(jìn)行管道通信。
DBMS_RANDOM包提供了一系列隨機(jī)函數(shù)、存儲(chǔ)過(guò)程。
DBMS_RLS包可以使虛擬私有數(shù)據(jù)庫(kù)VPD執(zhí)行于特定的PolarDB數(shù)據(jù)庫(kù)對(duì)象上。
DBMS_SESSION包提供從PL/SQL訪問(wèn)會(huì)話、用戶以及其他信息的接口。
DBMS_SQL包提供了使用動(dòng)態(tài)SQL執(zhí)行數(shù)據(jù)操作語(yǔ)言 (DML) 和數(shù)據(jù)定義語(yǔ)言 (DDL) 語(yǔ)句、執(zhí)行 PL/SQL匿名塊以及調(diào)用PL/SQL存儲(chǔ)過(guò)程和函數(shù)的接口。
DBMS_UTILITY包提供了各種實(shí)用子程序。
UTL_ENCODE包提供了一組進(jìn)行數(shù)據(jù)編解碼的函數(shù),方便數(shù)據(jù)在不同主機(jī)之間的傳輸。
UTL_I18N包提供了一組由ESCAPE_REFERENCE和UNESCAPE_REFERENCE函數(shù)組成的服務(wù),可以為PL/SQL編寫的應(yīng)用程序提供附加的全球化功能。
UTL_RAW包提供了用于操作RAW類型數(shù)據(jù)的函數(shù)。
持久化緩沖池與DBLink
PolarDB PostgreSQL版(兼容Oracle)2.0版本中數(shù)據(jù)庫(kù)崩潰、重啟后原BufferPool內(nèi)容不會(huì)丟失,待下次程序啟動(dòng)可以復(fù)用之前的Bufferpool內(nèi)存信息。
支持DBKLink功能,支持使用DBLink連接PostgreSQL數(shù)據(jù)庫(kù)、Oracle數(shù)據(jù)庫(kù)。
支持服務(wù)端GBK、GB18030編碼
PolarDB PostgreSQL版(兼容Oracle)2.0版本支持服務(wù)端使用GBK、GB18030編碼,降低在客戶端GBK環(huán)境下額外的編碼轉(zhuǎn)換成本。
相關(guān)文檔
如果您需要將PolarDB PostgreSQL版(兼容Oracle)1.0版本遷移至PolarDB PostgreSQL版(兼容Oracle)2.0版本,具體操作請(qǐng)參見(jiàn)PolarDB PostgreSQL版(兼容Oracle)間的遷移。