PolarDB O引擎2.0版本公测公告
PolarDB O引擎2.0版本公测。
发布时间
2022年11月15日
PolarDB O引擎2.0版本当前处于免费公测阶段,仅供测试使用,建议不要在生产环境中使用。免费试用需购买包年包月集群,规格上限为32核256 GB,存储计费类型选择按空间计费(包年包月),存储空间100 GB以内。每个阿里云账号仅享受1次试用机会,点击此处开始免费使用。
简介
PolarDB O引擎2.0版本高度兼容Oracle语法,支持Oracle常见语法特性以及分区表、事务能力、PL/SQL、包、异构连接等重要功能,并且进一步提升了高并发、高写入负载、并行查询和逻辑复制等方面的性能。
PolarDB O引擎2.0版本主要的Oracle兼容性功能如下:
Oracle兼容数据类型、内置函数、语法特性以及分区表。
数据库事务。
支持PL/SQL及内置包兼容。
查询优化与并行计算。
异构连接。
安全及编码。
Oracle兼容数据类型、内置函数、语法特性以及分区表
支持64位的Date类型存储
PolarDB O引擎2.0版本扩展支持64位的Date类型存储,支持Oracle兼容的年、月、日、时、分、秒级别的Date类型存储及展示。
支持Oracle兼容的字符串类型、数字类型、二进制类型
PolarDB O引擎2.0版本支持char/varchar2/nvarchar2/nvarchar/binary_integer/number/row/rowid
等类型;支持nls_date_format
、nls_timestamp_format
来控制时间类型的输出格式。
支持Oracle兼容的一系列操作符
PolarDB O引擎2.0版本支持聚合函数中的order by
操作符;支持在内置二元操作符中间添加空格;支持minus
集合操作符、支持a.b
形式的函数不带括号调用;支持空串视为NULL。
支持Oracle兼容的字符串函数、数字函数、二进制函数、正则函数、采样函数
PolarDB O引擎2.0版本支持to_date/add_month
等一系列时间类型内置的函数;支持instr/lpad/rpad
等一系列字符串内置函数;支持rawtohex/hextoraw/vsize
等一系列二进制相关函数;支持sys_guid
等编码内置函数;支持sample function
等采样函数;支持regexp_count/regex_instr/regex_substr/regex_like
等一系列正则函数。
支持Oracle兼容的别名、列名、子句
PolarDB O引擎2.0版本支持在不同层级的子查询中使用相同别名、支持表名、列名称大小写兼容、支持关键字别名全兼容;insert/select
的语法结构中支持使用别名;支持目标列中缺省的distinct
、order by
子句;支持order by
子句中的count(*)
聚集函数;支持merge
子句中update/delete
语法与where
并联使用;支持insert/update
后跟形如namespace.table.col
语法;支持(+)
表连接操作符。
支持Oracle兼容的伪列、序列、DML、DDL等相关语法特性
PolarDB O引擎2.0版本支持rownum
语法来标志查询结果中的行号;支持全局唯一的序列;支持select/delete/update
作用于子查询的语法;支持select for update wait
语法;支持merge into
语法在视图中使用;支持基本的HINT
语法;支持Rename To
语法;支持alter table add (col1, col2)
语法;支持create directory
语法;支持create context
语法;支持connect by
子句在执行分层查询时确定行的父子关系。
支持Oracle兼容的分区表创建、修改、扩展功能
PolarDB O引擎2.0版本支持Oracle风格的分区表,包括一级、二级分区的创建,支持List、Range、Hash三种分区的创建。支持常见的CREATE、COALESCE、DROP、EXCHANGE、MERGE、MODIFY、MOVE、RENAME、SPLIT、TRUNCATE等分区管理操作。支持分区表子模板分区、支持间隔分区自动创建、支持Oracle兼容的如同A PARTITION(B)
的分区调用。
数据库事务
新的事务CSN事务快照机制
PolarDB O引擎2.0版本CSN事务快照是一种新的事务快照机制,用于提升MVCC性能,与原生PostgreSQL使用xid事务号列表作为事务快照不同,CSN快照使用一个单调递增的64位整数值作为事务快照,既能加速事务快照生成,也能提升MVCC中的行可见性判断性能。
支持自治事务
PolarDB O引擎2.0版本支持在存储过程、匿名块中使用自治事务,使得该事务特提交状态独立于父事务。
支持语句级别事务回滚
PolarDB O引擎2.0版本支持语句级事务回滚,在关闭自动提交的前提下,语句级别的错误只会回滚当前子事务,而保留主事务运行状态。
支持PL/SQL语法及内置包兼容
支持Oracle风格的PL/SQL块行为
PolarDB O引擎2.0版本支持PL/SQL不带$$符号调用;函数/存储过程支持IN、OUT、INOUT参数,用于对参数进行值的引用传递;匿名块支持变量绑定和两阶段运行;支持constant变量兼容;支持隐式声明的record类型循环变量;支持存储过程中的:NEW/:OLD
语法现象 ;支持触发器中使用无返回值;支持自定义Exception
变量;支持Trigger触发器中的begin
、end
语法。
支持包功能及集合类型
PolarDB O引擎2.0版本支持自定义包功能的创建、删除;支持常见的关联数组、嵌套表、可变长的数组等集合类型;支持集合类型的基本初始化、调用、赋值等操作。
支持一系列Oracle内置包
DBMS_ALERT包提供一组存储过程,用于注册警报、发送警报和接收警报。
DBMS_APPLICATION_INFO包来记录数据库中正在执行的模块或事务的名称,以供以后跟踪各种模块的性能和调试时使用。
DBMS_JOB包用来创建/管理定时任务,用户可以提交定时任务在数据库中定时执行。
DBMS_OUTPUT包可以从存储过程、包或触发器发送信息。
DBMS_PIPE包支持同一例程在不同会话之间进行管道通信。
DBMS_RANDOM包提供了一系列随机函数、存储过程。
DBMS_RLS包可以使虚拟私有数据库VPD执行于特定的PolarDB数据库对象上。
DBMS_SESSION包提供从PL/SQL访问会话、用户以及其他信息的接口。
DBMS_SQL 包提供了使用动态SQL执行数据操作语言 (DML) 和数据定义语言 (DDL) 语句、执行 PL/SQL匿名块以及调用PL/SQL存储过程和函数的接口。
DBMS_UTILITY包提供了各种实用子程序。
查询优化与并行计算
索引增强
PolarDB O引擎2.0版本减少了B-树索引的资源消耗,包括频繁更新索引导致的表膨胀问题。GiST索引可以在构建过程中预先排序数据,GiST和SP-GiST索引创建速度提升一个数量级,同时能够减少索引大小。
大量连接高并发优化
存在大量连接的场景中,PolarDB O引擎2.0版本大幅提高了事务的吞吐量,在测试场景下,最高可提升1倍。
并行计算增强
PolarDB O引擎2.0版本增加了许多并行查询功能,PL/pgSQL函数内的RETURN QUERY
返回结果时支持QUERY的并行计算,REFRESH MATERIALIZED VIEW
命令也可以使用并行查询。并行顺序扫描支持chunk,提高大范围数据扫描的IO吞吐,接近块设备的IO吞吐极限。
分区表性能提升
PolarDB O引擎2.0版本对分区系统进行了改进,提升分区裁剪能力,减少子分区subplan
和重复的cached plans
。在增减分区时使用alter table detach|attach PARTITION concurrently
模式避免锁冲突。
大表IN查询优化
PolarDB O引擎2.0版本支持linear search TO hash table probe
,提升IN语句的处理性能,在多条件或被过滤掉的数据量大的SQL中性能显著提升。
持久化缓冲池
PolarDB O引擎2.0版本中数据库崩溃、重启后原BufferPool内容不会丢失,待下次程序启动可以复用之前的Bufferpool内存信息。
异构连接
支持DBLINK
PolarDB O引擎2.0版本支持DBKLINK功能,支持DBLINK连接PostgreSQL数据库、Oracle数据库。
安全及编码
支持LZ4压缩算法
PolarDB O引擎2.0版本支持用户选择LZ4算法进行数据列压缩的能力,提高压缩性能,同时仍保留对原来pglz压缩方式的支持。
安全特性增强
PolarDB O引擎2.0版本可以通过使用pg_read_all_data
和pg_write_all_data
两个预定义的角色,赋予用户完全只读或只写的权限,支持一次性赋予tables/views/sequences
对象的读写权限。默认使用与标准兼容的SCRAM-SHA-256算法来进行密码管理。
支持服务端GBK、GB18030编码
PolarDB O引擎2.0版本支持服务端使用GBK、GB18030编码,降低在客户端GBK环境下额外的编码转换成本。