标簽
PostgreSQL , Oracle 相容性 , Oracle 19c
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#%E8%83%8C%E6%99%AF 背景
《PostgreSQL 覆寫 Oracle 18c 重大新特性》Oracle 19c 新特性摘自蓋老師
《Oracle 19c 新特性及官方文檔搶鮮下載下傳》文章,其中有一些特性在PostgreSQL中很早以前已經支援。本文旨在介紹PG如何使用這些特性。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#1data-guard-%E5%A4%87%E5%BA%93dml%E8%87%AA%E5%8A%A8%E9%87%8D%E5%AE%9A%E5%90%91 1.Data Guard 備庫DML自動重定向
在使用 ADG 作為備庫進行讀寫分離部署時,可能因為應用的原因,會有偶然的DML操作發送到備庫上,在 19c 中,Oracle 支援自動重定向備庫 DML,具體執行步驟為:
更新會自動重定向到主庫;
主庫執行更新、産生和發送Redo日志到備庫;
在Redo備庫應用後,ADG會話會透明的看到更新資訊的落地實施;
這一特性可以通過在系統級或者會話級設定參數 ADG_REDIRECT_DML 參數啟用,通過這種方式,ADG 會話的 ACID 一緻性得以保持,同時透明的支援『多數讀,偶爾更新』應用的自然讀寫分離配置。
這個特性的引入,将進一步的增加 ADG 的靈活性,幫助使用者将備庫應用的更加充分。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81 PostgreSQL 如何支援
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#1-%E4%BF%AE%E6%94%B9%E5%86%85%E6%A0%B8%E6%94%AF%E6%8C%81 1 修改核心支援
PostgreSQL standby與primary通信采用流複制協定
https://www.postgresql.org/docs/11/protocol-replication.html如果要讓PG支援隻讀從庫轉發DML到上遊節點,首先需要協定層支援。
digoal@pg11-test-> psql
psql (11.1)
Type "help" for help.
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
postgres=# create table a (id int);
ERROR: cannot execute CREATE TABLE in a read-only transaction
postgres=# \set VERBOSITY verbose
postgres=# create table a (id int);
ERROR: 25006: cannot execute CREATE TABLE in a read-only transaction
LOCATION: PreventCommandIfReadOnly, utility.c:246
postgres=# insert into a values (1);
ERROR: 25006: cannot execute INSERT in a read-only transaction
LOCATION: PreventCommandIfReadOnly, utility.c:246
目前寫操作報錯,判定為如下SQL請求類型時,直接報錯。
/*
* check_xact_readonly: is a utility command read-only?
*
* Here we use the loose rules of XactReadOnly mode: no permanent effects
* on the database are allowed.
*/
static void
check_xact_readonly(Node *parsetree)
{
/* Only perform the check if we have a reason to do so. */
if (!XactReadOnly && !IsInParallelMode())
return;
/*
* Note: Commands that need to do more complicated checking are handled
* elsewhere, in particular COPY and plannable statements do their own
* checking. However they should all call PreventCommandIfReadOnly or
* PreventCommandIfParallelMode to actually throw the error.
*/
switch (nodeTag(parsetree))
{
case T_AlterDatabaseStmt:
case T_AlterDatabaseSetStmt:
case T_AlterDomainStmt:
case T_AlterFunctionStmt:
case T_AlterRoleStmt:
case T_AlterRoleSetStmt:
case T_AlterObjectDependsStmt:
case T_AlterObjectSchemaStmt:
case T_AlterOwnerStmt:
case T_AlterOperatorStmt:
case T_AlterSeqStmt:
case T_AlterTableMoveAllStmt:
case T_AlterTableStmt:
case T_RenameStmt:
case T_CommentStmt:
case T_DefineStmt:
case T_CreateCastStmt:
case T_CreateEventTrigStmt:
case T_AlterEventTrigStmt:
case T_CreateConversionStmt:
case T_CreatedbStmt:
case T_CreateDomainStmt:
case T_CreateFunctionStmt:
case T_CreateRoleStmt:
case T_IndexStmt:
case T_CreatePLangStmt:
case T_CreateOpClassStmt:
case T_CreateOpFamilyStmt:
case T_AlterOpFamilyStmt:
case T_RuleStmt:
case T_CreateSchemaStmt:
case T_CreateSeqStmt:
case T_CreateStmt:
case T_CreateTableAsStmt:
case T_RefreshMatViewStmt:
case T_CreateTableSpaceStmt:
case T_CreateTransformStmt:
case T_CreateTrigStmt:
case T_CompositeTypeStmt:
case T_CreateEnumStmt:
case T_CreateRangeStmt:
case T_AlterEnumStmt:
case T_ViewStmt:
case T_DropStmt:
case T_DropdbStmt:
case T_DropTableSpaceStmt:
case T_DropRoleStmt:
case T_GrantStmt:
case T_GrantRoleStmt:
case T_AlterDefaultPrivilegesStmt:
case T_TruncateStmt:
case T_DropOwnedStmt:
case T_ReassignOwnedStmt:
case T_AlterTSDictionaryStmt:
case T_AlterTSConfigurationStmt:
case T_CreateExtensionStmt:
case T_AlterExtensionStmt:
case T_AlterExtensionContentsStmt:
case T_CreateFdwStmt:
case T_AlterFdwStmt:
case T_CreateForeignServerStmt:
case T_AlterForeignServerStmt:
case T_CreateUserMappingStmt:
case T_AlterUserMappingStmt:
case T_DropUserMappingStmt:
case T_AlterTableSpaceOptionsStmt:
case T_CreateForeignTableStmt:
case T_ImportForeignSchemaStmt:
case T_SecLabelStmt:
case T_CreatePublicationStmt:
case T_AlterPublicationStmt:
case T_CreateSubscriptionStmt:
case T_AlterSubscriptionStmt:
case T_DropSubscriptionStmt:
PreventCommandIfReadOnly(CreateCommandTag(parsetree));
PreventCommandIfParallelMode(CreateCommandTag(parsetree));
break;
default:
/* do nothing */
break;
}
}
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#2-%E4%BF%AE%E6%94%B9%E5%86%85%E6%A0%B8%E6%94%AF%E6%8C%81 2 修改核心支援
利用fdw,讀寫操作重新向到FDW表(fdw為PostgreSQL的外部表,可以重定向到主節點)
例如
create rule r1 as on insert to a where pg_is_in_recovery() do instead insert into b values (NEW.*);
這個操作需要一個前提,核心層支援standby可寫FDW表。
并且這個方法支援的SQL語句有限,方法1更加徹底。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#3-citus%E6%8F%92%E4%BB%B6%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%E5%AE%8C%E5%85%A8%E5%AF%B9%E7%AD%89%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%E5%9D%87%E5%8F%AF%E8%AF%BB%E5%86%99%E6%95%B0%E6%8D%AE%E5%BA%93 3 citus插件,所有節點完全對等,所有節點均可讀寫資料庫
《PostgreSQL sharding : citus 系列7 - topn 加速(count(*) group by order by count(*) desc limit x
) (use 估值插件 topn)》 《PostgreSQL sharding : citus 系列6 - count(distinct xx) 加速 (use 估值插件 hll|hyperloglog)》 《PostgreSQL sharding : citus 系列5 - worker節點網絡優化》 《PostgreSQL sharding : citus 系列4 - DDL 操作規範 (新增DB,TABLE,SCHEMA,UDF,OP,使用者等)》 《PostgreSQL sharding : citus 系列3 - 視窗函數調用限制 與 破解之法(套用gpdb執行樹,分步執行)》 《PostgreSQL sharding : citus 系列2 - TPC-H》 《PostgreSQL sharding : citus 系列1 - 多機部署(含OLTP(TPC-B)測試)》 https://github.com/digoal/blog/blob/master/201902/20190213_01.md#2oracle-sharding-%E7%89%B9%E6%80%A7%E7%9A%84%E5%A4%9A%E8%A1%A8%E5%AE%B6%E6%97%8F%E6%94%AF%E6%8C%81 2.Oracle Sharding 特性的多表家族支援
在Oracle Sharding特性中,被分片的表稱為 Sharded table,這些sharded table的集合稱為表家族(Table Family),表家族之中的表具備父-子關系,一個表家族中沒有任何父表的表叫做根表(root table),每個表家族中隻能有一個根表。表家族中的所有Sharded table都按照相同的sharding key(主鍵)來分片。
在12.2,在一個SDB中隻支援一個表家族,在 19c 中,SDB 中允許存在多個表家族,每個通過不同的 Sharding Key進行分片,這是 Sharding 特性的一個重要增強,有了 Multiple Table Families 的支援,Sharding 才可能找到更多的應用場景。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-1
PostgreSQL sharding支援非常豐富:
1、plproxy
《PostgreSQL 最佳實踐 - 水準分庫(基于plproxy)》 《阿裡雲ApsaraDB RDS for PostgreSQL 最佳實踐 - 4 水準分庫(plproxy) 之 節點擴充》 《阿裡雲ApsaraDB RDS for PostgreSQL 最佳實踐 - 3 水準分庫(plproxy) vs 單機 性能》 《阿裡雲ApsaraDB RDS for PostgreSQL 最佳實踐 - 2 教你RDS PG的水準分庫(plproxy)》 《ZFS snapshot used with PostgreSQL PITR or FAST degrade or PG-XC GreenPlum plproxy MPP DB's consistent backup》 《A Smart PostgreSQL extension plproxy 2.2 practices》 《使用Plproxy設計PostgreSQL分布式資料庫》2、citus
count(*) group by order by count(*) desc limit x
3、pg-xl
https://www.postgres-xl.org/4、antdb
https://github.com/ADBSQL/AntDB5、sharding sphere
http://shardingsphere.apache.org/6、乘數科技出品勾股資料庫,使用fdw支援sharding
7、pg_pathman+FDW支援sharding
https://github.com/postgrespro/pg_shardman 《PostgreSQL 9.5+ 高效分區表實作 - pg_pathman》https://github.com/digoal/blog/blob/master/201902/20190213_01.md#3%E9%80%8F%E6%98%8E%E7%9A%84%E5%BA%94%E7%94%A8%E8%BF%9E%E7%BB%AD%E6%80%A7%E6%94%AF%E6%8C%81%E5%A2%9E%E5%BC%BA 3.透明的應用連續性支援增強
在Oracle RAC叢集中,支援對于查詢的自動切換,當一個節點失效,轉移到另外一個節點,在19c中,Oracle 持續改進和增強了連續性保持,資料庫會自動記錄會話狀态,捕獲用于重演的資訊,以便在切換時,在新節點自動恢複事務,使DML事務同樣可以獲得連續性支援:
在事務送出後自動禁用狀态捕獲,因為送出成功的事務将不再需要在會話級恢複;
在事務開始時,自動重新啟用狀态跟蹤;
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-2
要将一個會話内的請求轉移到另一個節點,需要支援同樣的快照視角,否則會出現查詢不一緻的情況。PostgreSQL支援快照的導出,分析給其他會話,使得所有會話可以處于同一視角。
《PostgreSQL 共享事務快照功能 - PostgreSQL 9.2 can share snapshot between multi transactions》這個技術被應用在:
1、并行一緻性邏輯備份
2、會話一緻性的讀寫分離
《PostgreSQL 10.0 preview 功能增強 - slave支援WAITLSN 'lsn', time;用于設定安全replay栅欄》為了能夠支援透明應用連續性,1、可以在SQL中間層支援(例如為每個會話建立快照,記錄快照資訊,轉移時在其他節點建立連接配接并導入快照),2、SQL驅動層支援,3、也可以在核心層支援轉移。
會增加一定的開銷。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#4%E8%87%AA%E5%8A%A8%E5%8C%96%E7%B4%A2%E5%BC%95%E5%88%9B%E5%BB%BA%E5%92%8C%E5%AE%9E%E6%96%BD 4.自動化索引建立和實施
對于關系型資料庫來說,索引是使得查詢加速的重要手段,而如何設計和建立有效的索引,長期以來是一項複雜的任務。
在 Oracle 19c 中,自動化索引建立和實施技術被引入進來,Oracle 通過模拟人工索引的思路,建立了内置的專家系統。
資料庫内置的算法将會通過捕獲、識别、驗證、決策、線上驗證、監控的全流程管控索引自動化的過程。
這一特性将會自動幫助使用者建立有效的索引,并通過提前驗證確定其性能和有效性,并且在實施之後進行監控,這一特效将極大緩解資料庫索引維護工作。
自動化還将删除由新建立的索引(邏輯合并)廢棄的索引,并删除自動建立但長時間未使用的索引。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-3
1、EDB PPAS版本,支援自動建議索引
《PostgreSQL 商用版本EPAS(阿裡雲ppas(Oracle 相容版)) 索引推薦功能使用》2、PG社群版本,根據統計資訊,top SQL,LONG SQL等資訊,自動建立索引
《PostgreSQL SQL自動優化案例 - 極簡,自動推薦索引》 《自動選擇正确索引通路接口(btree,hash,gin,gist,sp-gist,brin,bitmap...)的方法》PG 虛拟索引
《PostgreSQL 索引虛拟列 - 表達式索引 - JOIN提速》 《PostgreSQL 虛拟|虛假 索引(hypothetical index) - HypoPG》https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E4%BC%98%E5%8A%BF PostgreSQL 優勢
PG 支援9種索引接口(btree, hash, gin, gist, spgist, brin, bloom, rum, zombodb),同時PG支援索引接口擴充,支援表達式索引,支援partial索引。以支援各種複雜業務場景。

https://github.com/digoal/blog/blob/master/201902/20190213_01.md#5%E5%A4%9A%E5%AE%9E%E4%BE%8B%E5%B9%B6%E8%A1%8C%E9%87%8D%E5%81%9A%E6%97%A5%E5%BF%97%E5%BA%94%E7%94%A8%E5%A2%9E%E5%BC%BA 5.多執行個體并行重做日志應用增強
在Oracle Data Guard環境中,備庫的日志應用速度一直是一個重要挑戰,如果備庫不能夠及時跟上主庫的步調,則可能影響備庫的使用。
自Oracle 12.2 版本開始,支援多執行個體并行應用,這極大加快了恢複進度,在 18c 中,開始支援 In-Memory 列式存儲,在 19c 中,并行應用開始支援 In-Memory列式存儲。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-4
對于邏輯從庫,支援一對一,一對多,多對一,多對多的部署方法。PG 邏輯訂閱每個通道一個worker process,可以通過建立多個訂閱通道來實作并行。
對于實體從庫,異步STANDBY的WAL APPLY延遲通常是毫秒級。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#6oracle%E7%9A%84%E6%B7%B7%E5%90%88%E5%88%86%E5%8C%BA%E8%A1%A8%E6%94%AF%E6%8C%81 6.Oracle的混合分區表支援
在 19c 中,Oracle 增強了分區特性,可以将外部對象存儲上的檔案,以外部表的方式連結到分區中,形成混合分區表,借助這個特性,Oracle 将資料庫内外整合打通,冷資料可以剝離到外部存儲,熱資料在資料庫中線上存儲。
這個特性借助了外部表的特性實作,以下是一個示例:
CREATE TABLE orders ( order_idnumber,
order_dateDATE, … )
EXTERNAL PARTITION ATTRIBUTES
( TYPE oracle_loaderDEFAULTDIRECTORY data_dir
ACCESS PARAMETERS (..) REJECT LIMIT unlimited)
PARTITION BY RANGE(order_date)
( partition q1_2015 values less than(‘2014-10-01’)
EXTERNAL LOCATION (‘order_q1_2015.csv’),
partition q2_2015 values less than (‘2015-01-01’),
partition q3_2015 values less than (‘2015-04-01’),
partition q4_2015 values less than (‘2015-07-01’));
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-5
PostgreSQL 的fdw為外部存儲(可以是外部任意資料源,包括檔案,DB,WWW,S3,OSS等)。
使用PG繼承技術,即可完成分區的混合存儲(本地存儲,外部存儲混合),甚至SHARDING。
《ApsaraDB的左右互搏(PgSQL+HybridDB+OSS) - 解決OLTP+OLAP混合需求》 《PostgreSQL 9.6 sharding based on FDW & pg_pathman》https://github.com/digoal/blog/blob/master/201902/20190213_01.md#7%E5%9C%A8%E7%BA%BF%E7%BB%B4%E6%8A%A4%E6%93%8D%E4%BD%9C%E5%A2%9E%E5%BC%BA 7.線上維護操作增強
在不同版本中,Oracle 持續增強線上維護操作,例如在 12.2 開始支援的Online Move、線上修改普通表為分區表等特性。
在19c 中,持續增強了智能的、細粒度的遊标失效控制,将DDL操作對于遊标失效的影響降至最低,例如,在 19c 中,comment on table的操作,将不會引起遊标的失效。
針對分區維護的操作,例如Truncate分區等,Oracle 将進行細粒度的控制,和DDL操作無關的SQL将不受DDL失效影響。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-6
PostgreSQL 設計之初就支援了DDL事務,可以将DDL與DML混合在一個事務中處理。
begin;
insert into tbl values (...);
drop table xx;
create table xx;
alter table xx;
insert xx;
end;
又例如切換表名,可以封裝為一個事務。
另外對于普通表轉分區表,可以這樣操作:
《PostgreSQL 普通表線上轉換為分區表 - online exchange to partition table》https://github.com/digoal/blog/blob/master/201902/20190213_01.md#8%E8%87%AA%E5%8A%A8%E7%9A%84%E7%BB%9F%E8%AE%A1%E4%BF%A1%E6%81%AF%E7%AE%A1%E7%90%86 8.自動的統計資訊管理
随着表資料的變化,優化器表資料統計資料将近實時重新整理,以防止次優執行計劃
統計的線上維護内置于直接路徑加載操作中
當資料顯着變化時運作自動統計資訊收集作業,例如。,自上次收集統計資訊以來,表中超過10%的行被添加/更改
第一個看到需要重新編譯SQL遊标的會話(例如,由于新的優化器統計資訊)執行重新編譯
其他會話繼續使用舊的SQL遊标,直到編譯完成
避免因重新編譯而導緻大量會話停頓
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-7
PostgreSQL autovacuum 設計之初就是采用的動态統計資訊收集,并且支援到了叢集、TABLE級别可設定,使用者可以根據不同表的負載情況,設定自動收集統計資訊的門檻值。
相關參數
autovacuum_analyze_scale_factor
autovacuum_analyze_threshold
autovacuum_naptime
autovacuum_max_workers
autovacuum_work_mem
同時統計資訊的柱狀圖個數支援動态設定到表、叢集級。
表級設定
alter table xx SET STATISTICS to xx;
相關參數
default_statistics_target
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#9%E8%87%AA%E5%8A%A8%E5%8C%96%E7%9A%84sql%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%92%E7%AE%A1%E7%90%86 9.自動化的SQL執行計劃管理
在 19c 中,資料庫預設的就會啟用對于所有可重用SQL的執行計劃捕獲(當然SYS系統Schema的SQL除外),然後進行自動的執行計劃評估,評估可以針對AWR中的TOP SQL、SGA、STS中的SQL進行。
如果被評估的執行計劃優于目前執行計劃(一般是要有效率 50%以上的提升),會被加入到執行計劃基線庫中,作為後續的執行選擇,而不佳的執行計劃則會被标記為不可接受。
有了這個特性,SQL執行計劃的穩定性将更進一步。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-8
PostgreSQL 自适應執行計劃插件AQO,支援類似功能。對于複雜SQL尤為有效。
https://github.com/postgrespro/aqoAdaptive query optimization is the extension of standard PostgreSQL cost-based query optimizer. Its basic principle is to use query execution statistics for improving cardinality estimation. Experimental evaluation shows that this improvement sometimes provides an enormously large speed-up for rather complicated queries.
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#10sql%E5%8A%9F%E8%83%BD%E7%9A%84%E5%A2%9E%E5%BC%BA 10.SQL功能的增強
在 19c 中,SQL 功能獲得了進一步的增強,這其中包括對于 COUNT DISTINCT的進一步優化,在12c中引入的近似 Distinct 操作已經可以為特定SQL帶來極大性能提升,現在基于位圖的COUNT DISTINCT 操作繼續為查詢加速。
除此之外,LISTAGG 增加了 DISTINCT 關鍵字,用于對操作資料的排重。
ANY_VALUE 提供了從資料組中獲得随機值的能力,如果你以前喜歡用 Max / Min 實作類似的功能,新功能将顯著帶來效率的提升。ANY_VALUE 函數在 MySQL 早已存在,現在應該是 Oracle 借鑒和參考了 MySQL 的函數做出的增強。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#postgresql-%E5%A6%82%E4%BD%95%E6%94%AF%E6%8C%81-9
PostgreSQL 支援近似聚合,支援流計算,支援聚合中的排序,支援自定義聚合函數等。
1、使用hyperloglog插件,PostgreSQL可以實作機率計算,包括count distinct的機率計算。
https://github.com/citusdata/postgresql-hll 《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 3》 《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 2》 《PostgreSQL hll (HyperLogLog) extension for "State of The Art Cardinality Estimation Algorithm" - 1》 《[轉]流資料庫 機率計算概念 - PipelineDB-Probabilistic Data Structures & Algorithms》2、TOP-N插件
https://github.com/citusdata/cms_topn3、pipelinedb 插件
《PostgreSQL 流計算插件 - pipelinedb 1.x 參數配置介紹》 《PostgreSQL pipelinedb 流計算插件 - IoT應用 - 實時軌迹聚合》通過流計算,适應更多的實時計算場景。
https://github.com/digoal/blog/blob/master/201902/20190213_01.md#%E5%B0%8F%E7%BB%93 小結
PostgreSQL是一款非常優秀的企業級開源資料庫,不僅有良好的Oracle相容性,同時在Oracle面前也有很大更加優秀的地方:
插件化,可擴充(包括類型、索引接口、函數、操作符、聚合、視窗、FDW、存儲過程語言(目前支援plpgsql,plsql,c,pljava,plperl,pltcl,pllua,plv8,plpython,plgo,...幾乎所有程式設計語言的存儲過程),采樣,...)。
如何從O遷移到PG:
《xDB Replication Server - PostgreSQL, MySQL, Oracle, SQL Server, PPAS 全量、增量(redo log based, or trigger based)同步(支援single-master, mult-master同步, 支援DDL)》 《MTK使用 - PG,PPAS,oracle,mysql,ms sql,sybase 遷移到 PG, PPAS (支援跨版本更新)》 《ADAM,從Oracle遷移到PPAS,PG的可視化評估、遷移産品》混合使用情況下的資源隔離管理
《PostgreSQL 商用版本EPAS(阿裡雲ppas(Oracle 相容版)) HTAP功能之資源隔離管理 - CPU與刷髒資源組管理》