#23.4.1
# 版本信息
版本号:v23.4.1.100
发版日期:2025 年 5 月 8 日
# 版本定位
YashanDB v23.4版本定位为长期服务版本(LTS),新版本围绕金融核心业务系统建设产品能力,目标对等1比1平替Oracle,全面增强Oracle兼容性,构建金融行业高可用能力、实现库级闪回秒级恢复等竞争力。同时发布mysql语法模式功能,提升性能,配套完善的数据迁移、监控运维和开发者工具,支持市场项目规模销售和批量复制。
# 特性更新
YashanDB v23.4版本继承自YashanDB v23.3.1版本全部发布的功能,同时新增了以下关键特性:
# SQL引擎增强
# SQL功能增强
- 支持TIMESTAMP时区类型:新增TIMESTAMP时区数据类型,存储日期和时间信息、时区偏移量或时区名称,用于需要准确的时间、支持跨国业务的场景。
- 支持JSON_VALUE函数:新增JSON_VALUE函数,实现从JSON数据中提取单个标量值(如字符串、数字、布尔值)。
- INSTR函数支持CLOB类型:支持在CLOB类型数据中搜索指定的字符串,并返回其位置,提升处理大文本数据提高效率。
- 扩展投影列字段的别名长度:在v23.4版本前,投影列字段和别名长度最大为20B,在使用*查询和未指定别名的场景下字段名较长容易被截断和重名造成不好体验。该版本针对此场景做了能力增强,扩展投影列和别名长度至64B,满足更大的使用范围,提高易用性。
# PL功能增强
- PACKAGE支持PROCEDURE和FUNCTION重载功能:支持存储过程和函数的重载功能,可以在同一个包内定义多个同名的存储过程或函数,但它们的参数列表需要数量、数据类型或者顺序不同,YashanDB会依据调用时传入的实际参数,来判断具体调用哪个重载版本。主要用于相似功能不同参数、开发兼容不同版本的场景诉求。提高代码可读性与可维护性提升,及增强开发人员使用的灵活性。
- 支持PIPELINED管道函数:通过PIPE ROW函数将数据一行一行地返回给调用者,不需要等待所有数据处理完才返回结果,在SQL调用所需的行数少且计算量大场景下可以提高性能,同时简化代码。
- 游标支持FOR UPDATE功能:PL新增支持游标for update功能,用于对查询结果集中的行进行锁定,阻止其他事务对这些行进行修改或删除操作,配合CURRENT OF子句,在游标操作里自动精确地定位到当前游标所在行,从而对该行数据进行更新或删除操作。主要解决数据一致性要求高和逐行处理的场景。
- PL新增MOD取模用法:Oracle的PL/SQL语法中不支持使用%操作符作取模操作,只能使用MOD语法。YashanDB新增PL/SQL的MOD语法,此语法实现的是取模操作,同操作符“%”的作用一致,丰富使用场景,增加兼容性。
- PL解析机制优化:在该版本之前的静态SQL和显式游标等功能中,PL语句与SQL语句混合使用时,数据库会优先进行PL语句块变量匹配,该机制会导致迁移Oracle代码时产生大量兼容性相关的修改工作量。为了提升Oracle语义兼容性,当前版本通过去除预编译动作,优先匹配SQL语句中的表列资源,其次再进行匹配PL语句块变量。
# SQL性能优化
优化规则增强
- 常量参数化与基于参数的计划管理:针对统计信息波动或环境变化易引发的执行计划劣化、性能抖动甚至宕机风险,该版本智能执行计划管理采用父子游标两级缓存机制,通过SQL标准化与常量参数化合并相似查询,有效降低缓存池的内存损耗。在常见拼接SQL场景下,软解析内存消耗可有效降低80%以上。
- 支持COUNT(*)算子下推:SQL中投影列为count(*)、count(1)常量计算单表全量数据的场景下,支持count流程直接下推到存储层,减少SQL层与存储层交互次数,节省交互时间,提升性能。
- CTE查询重写支持计划共享与物化区共享:在使用CTE查询且存在多个子查询的场景下,通过优化器按照物化/代价计算/内联的方式优化CTE,实现子查询物化共享,减少CTE执行次数,加快查询效率。随着CTE的使用变多,性能的优化效果更为明显。
- 多列IN支持走索引优化:在多列在IN的场景下,例如(col1, col2, col3) IN ((value1_1, value1_2, value1_3), (value2_1, value2_2, value2_3)),YashanDB针对此场景对优化器进行优化,使用col1, col2, col3上的组合索引、单列索引生成计划进行评估,按照选择最低cost的索引和扫描方式执行,避免选择代价大的索引和扫描方式的情况,提升执行效率和性能。
- 子查询中排序算子优化:通过对优化器完善,在父查询投影列只有汇聚和常量,且FROM后子查询中有排序算子的场景下,实现对子查询的排序算子的消除,即不关心子查询的返回结果是否有序,如SELECT COUNT(*) FROM (SELECT * FROM T1 ORDER BY 1)不需要对T1表进行排序直接COUNT表T1,减少排序的动作,提升了执行效率。
- LIKE变量
||'%'时支持索引:当Filter为like变量||'%'时,在23.4版本之前执行计划为全表扫,在表数据量大且返回数据少的场景下耗时长,该版本实现在此场景下支持走Filter字段的索引,加快查询速度。
执行性能提升
- 汇聚函数带DISTINCT的算法优化:针对聚集函数带DISTINCT的场景,增加HASH去重算法,在选择无需排序的语句场景下,随着数据的重复度提升,相较于历史版本性能提升明显。
- 多行子查询执行优化:在结果集为多行的子查询场景下,不需要重复执行,通过子查询缓存复用机制,有效降低大数据量子查询的性能开销,相较于历史版本,复杂子查询性能提升3倍以上,充分满足高并发OLTP与复杂分析混合负载需求。
- 支持SORT GROUPBY STOPKEY算子:当SQL外层有rownum或者limit语法只返回少数行时,且内层存在大表的group的时候,支持SORT GROUP BY STOPKEY算子可以加速SQL的执行效率。
- 针对PL语言的FORALL INSERT数据处理中,通过FORALL批量插入技术,使标量类型写入性能普遍提升85%,部分类型如CLOB类型写入速度大幅优于Oracle;UDT类型的写入速度提升在30%以上。
- DETERMINISTIC函数调用优化:该版本通过对调用的函数是deterministic的进行执行调整,输入为常量情况下,直接改写成常量;输入为绑定参数,参与优化和执行的动态常量特性缓存;使同场景性能提升明显,优于Oracle。
- 带UDT的全表扫描支持并行:该版本新增支持带Geometry列的表在全表扫的时候支持并行,且部分GIS函数在计算中也支持并行能力,提高了GIS函数和对象的处理性能。
DBLink性能优化
- DBLink的交互时延、交互次数、查询投影优化、内部协议编解码和OCI驱动解码优化:通过对交互时延、交互次数和内部协议编解码优化,使单次各个步骤的消耗和时长减少,最终达到性能优化的效果,通过此次优化,使YashanDB使用DBLink访问Oracle在指定的场景下性能提升数倍。
- DBlink支持收集及使用统计信息:YashanDB通过DBLink访问Oracle时,支持对远端表的统计信息进行查询和汇总,优化器从而在SQL中存在DBLink时可以更准确地生成执行计划,提升复杂查询中存在DBLink场景的查询性能。
# GIS能力增强
- 在v23.4版本之前,CREATE TABLE语法创建GIS表时只支持ST_GEOMETRY类型,该版本实现了Geometry列支持声明指定子类型、SRID,例如
geometry(point, 4326),兼容了PostGIS的语法和行为,同时支持Geometry_Columns视图,可查询Geometry数据的子类型、SRID、维度,提高易用性。 - 支持ST_MakeValid函数,在不丢弃顶点的情况下,把无效的Geometry对象转换成有效的Geometry对象。
- 支持ST_CollectionExtract函数,从一个(Multi)Geometry对象中,找出并返回指定类型的Geometry对象。
- 支持ST_Centroid函数,用于计算几何图形的质心(几何中心)。
- 支持ST_PointOnSurface函数,返回一个位于geometry实例内部的任意点。
- 支持ST_Transform函数,将传入的Geometry对象的坐标参考系转换成指定的坐标参考系并返回。
# 存储引擎增强
# 存储能力增强
- 支持全库闪回:基于闪回日志快照点(Marker)技术,通过FLASHBACK DATABASE语法子句,实现全库秒级回滚至任意时间点。主要用于系统升级/迁移回滚、安全事件响应、测试环境重置、数据审计和分析、数据清洗回退、逻辑错误修复等故障场景。
- Ystream解析DDL支持附加主键信息:YashanDB将主键信息组装成JSON字符串,写入redo日志,由YStream解析成字符串,实现使用Ystream时可以解析出主键信息,丰富使用场景。
- ALTER TABLE支持UPDATE GLOBAL INDEXES功能:ALTER TABLE通过新增UPDATE GLOBAL INDEXES语法子句,实现了在对分区表进行DROP、SPLIT、TRUNCATE等分区操作时,同时更新相关的全局索引,避免了因分区操作导致的索引失效问题,保证了查询的正确性和性能。还简化了管理,无需手动重建索引。
- 支持合并分区:通过新增MERGE PARTITIONS语法子句,支持将相邻的分区合并为一个分区,从而减少分区的数量。合并分区有助于对数据进行整合,特别是当数据不再需要按照原有的分区规则进行存储时。合并分区时,删除与所选分区相对应的本地索引分区,并将与合并分区相对应的本地索引分区标记为UNUSABLE。可以手动重建索引维护或者使用UPDATE GLOBAL INDEXES子句更新全局索引。可以有效减少分区数量可以降低分区表的管理复杂度,减少维护工作量。
- 支持表空间备份恢复:新增BACKUP/RESTORE TABLESPACE语法子句,实现对表空间备份进行备份恢复能力,可以有效减少备份恢复时间,提供灵活的备份恢复策略,同时支持DBA_DATAFILE_BACKUPSET视图查看表空间备份集信息。该版本备份恢复表空间仅支持单机部署上。
- 该版本默认部署时打开回收,即回收站开关RECYCLEBIN_ENABLED默认为ON,用于误操作的恢复。
- 统计信息能力增强
- 支持基础统计信息的实时收集(DML实时更新统计信息):新增全局参数OPTIMIZER_REAL_TIME_STATISTICS控制是否开启实时收集统计信息,默认为FALSE关闭,设置为TRUE开启后,对在表进行DML/DDL的时实时收集统计信息,对基础的统计信息(例如row count、min/max等值)可以在SQL执行过程中实现实时修改。可以提升统计信息的准确度,也可以让优化器避免使用默认统计信息,造成性能损耗。
- DBMS_STATS高级包gather_schema_stats函数增加options参数:在23.4版本之前,使用DBMS_STATS.GATHER_SCHEMA_STATS按SCHEMA收集统计信息时会全部重新对象收集一次,在部分对象已存在统计信息的场景下效率低。该版本通过新增设置options能力,支持了按照SCHEMA维度时也可按需收集表维度的诉求,默认时只收集SCHEMA下满足条件的表。提高了统计信息的收集效率。
- 支持默认采样比例auto_sample_size:通过新增DBMS_STAT.AUTO_SAMPLE_SIZE常量来指定自动采样率,在使用GATHER_DATABASE_STATS、GATHER_INDEX_STATS、GATHER_SCHEMA_STATS和GATHER_DATABASE_STATS收集统计信息时生效,此参数不生效于动态采样。增加了Oracle的兼容性,提升客户的易用性。
- 统计信息收集进度展示:新增视图DBA_OPTSTAT_OPERATIONS,记录执行gather_table_stats, gather_index_stats,、gather_schema_stats、gather_database_stats存储过程的操作记录,包含使用DBMS_STATS高级包和数据库级别执行的统计操作的历史记录;新增视图DBA_OPTSTAT_OPERATION_TASKS,记录统计信息父操作中要处理的目标对象和信息,该视图会将DBA_OPTSTAT_OPERATIONS中的父操作分解为对统计信息收集对象的子操作,对象包含表、索引或分区。在手动触发和定时任务等触发统计信息收集任务时,通过这2个视图查询任务的进度及状态、起始时间等信息。
# 性能优化
- 支持SESSION级BLOCK CACHE能力:在访问全局资源时,需要通过加锁控制并发。对于读而言虽然请求的是共享锁,但是加共享锁通常都会有Spin Lock的竞争,在并发较高的情况下,Spin Lock冲突会很大。通过增加SESSION级别的Block Lock Cache使资源本地化,降低全局资源锁冲突,提高了并发读的性能。同时增加多个系统参数控制每个SESSION Block Lock Cache的数量,增加动态视图V$SESSION_LOCK_CACHES查看每个SESSION的Cache情况,使用户可以在不同高并发场景下灵活性地进行调整。
- INSERT INTO SELECT场景的IO性能优化:在INSERT INTO SELECT操作且插入的表具有多索引的场景下,YashanDB在该版本对索引事务内部机制进行了优化,减少小数据量时REDO的刷盘IO次数和redo落盘等待时间,提升该场景下的插入性能且持平Oracle。
- 支持设置表并行:新增支持CREATE/ALTER TABLE配置表的并行度,表设置表并行度后,查询全表扫描时默认使用并行扫描。同时可以使用DBA_TABLES视图的degree字段可以查看当前的并行情况。在处理大规模数据查询的场景可以有效提升查询性能。
- 创建/检查约束支持并行:在大数据量场景下,表存在约束时,检查关联条件的完整性时都会进行大量的数据扫描,造成极大的耗时。因此在创建/检查约束全表扫描的场景下,增加并行处理,提升处理性能。
# 高可用增强
- 一主一备自定义配置条件后自动切换能力增强:在单机一主一备部署形态下,可以使用基于yasom进程的仲裁选主功能保障业务连续性,该版本支持置条件故障切换,通过新增配置参数FAILOVER_HEALTH_CONDITION和FAILOVER_ERROR_CONDITION,分别代表在特定异常时(包含归档磁盘满,redo刷盘失败,dbwr刷脏页失败等)和在主库向客户端抛出某些错误码时的切换条件值,在触发条件后主库立即关闭实现自动切换。
# 共享集群产品能力
# 多地多中心高可用能力
- 主备集群支持在主集群所有实例故障场景下自动failover,提升产品故障感知和切换能力,降低运维复杂性和提升产品易用性。
- 备集群所有实例支持可读,提升了在读写分离场景下,备集群的读性能和稳定性。
- 容灾集群支持集群单实例在本地磁盘部署,降低容灾场景的部署和管理成本。
- 共享集群IO脑裂保护增强:在v23.3版本,共享集群提供了基于在途IO保护算法的IO Fencing方法,但是在途IO保护算法会一定程度上延长集群RTO,当存储设备IO性能差或IO卡顿现象频发时,还需要用户调大共享集群的DISK_HB_KEEP_ALIVE参数配置值以确保算法的可靠性。为了更好的解决此场景问题,在v23.4版本提供了基于硬件IO保护方式,即就是基于SCSI等协议持久预留的IO Fencing方法利用共享存储设备普遍支持的SCSI持久预留命令为共享集群构建IO栅栏,具有绝对的安全性和更优的RTO指标。
# 功能优化完善
- 新增支持在线扩容:在实际业务中,随着业务增长现有数据库节点规格性能可能不满足业务现状,需要进行节点扩容来确保业务运行。在v23.4版本,共享集群支持在线扩容数据库节点,解决随着实际业务增长需要在线扩展数据库节点业务诉求。
- 在线DDL能力增强:在v23.4版本共享集群提供在线create/rebuild索引以及在线shrink table等能力,实现降低运维复杂性和提升产品易用性。
- 新增支持GIS能力:在v23.4版本新增GIS能力,通过内置地理空间数据处理引擎,支持复杂空间查询,满足智慧城市、物流追踪等场景需求。
- 新增备集群支持备份:在v23.4之前版本,共享集群备份仅支持在主集群备份,但是在实际业务中主集群业务会比较大,执行备份会影响主集群运行性能和稳定性,因此在v23.4版本支持备集群支持备份,来降低在主集群备份带来影响,提升系统稳定性。
- 支持NOLOGGING能力:支持在yasldr、CREATE/ALTER INDEX、LOAD DATA等使用场景可以显示指定启用NOLOGGING能力,因为过程中不产生REDO日志,从而提升在相关场景性能。
- YFS能力提升:当前YFS管理上不能将数据分散在多个磁盘上,会存在IO负载不均衡,导致性能较差。在v23.4版本YFS提供了条带化能力,支持按照不同文件设置条带化来平衡磁盘组中所有磁盘的负载和减少I/O延迟,例如DATA_STRIPING、REDO_STRIPING等参数设置不同数据文件是否启用YFS条带化功能,提升整体的性能。
# 性能优化
- 国产性能优化:v23.4版本共享集群针对鲲鹏、海光等国产化CPU多NUMA场景下进行了深度优化和探索,在鲲鹏CPU和TPCC场景下测试,计算节点从1 -> 2 -> 4节点的扩展比达0.8以上。同时提供完整的调优手册方便使用者查阅和参考,具体请查阅TPC-C性能调优。
- UNDO数据亲和性(Affinity):共享集群中每个实例都有自己的UNDO表空间,由于共享集群各个实例需要Cache Fusion来进行一致性访问等,为降低UNDO管理在Cache Fusion场中的性能损耗,在v23.4版本提供UNDO亲和性能力,通过将特定事务或数据操作绑定到特定实例的UNDO表空间,从而降低跨实例的锁竞争和全局缓存(Global Cache)传输开销,来提升系统整体性能和稳定性。
# 分布式产品能力
# 列存储能力增强
- CREATE TABLE AS SELECT支持BULKLOAD:通过在create table as后的select加上/+bulkload/的hint,实现列存LSC表在使用CTAS语法时使用bulkload功能,对LSC表进行批量插入,可以减少redo的产生,提高插入速度。
- 支持OUTLINE LOB字段长度的计算:支持对LSC表的outline lob字段长度进行计算,包含LENGTH、CHAR_LENGTH、LENGTHB等函数对字符和字节进行长度统计。
- INSERT /+BULKLOAD/ INTO支持在AUTOCOMMIT ON的情况下执行:当前列存LSC表insert /+bulkload/ into要求必须在autocommit off的情况下执行,需要在脚本或者SQL中手动加上事务提交,不然可能会导致部分未结束事务。该版本通过新增enable_bulkload_auto_commit参数,实现对insert /+bulkload/ into的自动提交控制,使用户在脚本中使用bulkload特性时更加灵活,代码更简洁。
- INSERT INTO SELECT和CTAS支持OUTLINE LOB:INSERT INTO SELECT和CREATE TABLE AS SELECT为日常运维和业务系统中常用操作,在v23.4版本前,列存不支持使用INSERT INTO SELECT和CREATE TABLE AS SELECT语句对超过32000字节的LOB列的操作。在该版本实现了此功能,满足了数仓场景下的日常运维操作习惯,简化了业务逻辑,提高灵活性。
- 支持DUAL和列表混合查询(采用列执行引擎):在v23.4版本之前,不支持DUAL表跟列存表进行JOIN等混合查询,该版本实现了该功能,满足更多的业务使用场景。
- CREATE TABLE AS SELECT支持重试:当前在insert select阶段,如果遇到资源不足,并没有重试,直接报错返回给客户端了。该版本通过对内存配额、会话资源和相关报错等信息判断,实现对在特定场景下create table as select失败时可以进行自动重试,无需用户干预,最大重试时间为30秒,如在30秒重试不成功则失败。
- 支持SYS_GUID函数:在分布式系统和特定需要保证唯一性的诉求下,实现通过sys_guid函数生成全局唯一标识符,可用于LSC列存生成主键数据和数据同步等业务场景。
- 支持TABLESPACE SET的空间回收功能:存算一体分布式集群部署中通过支持ALTER TABLESPACE xxx SHRINK SPACE [KEEP xxx]语法功能,实现TABLESPACE SET空间压缩和指定压缩后的表空间大小,增加了表空间集的数据膨胀的维护手段,提高了用户的资源利用率。
# 性能优化
- 支持并行创建备库:通过支持BUILD DATABASE [to standby (*)] [PARALLELISM integer]语法功能,实现多线程并发创建备库,同时优化创建备库时LSC表Slice文件的扫描和读取的性能,大幅度提升了分布式备库构建速度。
# 分布式运维能力增强
- 新增V$XFMR_STAT显示列式存储用于转换生成稳态数据的所有还未执行完毕的xfmr任务信息。
- 新增与V$XFMR_HIS_STAT视图,显示列式存储用于转换生成稳态数据的所有已经执行完毕的xfmr任务信息。包含展示XFMR任务的资源占用,包括内存,配额,换入换出,执行时间等信息,可用于分析正在执行中与已执行完毕的历史XFMR任务的行为是否符合预期以及是否影响性能。
- PQ_POOL_SIZE内存使用情况可观测性:PQ_POOL是主要用于指定并行线程间数据传递使用的内存池,常用的操作有分布式下跨节点的行列执行、共享集群下的global view查询。该版本把PQ_POOL_SIZE参数从隐藏参数修改为正式参数,供用户自行配置,同时在多个动态视图新增PQ_POOL相关的指标,提高了易用性,且方便获取诊断信息。
- LSC表支持空间的及时回收与复用:该版本对LSC表的空间管理进行优化,在申请空间时,优先使用可回收利用的空间,减少膨胀;在空间不足时,后台线程支持强制复用,保证业务的成功;采用更加积极的后台空间回收策略,执行效率更加高效。
# MySQL兼容
具体使用请查阅标注为(mysql模式)的相关文档。
# 新增MySQL数据类型
- 支持BINARY数据类型,用于存储二进制字符串,可以存储任意类型的二进制数据,如图像、音频、视频、文件,将数据以字节的形式进行存储,不进行字符集转换和编码处理,能够准确地保存原始数据的每个字节。可以避免字符集转换和编码。
- 支持FLOAT和DOUBLE数据类型:4字节单精度近似的数值数据,最大23位精度;8字节双精度近似的数值数据,最大53位精度。
- 支持存储和计算可变长度的字符VARCHAR数据类型,最大支持存储65535字节,存储字符个数等于小于65535个字符,受字符集影响。
- 支持无符号数据类型,都表示为正数:(当前版本未对FLOAT UNSIGNED、DOUBLE UNSIGNED、DECIMAL UNSIGNED的四则运算进行适配。)
- TINYINT UNSIGNED:用于存储非常小的整数,占用1个字节。可以表示0到255之间的整数。
- SMALLINT UNSIGNED:存储较小的整数,占用2个字节。能表示0到65535之间的整数。
- MEDIUMINT UNSIGNED:存储中等大小的整数,占用3个字节。取值范围是0到16777215。
- INTEGER/INT UNSIGNED:存储整数,占用4个字节。可以表示0到4294967295的整数。
- BIGINT UNSIGNED:用于存储较大的整数,占用8个字节。取值范围是0到18446744073709551615。
- DECIMAL UNSIGNED:用于存储精确的小数,DECIMAL[(M[,D])] [UNSIGNED]中M表示总位数(精度),D表示小数点后的位数(小数位数)。
- FLOAT UNSIGNED:用于存储浮点数,占用4个字节。可以表示非负的单精度浮点数。
- DOUBLE UNSIGNED:用于存储浮点数,占用8个字节。表示非负的双精度浮点数。
- 支持YEAR、DATE和TIME时间数据类型,YEAR类型用于表示4个字符的年份值。DATE类型用于表示具有日期部分但没有时间部分的值,以“YYYY-MM-DD”格式检索和显示DATE值。支持的范围是“1000-01-01”到“9999-12-31”。TIME类型以'hh:mm:ss'格式(或对于较大的小时值,则为'hhh:mm:ss'格式)检索和显示TIME值。TIME值的范围可以从'-838:59:59'到'838:59:59'。
# 新增MySQL内置函数
- CRC32函数计算循环冗余校验值并返回32位无符号值。如果参数为NULL,则结果为NULL。
- RAND()函数返回0到1的随机数值,RAND(N)时返回固定的值。
- TRUNCATE函数返回截断为小数点后D位的数字X。如果D为0,则结果没有小数点或小数部分。D可以为负数,导致值X小数点左边的D位数字变为零。如果X或D为NULL,则该函数返回NULL。
- FROM_BASE64函数把Base64编码的字符串解码为原始的二进制数据。
- LCASE函数用于将字符串中的所有字符转换为小写形式。
- LOCATE函数可以在一个字符串中查找另一个子字符串的位置。
- REVERSE函数将输入字符串的字符顺序进行反转,也就是让字符串逆序排列。
- SPACE函数根据输入的参数值,创建一个由相应数量空格字符构成的字符串。
- UCASE函数用于将字符串中的所有字符转换为大写形式。
- UNHEX函数将十六进制字符串转换为对应的二进制字符串。
- ANY_VALUE函数用于在处理GROUP BY子句时使用的一个工具,主要用于解决SQL标准要求SELECT投影列中的非聚合列必须全部包含在GROUP BY子句中的问题。
- SLEEP函数主要功能是让当前执行的线程暂停指定的时间。
- VALUES函数主要在INSERT … ON DUPLICATE KEY UPDATE语句里,VALUES()函数用于引用插入行的值。当插入的数据遇到唯一键冲突时,ON DUPLICATE KEY UPDATE子句会执行更新操作,此时可以使用VALUES()函数获取原本要插入的值,从而在更新时使用这些值。
- CHARSET函数主要用于返回字符串表达式所使用的字符集名称。
- COLLATION函数用于返回给定字符串表达式所使用的排序规则(Collation)名称。
- CURRENT_USER函数是一个系统函数,其主要功能是返回当前执行SQL语句的用户和主机信息。
- DATABASE函数函数会返回正在使用的数据库名称。
- SCHEMA()函数与DATABASE()函数功能基本相同,主要用于返回当前MySQL会话所使用的数据库的名称。
- SESSION_USER函数用于返回当前会话中连接到数据库的用户名。
- SYSTEM_USER函数用于返回当前与数据库建立会话的用户的用户名。
- VERSION()函数的主要功能是返回当前数据库的版本信息。
- VALIDATE_PASSWORD_STRENGTH函数给定一个表示明文密码的参数,此函数返回一个整数来指示密码的强度,如果参数为NULL,则返回NULL。返回值范围从0(弱)到100(强)。
- 时间日期函数
- ADDDATE函数对日期或日期时间值进行加法运算,也就是在指定的日期或日期时间上添加一定的时间间隔,从而得到一个新的日期或日期时间值。
- CURDATE函数返回当前执行该函数时所在系统的日期,返回值的格式为YYYY-MM-DD。
- ADDTIME函数用于对时间或日期时间值加上一个时间间隔,从而得到一个新的时间或日期时间结果。
- CURRENT_DATE函数会返回当前数据库所在系统的日期,其返回值格式为YYYY-MM-DD。
- CURTIME函数会返回当前数据库所在系统的时间,返回值的格式通常为HH:MM:SS。
- FROM_UNIXTIME函数将Unix时间戳转换为日期时间格式。
- TO_DAYS函数用于将一个日期或日期时间值转换为从公元0年1月1日开始到指定日期所经过的天数。
- TO_SECONDS函数功能是把一个日期或日期时间值转换为从公元0年1月1日00:00:00开始到指定日期或日期时间所经过的秒数。
- CURRENT_TIME函数用于返回当前数据库的时间,格式为HH:MM:SS,表示小时、分钟和秒。
- DATE_SUB函数的主要功能是从指定的日期或日期时间值中减去一个时间间隔,从而得到一个新的日期或日期时间值。
- DATEDIFF函数主要用于计算两个日期之间相差的天数。
- DAY函数是一个日期和时间处理函数,其主要功能是从给定的日期或日期时间值中提取出对应的天数部分。
- DAYOFMONTH函数用于从指定的日期或日期时间值里提取该日期是所在月份的第几天。
- HOUR函数是用于处理时间和日期时间数据的函数,它的主要功能是从给定的时间或日期时间值里提取小时部分。
- MICROSECOND函数用于从给定的时间或日期时间值里提取微秒部分。
- MINUTE函数主要用于从给定的时间或日期时间值里提取分钟部分。
- MONTH函数用于从给定的日期或日期时间值中提取月份信息。
- SECOND函数用于从给定的时间或日期时间值里提取秒数部分。
- SUBDATE函数的主要功能是从指定的日期或日期时间值中减去一个时间间隔,进而得到一个新的日期或日期时间值。
- TIME_FORMAT函数用于将时间或日期时间值按照指定的格式进行格式化输出。
- TIME_TO_SEC函数的主要功能是将一个时间值转换为对应的秒数。
- WEEK函数的主要作用是从给定的日期或日期时间值中提取周信息。
- YEAR函数是从给定的日期或日期时间值中提取年份信息。
- GET_FORMAT函数用于返回预定义的日期、时间或日期时间格式字符串。
- QUARTER函数用于从给定的日期或日期时间值中提取对应的季度信息。
- CONVERT_TZ函数的主要功能是将一个日期时间值从一个时区转换到另一个时区。
- DAYNAME函数用于返回给定日期对应的星期几的英文名称。
- DAYOFYEAR函数用于返回给定日期是该年的第几天,其返回值范围是1到366。
- FROM_DAYS函数的主要功能是将一个天数数值转换为对应的日期。
- MONTHNAME函数用于返回给定日期对应的月份英文名称。
- SEC_TO_TIME函数用于将以秒为单位的时间值转换为时间格式HH:MM:SS。
- SUBTIME函数用于从给定的时间或日期时间值中减去一个时间间隔,进而得到新的时间或日期时间值。
- TIMESTAMPADD函数的主要作用是在指定的日期或日期时间值上添加一个时间间隔,从而得到一个新的日期或日期时间值。
- UTC_DATE函数用于返回当前的UTC(协调世界时)日期。
- UTC_TIME函数的作用是返回当前的UTC(协调世界时)时间。
- WEEKDAY函数用于返回给定日期对应的星期几,不过它返回的是用数字表示的结果,且以0开始计数。
- WEEKOFYEAR函数的主要功能是返回给定日期是该年的第几周。
- YEARWEEK函数用于将日期转换为年份和周数的组合形式,它能方便地对数据按年份和周进行分组统计、筛选等操作。
# 新增MySQL系统视图
- PROCESSLIST视图用于展示当前MySQL服务器中正在执行的线程信息。
- SESSION_STATUS视图用于展示当前会话的各种状态信息。
- SESSION_VARIABLES系统视图展示当前会话的系统变量及其对应的值。
- GLOBAL_VARIABLES视图展示数据库的全局系统变量及其当前值。
# 其他兼容功能
权限:支持grant/revoke对象级权限和全局系统权限,并且支持一个SQL可以grant/revoke授权/撤销多个权限。
通过使用0x开头和x''方式,支持表示十六进制字面量,可以用于插入、比较、计算和表示二进制数等场景,丰富了YashanDB的兼容性,提高可读性和易用性。
字符集和字符序
- 新增支持GBK、GB18030字符集和gbk_bin、gb18030_bin排序。
- 支持按collation排序和比较字符串,当前支持包含ASCII、GBK、UTF8、ISO88591、UTF16和GB18030对应字符集的相应字符序。
sql_mode
- PAD_CHAR_TO_FULL_LENGTH:默认情况下,检索CHAR列值时会修剪尾随空格。如果启用了PAD_CHAR_TO_FULL_LENGTH,则不会进行修剪,检索到的CHAR值会填充至其完整长度。
- NO_FIELD_OPTIONS:在SHOW CREATE TABLE的输出中不打印MySQL特定的列选项。该字段目前只用于兼容,可以设置但不生效。
- NO_KEY_OPTIONS:不要在SHOW CREATE TABLE的输出中打印MySQL特定的索引选项。该字段目前只用于兼容,可以设置但不生效。
- NO_TABLE_OPTIONS:不要在SHOW CREATE TABLE的输出中打印MySQL特定的表选项。该字段目前只用于兼容,可以设置但不生效。
支持同时执行多条SQL语句,SQL之间使用分号隔开,返回多个SQL执行结果。
支持的mysqldump工具功能增强
- 支持全库/部分库/全表/部分表/表结构数据备份。
- 支持多个参数项。
# 安全能力
- 支持表加密能力:通过CREATE TABLE支持table_encryption_clause子句功能,实现对指定表的加密,当插入或更新数据时会被截获、加密,然后用加密后的格式保存,被查询时自动解密。加密和解密过程对用户透明。
- 支持密钥管理:新增能力二级密钥体系,通过内部机制(系统表或数据文件)管理DEK、外部钱包管理MEK,实现主密钥及数据加密密钥在使用时按需生成。同时外部钱包支持创建/删除、权限管理等能力,帮忙主密钥实现轮转,更新密钥后对旧密钥进行作废,无法还原密钥等能力。
- 支持防篡改能力:通过HIST_CHECK高级包提供了一组内置的存储过程/函数,用于开启/关闭指定表的防篡改功能,校验指定表是否发生过篡改。
- 支持可配置的密码强度:在23.4版本之前,YashanDB开启密码强度后,规则是固定的,密码长度为8 - 64位和密码必须同时包含数字、大写字母、小写字母和特殊字符。为了满足不同用户的安全准则和能覆盖更多的业务场景诉求,该版本YashanDB通过配置参数,实现对密码长度的控制,增加对密码管理的灵活性。
- YashanDB该版本支持审计和记录通过MySQL客户端登录登出的用户信息,完善了审计信息,且登录登出也是问题诊断的一个重要信息,提高安全能力。
# 运维诊断
- 支持执行计划选择诊断功能(10053事件):通过支持设置10053事件,例如'10053 TRACE NAME CONTEXT FOREVER, LEVEL 1',记录SQL生成执行计划过程,例如索引选择,JOIN顺序,算子选择等信息。用于跟踪SQL语句成本计算的内部事件,记载CBO模式下优化器如何计算SQL成本,生成相应的执行计划。同时支持设置生成TRACE日志的路径和大小,提高易用性。详细使用介绍请查阅追踪。
- 支持使用SQL_ID绑定执行计划:通过新增CREATE OUTLINE outline_name ON sql_id USING HINT hint语法,给指定的SQL_ID的SQL创建OUTLINE,让SQL固定为指定的HINT的指引的执行计划,解决无需业务进行SQL更改,也能到计划绑定的目的。提高了灵活性。
- AWR快照存储优化和支持设置TOPSQL的数量:通过dbms_awr新增modify_snapshot_settings函数,支持exec dbms_awr.modify_snapshot_settings(topnsql=>100)设置AWR的TOPSQL输出行数,默认为30,可以更灵活展示AWR的TOP SQL的数据。
- AWR功能存储优化:在v23.4版本前,清理AWR数据是通过DELETE操作删除的,在删除大量数据时,耗费时间较长。该版本对AWR能力增强,通过把对应的系统表调整为分区表,使在清理历史数据的时候变成DROP分区操作,提高清理效率。
- V$SQL_BIND_CAPTURE视图支持记录SQL的绑定变量信息:在v23.4版本之前,YashanDB无法获取SQL的绑定变量记录,该版本通过V$SQL_BIND_CAPTURE视图新增字段实时记录SQL绑定参数具体得值信息,方便用于诊断SQL问题。
- 新增V$TEMPSEG_USAGE视图记录临时段的使用情况,包含在执行排序、哈希连接及执行索引创建、统计信息等操作时由数据库自动创建存储中间结果。以及存储会话创建会话级全局临时表和私有临时表的存储空间。可用于性能监控与调优和故障排查。
- SESSION视图要展示客户端连接的软件版本、协议版本:为了丰富诊断信息和和易用性,该版本在V$SESSION视图新增多个字段,包含CLIENT_PROTOCAL_VERSION、CLIENT_VERSION、CLIENT_DRIVER、MACHIE和TERMINAL等,展示更多的客户端信息。同时登录过程中,支持打印客户端软件/协议版本信息的日志。
- V$SESSION对DDL语句支持查询:V$SESSION视图新增DTEXT字段,用于展示会话正在执行的DDL语句文本,超过200字节的部分截断,当会话不在执行DDL语句时,该字段为NULL。
- 新增DICT_COLUMNS、DICTIONARY和DICT视图,DICT是DICTIONARY的同义词,DICTIONARY视图记录了系统视图与系统同义词信息,相当于ALL_VIEWS和ALL_SYNONYMS中展示的内置view和同义;DICT_COLUMNS记录了上述DICTIONARY视图的列信息。
- DBA_TABLES新增INITIAL_EXTENT、NEXT_EXTENT、MIN_EXTENTS和MAX_EXTENTS字段,代表表的初始化extent的大小、下一个分配extent的大小,单位是字节。新增MIN_EXTENTS和MAX_EXTENTS字段代表段中允许的最小/大扩展数;分区表的这些字段对应的值为NULL。可用于监控表的存储空间使用情况、预测未来的空间增长趋势、定位空间不足的问题和空间资源规划等场景。
- 支持ROLE_SYS_PRIVS和ROLE_TAB_PRIVS视图:新增ROLE_SYS_PRIVS视图用于显示授予角色的系统权限信息,ROLE_TAB_PRIVS视图用于显示授予角色的对象权限信息。
- 支持DBA_EXTENTS视图:DBA_EXTENTS支持查看每一个Extent所属的对象信息、Extent的起始位置和大小。 通过该视图可以查到某个数据文件的高水位线上的Extent属于哪个对象方便分析高水位,从而对相应的对象进行空间回收从而Shrink表空间减少膨胀。
- 支持DBA_TAB_HISTOGRAMS视图,查看数据库表的直方图信息:新增DBA_TAB_HISTOGRAMS视图会记录对表列收集统计信息时生成的直方图数据,这些信息有助于优化器更为精准地估算查询结果集的大小,进而生成更高效的执行计划。
- 安装时支持安装包自校验功能
- 在使用OM安装部署数据库时,通过特定算法,对安装包进行计算值与使用公钥解密的值对比一致判断是否被篡改,如被篡改则安装强制终止,同时也支持yasboot支持命令直接校验指定安装包是否被篡改。提高易用性和安全性。
- 针对资源要求不高或环境资源小的场景下,YashanDB通过对DBMS_PARAM包进行优化,推荐参数时降低默认值及去除对性能和可用性无影响的参数资源设置,从而达到使用更小的内存配置达到更好数据库参数配置的优化效果,结合新增指定内存大小部署方式,使用户在小资源场景下也能体验相应好的性能;同时增加引导式安装部署和前置校验的能力,提高易用性。
# 驱动
# JDBC
- 支持JDK 1.6/1.7版本:该版本之前,JDBC驱动依赖JDK 1.8及以上版本,为了匹配和兼容更多的客户场景,通过发布新的JDBC驱动版本,YashanDB实现支持JDK 1.6和1.7版本的能力。
- 支持geoserver 2.23.3/2.25.5版本的方言包:为了满足不同场景的诉求,YashanDB支持GeoServer 2.23.3/2.25.5版本,通过提供gt-jdbc-yashandb-xxx方言包和YashanDB JDBC驱动,用户可在GeoServer进行配置后,选择YashanDB为数据库源,可进行访问读取矢量数据,发布图层等操作。
- 支持standbyLoadBalance能力:JDBC连接串支持配置驱动多个IP及standby关键字,实现自动识别出备节点并轮询连接到配置IP上,同时达到负载均衡效果。
- PreparedStatment后支持自适应DDL变更:在v23.4版本之前,YashanDB的JDBC接口在获取PreparedStatement以后,缓存起来。此时改变PreparedStatment对应表的结构,例如alter table modify col将col从varchar2(30)改成varchar2(32),使用PrepareStatement.exeucteQuery,就会出YAS-04007 Message:result set metadata changed异常。该版本通过对驱动和服务端交互方案进行优化后,实现了JDBC能支持元数据变化之后继续执行PreparedStatment语句的能力。
- JDBC支持mapDataToTimestamp接口:新增mapDataToTimestamp接口,在使用getString获取一个底层为date类型的数据时,实现了转换成java.sql.Timestamp类型的能力,提高兼容性。
# OCI
- 支持LOB函数:实现通过OCI驱动提供LOB数据类型实现对大型数据的存储和检索的功能。
- 支持事务函数:实现通过OCI驱动设置和控制事务的功能。
- 支持数字函数:实现通过OCI驱动提供OCI NUMBER与各种数值类型转换的功能。
- 支持字符串函数:实现通过OCI驱动提供处理字符串和管理内存的功能。
# ODBC
- 支持SQLExecDirectW函数,允许应用程序直接发送SQL命令到数据库(宽字符版本,它的后缀W表示使用宽字符(Unicode)版本),一步完成语句准备和执行,支持SELECT、INSERT、UPDATE等SQL语句。
- 支持SQLMoreResults函数,用于处理多结果集的场景。检查是否还有更多结果集可以处理,移动到下一个结果集。
- 支持GUID数据类型,是全局唯一标识符,通常用于标识数据库中的对象,通常以字符串形式表示,例如{12345678-1234-1234-1234-1234567890AB}。
- 支持取单列数据多次调用SQLGetData接口:ODBC支持取单列数据多次调用SQLGetData接口:通过PHP pdo_odbc方式调用ODBC驱动取单列数据时,是循环调用SQLGetData接口取数固定256,单列数据超过256需要支持循环调用。该版本YashanDB新增此功能,实现处理大字段数据能力,避免一次性加载大量数据导致内存溢出,提高了处理性能和灵活性。
- SQLColAttributeW支持获取属性SQL_DESC_BASE_TABLE_NAME和SQL_DESC_AUTO_UNIQUE_VALUE。
- SQLFetchScroll支持入参为SQL_FETCH_FIRST。
# Python
- 支持loadbalance负载均衡:Python驱动支持loadBalance负载均衡,在高可用主备和负载均衡场景下,可以配置多个IP/PORT,应用将自动识别出连接数最少的节点并连接,实现负责均衡的效果。
- 支持django orm框架:Python驱动支持Django ORM框架,为3.2.25版本,使开发人员轻松切换切换到YashanDB,而无需修改大量的代码,提高了代码的可移植性,提升开发效率。
# 其他驱动能力增强
- 适配Entity Framework 6框架:支持Entity Framework 6框架设置通过ADO.NET驱动连接YashanDB数据库,使用户可以使用EF6框架的功能开发YashanDB,可以有效提高开发效率和增强可维护性。
- 支持Perl驱动:兼容了Perl语言中和数据库进行通讯的标准接口DBI模块,包含一系列的方法、变量和常量,实现可使用Perl驱动连接YashanDB数据库进行SQL查询、处理结果集、事务管理等操作,相对于其他驱动,具备高效处理文本、易于学习和使用等优势。
- 支持.NET2.0驱动:新增支持.NET2.0驱动,实现基于VB.NET语言对.NET2.0平台开发的32位应用项目,丰富了支持的应用场景。
- 支持GO驱动和GORM框架:YashanDB支持GO驱动并适配GORM框架,支持开发人员使用Golang语言对YashanDB数据库进行开发,同时支持GORM框架,使得开发人员可以使用Go代码轻松实现数据库的增删改查操作,无需编写复杂的SQL语句。
- C驱动支持设置SQL执行超时时间:通过新增语句句柄属性设置yacSetStmtAttr接口,设置当前stmt的SQL执行超时时间,可以有效避免因长时间等待而导致的连接失败或查询超时问题。
# 工具能力
- yasboot支持主备滚动升级:在23.4.1版本之前,只支持从23.2.0.0及以上版本向版本号前三位相同但第四位不同的新版本进行滚动升级。该版本支持了从23.4.0.0及以上版本向版本号前三位不完全相同的新版本进行滚动升级,通过先把备库切换成逻辑备库,然后升级逻辑备库,完成之后做主备切换,再重新把原主库搭建成物理备库,有必要再回切。YashanDB支持使用运维工具yasboot一键式完成滚动升级操作。减少了升级维护时间和提高易用性。
- yasboot支持重建备库:在23.4版本之前,运维工具yasboot仅在部署时支持主备部署,但无法在备库出现故障重建备库。该版本通过新增yasboot node build相关命令,实现一键式重建备库的能力,提高易用性。
- yasrman新增恢复命令中指定mapfile路径,可通过该映射文件中的路径映射信息恢复对应的数据文件至指定位置,解决目标环境的磁盘分配空间与原来备份环境差异过大的场景,提高易用性。
- yasql支持@@功能和spool数值开头文件:新增SPOOL命令支持以数字开头作为输出文件名,用于将yasql会话中的输出内容保存到文件中,丰富了使用场景;当前版本之前,使用yasql支持@符号调用操作系统上的SQL文件执行,该版本增强次功能,通过@@实现调用当前脚本的路径作为相对路径的基准点SQL脚本文件,方便嵌套脚本,适合处理多层级的脚本调用。
- yasldr支持导入GIS数据多个SRID:在23.4版本之前,yasldr导入CSV格式的GIS数据时,一次导入只能使用参数指定一个SRID,不满足一个表存在多个SRID的使用场景,该版本通过对yasldr增加对Geometry列函数计算,实现导入不同行不同的SRID,提高导入GIS数据灵活性。
# 兼容性变更
# 产品规格
| 规格名称 | 规格类型 | 变更类型 | 描述 | 产品形态 |
|---|---|---|---|---|
| 全库闪回还原点数量 | 最大值 | 新增 | 8192 | 单机部署 |
| yasql单行字符数 | 最大值 | 变更 | 由32000修改为65534 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| TIME类型 | 取值范围 | 变更 | 由00:00:00.000000 ~ 23:59:59.999999修改为-838:59:59.999999 ~ 838:59:59.999999 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| VARCHAR类型 | 最大长度 | 变更 | 由32000Bytes修改为65534Bytes | 单机部署、共享集群部署、存算一体分布式集群部署 |
| RAW类型 | 最大长度 | 变更 | 由8000Bytes修改为65534Bytes | 单机部署、共享集群部署、存算一体分布式集群部署 |
| 语法模式(Yashan模式或mysql模式) | 切换方式 | 变更 | 由允许在会话中双向切换 修改为: 部署时通过yasboot package se gen命令的--mode参数指定语法模式,且部署为yashan模式后不允许切换到mysql模式,部署为mysql模式后可切换到yashan模式 | 单机部署 |
# 视图&系统表
| 视图名称 | 变更类型 | 描述 | 产品形态 |
|---|---|---|---|
| GV$AUD_UNIFIED DV$AUD_UNIFIED | 新增 | 显示审计信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$BUFFER_POOL_PART_STATISTICS V$BUFFER_POOL_PART_STATISTICS | 新增 | 显示数据缓存区的统计信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$DBLINK_XACT_STAT V$DBLINK_XACT_STAT | 新增 | 显示所有database link在沙箱进程yex_server上链接组及对应链接的的相关统计信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$ENCRYPTION_KEYS V$ENCRYPTION_KEYS | 新增 | 显示主密钥描述属性 | 单机部署、共享集群部署 |
| GV$ENCRYPTION_WALLE V$ENCRYPTION_WALLE | 新增 | 显示有关钱包状态和透明数据加密(TDE)的钱包位置的信息 | 单机部署、共享集群部署 |
| GV$EVENT_HISTOGRAM DV$EVENT_HISTOGRAM V$EVENT_HISTOGRAM | 新增 | 显示各等待事件从建库至今的等待次数、最大等待时间和总等待时间的直方图 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$EVENT_NAME V$EVENT_NAME | 新增 | 显示等待事件的信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$FILESTAT V$FILESTAT | 新增 | 显示已完成的物理读写次数、以文件级别完成的单块和多块I/O总数 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$FLASHBACK_DATABASE_LOG V$FLASHBACK_DATABASE_LOG | 新增 | 显示全库闪回功能的相关信息 | 单机部署 |
| GV$FLASHBACK_DATABASE_LOGFILE V$FLASHBACK_DATABASE_LOGFILE | 新增 | 显示全库闪回所有日志文件的信息 | 单机部署 |
| GV$GCS_RESOURCE V$GCS_RESOURCE | 新增 | 显示共享集群数据页面资源情况 | 共享集群部署 |
| GV$GLS_RESOURCE V$GLS_RESOURCE | 新增 | 显示共享集群数据锁资源情况 | 共享集群部署 |
| GV$GRC_AFFINITY_POLICY V$GRC_AFFINITY_POLICY | 新增 | 显示资源情况 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$GTID_RESOURCE V$GTID_RESOURCE | 新增 | 显示共享集群全局事务ID资源情况 | 共享集群部署 |
| GV$MEX_AREA V$MEX_AREA | 新增 | 显示MEX内存池AREA部分的信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$MEX_BASE V$MEX_BASE | 新增 | 显示MEX内存池BASE部分的信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$MEX_EDEN V$MEX_EDEN | 新增 | 显示MEX内存池EDEN部分的信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$MEX_POOL_MODULE V$MEX_POOL_MODULE | 新增 | 显示MEX内存池各个功能模块的信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$MEX_SESSION V$MEX_SESSION | 新增 | 显示各个会话中MEX内存池的使用情况 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$MEX_SESSION_MODULE V$MEX_SESSION_MODULE | 新增 | 显示各个会话中MEX内存池各个功能模块的使用情况 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$PROCEDURE_STATS V$PROCEDURE_STATS | 新增 | 显示PL Pool中自定义对象占用的内存信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$PX_STAGE V$PX_STAGE | 新增 | 显示STAGE信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$RESTORE_POINT V$RESTORE_POINT | 新增 | 显示全库闪回所有还原点的信息 | 单机部署 |
| GV$RSRC_SESSION_INFO V$RSRC_SESSION_INFO | 新增 | 显示会话使用资源相关信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$SEGSTAT V$SEGSTAT | 新增 | 显示segment级别统计信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$SQLCOMMAND V$SQLCOMMAND | 新增 | 显示所有SQL命令相关信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$XFMR_HIS_STAT V$XFMR_HIS_STAT | 新增 | 显示列式存储用于转换生成稳态数据的所有已经执行完毕的xfmr任务信息 | 单机部署、存算一体分布式集群部署 |
| GV$YFS_MEMORY_POOL V$YFS_MEMORY_POOL | 新增 | 显示当前节点中YFS内存池(MEMORY POOL)信息 | 共享集群部署 |
| GV$TABLESPACE_SET V$TABLESPACE_SET | 新增 | 显示当前节点的所有表空间集信息 | 存算一体分布式集群部署 |
| GV$TEMPSEG_USAGE V$TEMPSEG_USAGE | 新增 | 显示临时属性的segment信息 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$XFMR_STAT V$XFMR_STAT | 新增 | 显示列式存储用于转换生成稳态数据的所有还未执行完毕的xfmr任务信息 | 单机部署、存算一体分布式集群部署 |
| V$DF_RECOVERY_PROGRESS | 新增 | 显示表空间文件回放进度汇总信息 | 单机部署 |
| DBA_TSS_TABLESPACES | 新增 | 显示所有归属于表空间集的表空间 | 存算一体分布式集群部署 |
| DBA_OPTSTAT_OPERATION_TASKS | 新增 | 显示使用DBMS_STATS高级包和数据库级别执行的统计信息收集操作的历史记录 | 单机部署、共享集群部署 |
| DBA_OPTSTAT_OPERATIONS | 新增 | 图显示使用DBMS_STATS高级包和数据库级别执行的统计信息收集操作的历史记录 | 单机部署、共享集群部署 |
| GEOMETRY_COLUMN_TYPE_MODE | 新增 | 显示当前用户可访问的所有对子类型有限制条件的ST_GEOMETRY类型的列信息 | 单机部署、共享集群部署部署、存算一体分布式集群部署 |
| GV$ARCHIVE_DEST_STATUS V$ARCHIVE_DEST_STATUS | 变更 | * 新增DEST_NAME字段:表示参数名称 * 新增DB_UNIQUE_NAME字段:表示备库的名称 | 单机部署、共享集群部署部署、存算一体分布式集群部署 |
| GV$ARCHIVED_LOG V$ARCHIVED_LOG | 变更 | * 新增STATUS字段:表示归档的状态 * 新增ARCHIVED字段:表示在线redo是否被归档 * 新增DELETED字段:表示归档文件是否被删除 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$BUFFER_CONTROL V$BUFFER_CONTROL | 变更 | 新增OBJ字段:当前页面所属的对象ID | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$BUFFER_POOL_STATISTICS V$BUFFER_POOL_STATISTICS | 变更 | * 新增NAME字段:表示缓冲区的名称,当前固定为DEFAULT * 新增SET_MSIZE字段:表示缓冲区内可设置的最大的可容纳数据块数量 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DV$COLUMNAR_STAGE_QUOTA GV$COLUMNAR_STAGE_QUOTA V$COLUMNAR_STAGE_QUOTA | 变更 | 新增BULK_SIZE字段:表示每批次记录行数 | 单机部署、存算一体分布式集群部署 |
| GV$DATABASE V$DATABASE | 变更 | * 新增DBID字段:表示数据库ID * 新增NAME字段:表示数据库名称 * 新增CREATED字段:表示建库时间 * 新增RESETLOGS_CHANGE#字段:表示open resetlogs时的系统修改序列号(SCN) * 新增FLASHBACK_ON字段:表示是否开启全库闪回功能 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$DATAFILE V$DATAFILE | 变更 | 新增FILE#字段:表示数据文件的编号 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$DATATYPE V$DATATYPE | 变更 | 修改MAX_SIZE字段类型由SMALLINT变更为INTEGER | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$DICT_CACHE V$DICT_CACHE | 变更 | 新增NOLOGGING_INSTANCE_ID字段:表示当前字典缓存对象开启nologging的实例ID,若对象非nologging表,默认为-1 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DV$DICT_CURSOR GV$DICT_CURSOR V$DICT_CURSOR | 变更 | 新增CONTEXT字段:表示游标相关的上下文信息,为预留字段,默认为空 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$GRC_RESOURCE V$GRC_RESOURCE | 变更 | * 新增OBJ字段,当前页面所属的对象ID * 修改TYPE字段类型由TINYINT变更为INTEGER | 共享集群部署 |
| GV$INSTANCE V$INSTANCE | 变更 | 新增DATABASE_STATUS字段,表示数据库的状态 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$INSTANCE_RECOVERY V$INSTANCE_RECOVERY | 变更 | 新增PHASE字段,表示当前故障恢复的阶段 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$LOGFILE V$LOGFILE | 变更 | * 新增ARCHIVED字段:表示redo文件是否被归档 * 新增HEALTH字段:表示数据库加载时redo文件的健康度 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DV$RSRC_CONSUMER_GROUP GV$RSRC_CONSUMER_GROUP V$RSRC_CONSUMER_GROUP | 变更 | * 新增SESSION_SPA_MAX_USE_MEM字段:表示会话内存使用最大值 * 新增CONCURRENCY_LIMIT字段:表示资源计划配置最大并发数 * 新增CONCURRENCY_NUM字段:表示当前正在执行的资源密集型SQL数量 * 新增EXECUTION_WAITERS字段:表示等待执行的资源密集型SQL * 新增REQUESTS字段:表示资源组内已经执行的资源密集型SQL数量 * 新增QUEUE_NUMBER字段:表示排队叫号值 * 新增CONCURRENCY_LIMIT_HIT字段:表示同时执行资源密集型SQL数量达到上限次数 * 新增QUEUED_TIME字段:表示资源组内所有会话累计等待执行时间 * 新增QUEUE_TIMEOUTS字段:表示资源组内会话累计等待调度超时次数 * 新增PARALLEL_DOWNGRADE_TIMES字段:表示资源组内出现并行资源降级次数 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$SESSION V$SESSION | 变更 | * 新增RETRY_CNT字段:表示当前命令的重试次数 * 新增RETRY_INFO字段:表示当前命令的重试错误码 * 新增EXEC_STATUS字段:表示执行状态 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| GV$TABLESPACE V$TABLESPACE | 变更 | 新增ENCRYPT_ALGO字段:表示表空间加密算法,如果是非加密表空间,该字段值为空 | 共享集群部署 |
| DV$REPLICATION V$REPLICATION | 变更 | 新增TRIGGER_COND_FAILOVER字段:表示主库是否触发了条件故障切换 | 存算一体分布式集群部署 |
| V$MYSQL_COLLATION | 变更 | 新增YAS_COLLATION_ID字段:表示MySQL字符序对应的YashanDB字符序ID | 单机部署、共享集群部署、存算一体分布式集群部署 |
| V$YSTREAM_STAT | 变更 | 新增CAPTURE_LFN字段:表示已解析的redo日志LFN | 单机部署、共享集群部署 |
| DBA_AUDIT_MGMT_CLEANUP_JOBS | 变更 | 修改START_DATE、END_DATE、LAST_START_DATE、NEXT_RUN_DATE 字段类型由TIMESTAMP变更为TIMESTAMP WITH TIME ZONE | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_DATA_FILES | 变更 | * 新增ONLINE_STATUS字段:表示文件状态 * 新增AUTOEXTENSIBLE字段:表示文件是否可以自动扩展 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_INDEXES | 变更 | 新增ORPHANED_ENTRIES字段:表示全局索引是否包含孤儿键值对 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_JOBS | 变更 | 修改LAST_DATE、THIS_DATE、NEXT_DATE字段由TIMESTAMP变更为TIMESTAMP WITH TIME ZONE | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_OUTLINES | 变更 | 新增SQL_ID字段:表示SQL_ID语法OUTLINE对应的SQL语句ID值 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_RSRC_PLAN_DIRECTIVES | 变更 | 新增CONCURRENCY_LIMIT字段:表示资源使用组内允许同时执行资源密集型SQL的数量 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_SCHEDULER_JOBS | 变更 | 修改LAST_DATE、THIS_DATE、LAST_START_DATE、NEXT_RUN_DATE字段由TIMESTAMP变更为TIMESTAMP WITH TIME ZONE | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_SEGMENTS | 变更 | 新增SEGMENT_SUBTYPE字段:表示segment子类型 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_TABLES | 变更 | * 新增DEGREE字段:表示表的并行度 * 新增INITIAL_EXTENT字段:表示segment的首个extent大小,单位为bytes | 单机部署、共享集群部署、存算一体分布式集群部署 |
| DBA_TABLESPACES | 变更 | 新增BIGFILE字段:字段兼容,无实际意义 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| UNIFIED_AUDIT_TRAIL | 变更 | * 新增YLS_POLICY_NAME字段:表示行访问控制策略名称 * 新增YLS_GRANTEE字段:表示应用行访问控制策略的用户 * 新增YLS_MAX_READ_LABEL字段:表示用户的最大读标签 * 新增YLS_MAX_WRITE_LABEL字段:表示用户的最大写读标签 * 新增YLS_MIN_WRITE_LABEL字段:表示用户的最小写读标签 * 新增YLS_STRING_LABEL字段:表示标签内容 * 新增YLS_LABEL_COMPONENT_TYPE字段:表示组件类型 * 新增YLS_LABEL_COMPONENT_NAME字段:表示组件名称 * 新增RLS_INFO字段:表示执行语句中表关联的行访问控制策略名称 | 单机部署、共享集群部署、存算一体分布式集群部署 |
# 系统配置参数
| 配置参数 | 修改类型 | 描述 | 产品形态 |
|---|---|---|---|
| DB_FLASHBACK_FILE_DEST_SIZE | 新增 | 全库闪回所产生的日志文件能占据的最大空间限制 | 单机部署 |
| DB_FLASHBACK_RETENTION_TARGET | 新增 | 全库闪回所产生的日志文件的最大保留时长 | 单机部署 |
| WALLET_ROOT | 新增 | 指定钱包的根路径 | 单机部署、共享集群部署 |
| BUDDY_INSTANCE_SCAN_INTERVAL | 变更 | 默认值从64M修改为128M | 共享集群部署 |
| BUDDY_INSTANCE_SCAN_TIMEOUT | 变更 | 默认值从10修改为60 | 共享集群部署 |
# 升级说明
| 产品形态 | 升级说明 | 升级方式 |
|---|---|---|
| 单机部署 | 支持从v22.2版本升级到v23.4版本 支持从v23.1版本升级到v23.4版本 支持从v23.2版本升级到v23.4版本 支持从v23.3版本升级到v23.4版本 | 离线升级 |
| 共享集群部署 | 支持从v23.1版本升级到v23.4版本 支持从v23.2版本升级到v23.4版本 支持从v23.3版本升级到v23.4版本 | 离线升级 |
| 存算一体分布式集群部署 | 支持从v23.1版本升级到v23.4版本 支持从v23.2版本升级到v23.4版本 支持从v23.3版本升级到v23.4版本 | 离线升级 |
# 周边配套
YashanDB v23.4版本推荐使用的平台工具版本如下:
| 组件 | 配套版本 |
|---|---|
| Yashandb JDBC驱动程序(JDBC) | 1.9.3 1.9.3-jre6 |
| Yashandb ODBC驱动程序(ODBC) | 23.4.1.100 |
| Yashandb C驱动程序(C) | 23.4.1.100 |
| Yashandb C#驱动程序(ADO.NET) | 1.6.1 |
| Yashandb Python驱动程序(Python) | 1.2.0 |
| YashanDB 客户端(yasql) | 23.4.1.100 |
| YashanDB 监控运维工具(YCM) | 23.4.1.0 |
| YashanDB 迁移平台工具(YMP) | 23.4.1.0 |
| YashanDB 开发者工具 | 23.4.1.0 |
# 版本约束
| - | 约束项 | 产品形态 |
|---|---|---|
| 1 | 增加节点时,主备集群所有节点需处于正常可用状态,增加节点后数量不超过原有规模约束 | 单机部署 |
| 2 | 删除节点操作时,不支持直接删除主节点,并且不支持将主备集群全部节点删除 | 单机部署 |
| 3 | 增加节点时,集群所有节点需处于正常可用状态。不可组内无主节点时扩容 | 存算一体分布式集群部署 |
| 4 | 删除节点操作时, 不支持直接删除主节点,并且不支持将DN组/MN全部节点删除 | 存算一体分布式集群部署 |
| 5 | 统计信息收集过程中,如果存在CN故障,则需要恢复CN后重新收集 | 存算一体分布式集群部署 |
| 6 | 扩容CN后,需要重新收集统计信息,如果有使用OUTLINE,则需要在收集统计信息完成后,重建OUTLINE | 存算一体分布式集群部署 |
| 7 | insert into select from外部表,只支持insert写入复制表的行表 | 存算一体分布式集群部署 |
| 8 | drop user失败或部分成功,则该用户不允许登录,也不允许创建该用户下的表、视图、索引、AC以及DBLINK对象 | 存算一体分布式集群部署 |
| 9 | 过程体中的SQL语句存在语法错误时,返回的错误消息的Position不准确 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| 10 | 执行blob转字符串时,如blob不是合法的utf8编码,行存引擎会忽略不合法的字符,列存引擎会返回错误 | 单机部署、共享集群部署、存算一体分布式集群部署 |
| 11 | SQLMAP原始语句及映射语句长度不得超过32000字节 | 单机部署、共享集群部署、存算一体分布式集群部署 |

