#23.2.7
# 版本定位
YashanDB v23.2.7版本在v23.2.1的基础上丰富了新特性与持续进行性能优化,为可用于长期服务支持的版本。
# 版本说明
版本号:v23.2.7
发版日期:2024 年 11 月 1 日
# 特性更新
YashanDB v23.2.7版本继承自YashanDB v23.2.6版本全部发布的功能,同时新增以下关键能力特性:
# SQL引擎增强
DBLink查询性能优化:通过对交互时延、交互次数和内部协议编解码优化,使单次各个步骤的消耗和时长减少,最终达到性能优化的效果,通过此次优化,使YashanDB使用DBLink访问Oracle在指定的场景下性能提升数倍。
子查询排序算子的消除优化:通过对优化器完善,在父查询投影列只有汇聚和常量且FROM后子查询中有排序算子的场景下,实现对子查询的排序算子的消除,即无需关心子查询的返回结果是否有序,例如
SELECT COUNT(*) FROM (SELECT * FROM T1 ORDER BY 1);
不需要对T1表进行排序直接COUNT表T1,减少排序的动作,提升了执行效率。SESSION视图支持展示客户端连接的软件版本和协议版本:为了丰富诊断信息和和易用性,该版本在V$SESSION视图新增多个字段,包括CLIENT_PROTOCAL_VERSION、CLIENT_VERSION、CLIENT_DRIVER、MACHIE和TERMINAL等,展示更多的客户端信息。同时登录过程中,支持打印客户端软件/协议版本信息的日志。
# 存储引擎增强
支持SESSION级Block Cache:在访问全局资源时,需要通过加锁控制并发。对于读而言虽然请求的是共享锁,但加共享锁通常都会有Spin Lock的竞争,在并发较高的情况下,Spin Lock冲突会很大。通过增加SESSION级别的Block Lock Cache使资源本地化,降低全局资源锁冲突,提高了并发读的性能。同时增加多个系统参数控制每个SESSION Block Lock Cache的数量,增加动态视图V$SESSION_LOCK_CACHES查看每个SESSION的Cache情况,使用户可以在不同高并发场景下灵活性地进行调整。
支持表加密能力:通过CREATE TABLE支持table_encryption_clause子句功能,实现对指定表的加密,当插入或更新数据时会被截获、加密,然后用加密后的格式保存,被查询时自动解密。加密和解密对用户透明。
Ystream解析DDL附加主键信息:YashanDB将主键信息组装成JSON字符串,写入redo日志,由YStream解析成字符串,实现使用Ystream时可以解析出主键信息,丰富使用场景。
# 共享集群能力
YFS能力增强优化:
细化YFS磁盘管理颗粒度:v23.2.7版本,YFS支持以磁盘或FailureGroup维度调整DiskGroup配置,支持删除DiskGroup中的一块或多块盘、删除DiskGroup中一个或多个FailureGroup,而在v23.1版本中YFS仅支持删除整个DiskGroup(不支持更细粒度地按磁盘或FailureGroup执行删除操作),具体使用请查阅yfscmd使用介绍。由于删除磁盘存在一定风险,此功能有以下注意事项:
仅允许删除空磁盘,无法删除含YFS元数据的磁盘BOOT_DISK。
删除磁盘后,剩余FailureGroup数量必须满足DiskGroup冗余度要求,且剩余各FailureGroup的Disk数量一致。
被删除的磁盘会立即与其伙伴磁盘解除关系,可能会导致部分磁盘缺少可用的伙伴磁盘创建数据副本,无法满足冗余度要求,该磁盘空间将不可用。此时,可向DiskGroup增加足量的磁盘(可通过查询V$YFS_DISK视图获取磁盘的伙伴关系),新增磁盘后系统将为该类磁盘自动分配新的伙伴磁盘。
新增DiskGroup内的Disk重命名功能:可以指定若干Disk重命名(手动指定新名称),也可以对DiskGroup的所有Disk自动重命名(名称由系统指定,格式为
DGNAME_DISKID
)。磁盘名称要求:磁盘名称最长31字符;新磁盘名称在DiskGroup内唯一。如果DiskGroup中的文件被打开但未关闭,将无法DROP该DiskGroup,新增
FORCE
强制执行功能。强制DROP DiskGroup可能引起数据库异常,请慎用该操作。
# 分布式能力增强
支持DUAL和列表混合查询:在v23.2.7版本之前,不支持DUAL表跟列存表进行JOIN等混合查询,该版本实现了该功能,满足更多的业务使用场景。
优化PQ_POOL_SIZE内存使用可观测性:PQ_POOL是并行线程间数据传递及节点间控制命令传递使用的内存池,常用的操作包括分布式部署中跨节点的行列执行、共享集群部署中的GV$视图查询。该版本把PQ_POOL_SIZE参数从隐藏参数修改为正式参数,供用户自行配置,同时在多个动态视图新增PQ_POOL相关的指标,提高了易用性,且方便获取诊断信息。
支持TABLESPACE SET的空间回收功能:分布式部署中新增
ALTER TABLESPACE xxx SHRINK SPACE [KEEP xxx];
语法功能,实现TABLESPACE SET空间压缩和指定压缩后的表空间大小,增加了表空间集的数据膨胀的维护方案,提高了用户的资源利用率。支持并行创建备库:新增
BUILD DATABASE [to standby (*)] [PARALLELISM integer];
语法功能,实现多线程并发创建备库,同时优化创建备库时LSC表Slice文件的扫描和读取的性能,大幅度提升了分布式备库构建速度。
# 易用性
支持Docker镜像版本:该版本支持CentOS 7.x操作系统和X86、ARM平台的Docker镜像版本,且发布到YashanDB官网,方便用户部署和体验。
支持DBA_EXTENTS视图:DBA_EXTETS支持查看每一个Extent所属的对象信息、Extent的起始位置和大小。通过该视图可以查到某个数据文件的高水位线上的Extent属于哪个对象,方便分析高水位,从而对相应的对象进行空间回收从而Shrink表空间减少膨胀。
V$SQL_BIND_CAPTURE视图支持记录SQL的绑定变量信息:在v23.2.7版本之前,YashanDB无法获取SQL的绑定变量记录,该版本通过V$SQL_BIND_CAPTURE视图新增字段实时记录SQL绑定参数具体得值信息,方便用于诊断SQL问题。
# 驱动
支持自适应DDL变更:在v23.2.7版本之前,YashanDB的JDBC接口在获取PreparedStatement后会缓存起来,此时若改变PreparedStatement对应表的结构(例如alter table modify col将col从varchar2(30)改成varchar2(32)),再使用PreparedStatement.exeucteQuery就会出现YAS-04007 Message:result set metadata changed异常。该版本通过对驱动和服务端交互方案进行优化,实现了JDBC能支持元数据变化之后继续执行PreparedStatement语句的能力。