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及集合类型 |
|