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