#23.4.4

# 版本定位

YashanDB v23.4.4版本在v23.4.3的基础上丰富了新特性与持续进行性能优化,为可用于长期服务支持的版本。

# 版本信息

版本号:v23.4.4.100

发版日期:2025 年 9 月 30 日

# 新增功能

YashanDB v23.4.4版本继承自YashanDB v23.4.3版本全部发布的功能,同时新增了以下关键特性:

# SQL引擎增强

# SQL功能增强

  • XML能力增强

    • 新增XML内置函数

      • 支持EXTRACTVALUE内置函数,可以根据指定的XPath表达式定位XML文档中的节点,并返回该节点的值,用于从XML数据中提取文本信息。

      • 支持EXISTSNODE内置函数,根据提供的XPath表达式在XML文档中查找节点,如果找到匹配的节点,则返回1;如果未找到,则返回0。用于判断XML数据中是否包含特定的信息。

      • 支持XMLSEQUENCE内置函数,将XMLType实例作为输入,返回该XMLType中顶级节点的变量数组。

      • 支持XMLEXTRACT内置函数,通过XPath表达式定位XML文档中的特定内容(例如元素、属性、文本值等),并返回对应的XMLType实例或字符串结果,实现对XML数据的精准解析。

      • XMLTABLE函数支持FOR ORDINALITY子句,指定该列为生成的行号列。最多只能有一个FOR ORDINALITY 子句。

    • 支持xmltype构造函数及对应成员方法

      • 支持xmltype构造函数,将符合XML格式的字符串(VARCHAR或CLOB类型)转换为XMLType对象,实现XML数据的类型化处理。

      • 支持extract成员函数,采用XMLType实例和XPath,应用XPath表达式并以XMLType形式返回结果,函数提取XMLType片段并返回包含结果节点的XMLType实例。

      • 支持getClobVal成员函数,以CLOB形式返回XMLType实例的值。

      • 支持getStringVal成员函数,以字符串形式返回XMLType实例的值。

      • 支持createXML成员函数,用于创建和返回XMLType实例的静态函数。

      • 支持existsNode成员函数,用于检查节点是否存在。

    • 新增DBMS_XMLDOM系统包,提供了处理XML数据的主流程超过10个的过程和函数,用于访问XMLType对象,在PL中创建、操作和解析XML文档的节点结构,实现文档对象模型(DOM)。

    • 新增DBMS_XMLPARSER系统包,提供newParser、getDocument、parseBuffer、freeParser和parseClob过程及函数,用于解析和处理XML文档,将XML格式的文本(字符串或大型对象)解析为结构化的XML文档对象,以便进行查询、修改、验证等操作。

  • PL能力增强

    • 支持UTL_HTTP高级包及对应函数:新增支持UTL_HTTP系统包,支持主要的在PL中发送和接收HTTP请求相关流程的存储过程和函数,突破了数据库的封闭性,让PL程序能够直接调用外部HTTP资源或提供HTTP服务响应,实现了数据库与外部系统的HTTP通信。

    • 支持PROCEDURE、FUNCTION、PACKAGE对象级权限:新增PROCEDURE、FUNCTION和PACKAGE过程体的EXECUTE对象权限,实现对PL的执行权限管理,加强安全能力,同时也增加了Oracle的兼容性。

    • DBMS_STATS系统包支持no_invalidate参数:通过新增no_invalidate参数,用于控制在收集统计信息过程中,是否失效依赖当前收集统计信息的对象的执行计划,默认为FALSE代表所有依赖于这些统计信息的现有计划都会失效,TRUE和AUTO在该版本为语法兼容。

    • 新增触发器的语法分支范围,UPDATE触发事件支持OF column子句放在DELETE和INSERT之后,提升Oracle兼容性。

    • 在PL功能中,新增在IF判断子句中支持游标进行空判断,包含IS NULL或IS NOT NULL,提升Oracle兼容性。

    • 在PL功能中,新增在IF判断子句中支持集合(嵌套表)进行空判断,包含支持空判断IS EMPTY或IS NOT EMPTY,提升Oracle兼容性。

  • 其他功能

    • 支持json_table函数,把JSON格式的字符串或文档解析为行和列的关系数据,并将该对象中的JSON值输出为单独的SQL列值,以便使用传统的SQL语句进行查询、过滤和关联操作。

    • 支持chartorowid函数:将字符串类型(CHAR或VARCHAR类型)的文本转换为ROWID类型,可实现已记录或存储的字符串转换为ROWID用于定位问题。

    • 支持current_date函数,用于返回会话时区中的当前日期,其值为DATE数据类型的公历值。

    • 支持reverse函数将字符串进行反转:查询语句中,通过reverse关键字实现对一串字符进行反转排列,简化特定场景实现,提高Oracle的兼容性。

    • 在时间戳的定义和转换的场景下,新增支持XFF关键字用于显示时间的小数秒部分,增加了使用灵活性,提高Oracle兼容性。

    • 为了丰富业务使用场景,该版本新增wm_concat、listagg函数入参支持nvarchar/NCHAR/NCLOB类型,可用于解决多语言Unicode字符的聚合需求,避免转换错误和乱码,确保字符拼接的正确性。

    • 支持ORDER BY子查询中存在外部引用:在ORDER BY子句中,已支持投影列位置、列名、列别名、简单子查询等,该版本新增子查询支持有外部引用,提高兼容性。

    • CTE中新增支持使用pivot语法功能,用于简化复杂场景下的行列转换,提高灵活性。

    • 该版本对MAX_SESSIONS最大上限规格进行提升,最大支持从16384扩容至50000,允许更多并发用户或应用程序同时连接到数据库,以适应高并发访问场景。

    • 该版本支持通过DBLink远端表创建物化视图,从而达到从远端数据同步到本地。扩充了源端数据同步到本地的手段,也提高了灵活性。同时通过新增DBLINK_CURSOR_COUNT参数,提高了DBLink同时打开table数量的规格,最大上限为16384。

# SQL性能增强

  • 并行能力增强

    • 批量架构能力持续增强,集合算子包含UNION/UNION ALL算子、MINUS/MINUS ALL/INTERSECT/INTERSECT ALL算子支持批量和并行执行。

    • 临时表在进行join、delete、insert等操作的场景下,支持批量和并行执行。

    • 在执行中需要COUNT执行算子时,例如常用的rownum < n场景生成的count算子时,支持走批量并行执行。

    • 在UPDATE/MERGE且存在复杂查询的大数据量场景下,优化器支持选择走批量和并行执行计划,提升DML性能。

    • 在消除重复结果时使用HASH DISTINCT算子的场景下,支持走批量并行执行,加快去重效率。

    • 在v23.4.1版本中,YashanDB已经支持CTE子查询物化共享,减少CTE执行次数,该版本实现共享CTE支持批量化和并行化,进一步提升CTE计算性能。

  • 优化器增强

    • Filter下推规格支持子查询等:在带外部引用的子查询、带关联子查询、带rownum等条件的子查询的场景下,支持Filter下推,减少后续处理的数据量,提升总体SQL的执行效率。

    • 标量子查询转Join:在投影中或filter中存在标量子查询的SQL场景下,优化器支持改写为join的关联方式,减少子查询执行次数,可有效利用索引,提升效率。

    • 支持常量参数化实现共享执行计划:在v23.4.4版本之前,使用拼串方式产生各个不同SQL时,优化器每次当成新的SQL语句,产生大量硬解析,影响执行效率。该版本通过新增CURSOR_SHARING参数,实现对相似常量SQL解析为同一个带变量SQL,减少硬解析、节省内存资源并提升性能。

    • 当SQL需要做MIN/MAX计算时,且在有条件的场景下,新增支持索引RANGE SCAN,可以有效减少数据的扫描,提高执行效率。

  • PL性能提升

    • 该版本通过对VARRAY/TABLE变量的存取访问性能优化,提升VARRAY/TABLE变量在循环中的读取、参与表达式运算和赋值动作的性能。

    • UDF deterministic的性能优化:通过对deterministic属性UDF的优化,实现对相同输入参数输出结果进行缓存,在相同SQL执行过程中复用缓存结果,不用反复执行UDF,从而提升执行效率。

    • 当简单的UDF内部组成只有一条SQL语句的场景下,优化器可以直接内联化,转到外部SQL语句中作为子查询,参与到整体SQL语句的优化计划生成,达到优化效果。

    • forall带udt变量的Insert场景性能提升,例如支持批量插入能力:在forall加insert带udt变量的Insert、bulk collect into场景下,通过支持批量插入能力,达到提升插入性能的效果。

    • 当SQL中存在UDF时,支持SQL本身的并行执行,在复杂UDF的SQL处理大规模数据时能明显提升效率。

# 存储引擎增强

  • 存储功能增强

    • 通过新增exchange_partition_clause子句,实现普通表在线与分区表互转的能力,数据在两种表结构间的快速迁移,且几乎不影响业务连续性。可用于快速创建分区表、高效剥离历史数据等场景。

    • RAW数据类型支持创建索引:RAW类型常用于存储唯一标识类二进制数据(例如UUID的二进制形式、硬件设备唯一码等),通常需要精确查询,支持创建索引可加速此类精确匹配性能。

  • 存储性能增强

    • 在v23.4.4版本之前,undo block只能被一个事务使用,在小事务比较多的场景下,undo block的争用比较大,该版本进行了undo block的优化,通过支持跨事务使用,有效减少undo block的分配争用和消耗,提高事务性能。

    • 该版本对批量插入临时表场景进行data buffer淘汰策略进行优化,通过调整临时表换出逻辑,到达占比后直接淘汰,使临时表执行时在DATA_BUFFER大时,可以明显较少buffer换入换出,提高临时表批量插入性能。

# 共享集群能力

  • 高可用

    • 共享集群支持SCAN:在v23.4.4版本之前,若业务中对节点扩缩容,由于集群的实例有变更,那么应用的链接需要同步适配修改感知集群的节点变化,因此导致整个系统易用性和稳定性大大降低。因此在v23.4.4版本集群支持SCAN能力,应用通过SCAN域名进行访问数据库,在数据库出现实例扩缩等场景的时候,应用无需修改链接串也不感知集群节点变化,SCAN服务会自动将会话迁移并实现负载均衡,提升业务系统的稳定性和易用性。

    • 共享集群支持flashback database:基于闪回日志快照点(Marker)技术,通过FLASHBACK DATABASE语法子句,实现全库秒级回滚至任意时间点。主要用于系统升级/迁移回滚、安全事件响应、测试环境重置、数据审计和分析、数据清洗回退、逻辑错误修复等故障场景。

  • YFS易用性

    在v23.4.4版本之前,已支持通过视图查询DG的相关信息,但是在实际业务运行中如果出现磁盘满或数据库实例启动失败等情况,此时可能无法通过视图查询YFS磁盘信息。基于此,v23.4.4版本提供了通过yfscmd命令来查询YFS磁盘的相关信息,例如DG使用、IO等信息,提升YFS磁盘信息查询和定位的易用性。

# 易用性

  • YashanDB升级时需要临时备份,在v23.4.4版本之前备份空间是否充足依赖于人工确认,在升级过程中可能存在磁盘写满的风险。v23.4.4新增了对备份空间的检查,提前在升级时预知风险,提高了易用性。

  • 该版本对yasboot在节点损坏或故障下线的运维场景进行优化,通过增加yasboot支持强制remove故障节点和将手动增删的节点纳入管理的能力,实现在节点损坏或故障下线时快速恢复运维工具yasboot的可用性问题,使运维人员更方便操作,提高易用性。

# 驱动

  • 新增YashanDB的.NET驱动支持SQLSugar框架,支持事务和DML等主要功能流程,可简化开发人员对YashanDB的开发流程,简化数据库交互代码,提升开发效率。

  • Python驱动增强

    • 通过支持批量绑定参数功能,在简单的插入和读取的场景下性能提升超过10倍。

    • 通过支持创建连接池、获取连接和归还连接等能力,同时支持连接池的参数管理,实现缓存和复用数据库连接,避免频繁创建和关闭连接带来的性能损耗。可降低连接开销,提升性能,控制并发连接数,减少数据库连接风暴。

  • Go驱动增强

    • 新增NumInput接口,返回当前SQL占位符参数的数量。

    • Stmt.Close接口支持异步,可有效提升关闭性能。

    • 新增直接插入模式接口,可有效提升插入性能。

edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流