今天,MogDB 5.0.0和 Uqbar 2.0.0正式在官网上线并开放下载。
MogDB 5.0.0
MogDB 5.0.0作为LTS版本,基于3.0/3.1版本进一步增强,并引入了 openGauss 5.0.0的全部特性;同时增加多项自研特性。
新增特性:
1、集成 openGauss 5.0.0新特性
-
高性能:基础算子性能提升
-
高安全:用户级别审计
-
高可用:CM支持VIP管理
-
高可用:CM支持两节点部署
-
高可用:CM磁盘只读检测能力增强
-
高可用:CM易用性提升
-
高智能:异常检测支持自配置
-
企业级特性:事件触发器
-
应用开发接口:JDBC能力增强
-
兼容性:兼容 MySQL 包括数据类型、操作符、系统函数、DDL、DML、DCL、PL/SQL等在内的绝大部分常用语法,实现应用近乎零修改迁移。
2、并行索引扫描
在使用索引进行查询(IndexScan、IndexOnlyScan)的场景,使用多线程并行对索引进行扫描,典型场景下端到端性能可提升10%以上。
-
支持普通表及分区表
-
根据代价评估自动判断是否启用并行索引扫描机制
-
优化Stream算子,提高并行扫描线程间数据合并处理速率
3、并行查询性能优化
对以下算子进行并行查询改造,更好地利用多核处理器和内存资源,提升算子查询性能:
-
并行sort merge join:当系统配置允许并行执行,并且执行计划适合并行执行时,可以使用多个线程同时扫描和匹配关联列,从而加速连接操作的执行速度;
-
自适应两阶段hash agg.:当执行聚合查询时,根据实际数据和查询条件的特点,在适合自适应两阶段哈希聚合的场景下,可以避免不必要的内存和磁盘开销,提升查询性能约6%至17%;
-
运行时结果缓存:在部分查询中,如果查询结果可以被重用,MogDB 会将结果缓存在内存中,以便后续查询可以重复使用,这样可以减少重复计算和磁盘访问的开销,提高查询性能。
4、排序算子性能优化
针对不同场景的排序算子进行针对性优化,降低资源消耗,提升排序算子性能:
-
快速排序:对于定长字段类型的排序,通过消除大量比较函数调用开销,通常可以获得2%~5%的性能提升;
-
增量排序:对指定字段组合进行排序时,当其中前缀字段组合可以利用上索引或中间查询结果的有序性时,将全量排序优化为增量排序,从而减少排序需要处理的数据量,进而提升性能,配合limit场景使用时,可以带来10~100倍的性能提升效果。
5、SQL Bypass增强
SQL Bypass是针对简单SQL的查询优化技术,本版本扩展了SQL Bypass的适用场景:
-
带有非索引列作为过滤条件的查询语句,通过使能SQL Bypass功能,大数据量下查询性能可提升10%以上,PBE场景下性能提升效果更加明显。
6、行存表行级压缩
在数据写入AStore行存表时,后台对数据进行压缩,典型场景下可以获得50%的存储空间节省,同时通过后台流控技术减少对系统资源的占用,性能几乎无损。
-
以记录行为单位进行压缩解压,对于OLTP点查场景,只需要解压一行数据,没有解压放大,能够获得更好的查询性能;
-
内存中的页面为压缩状态,在相同Shared Buffer大小下可以提供更高的内存命中率,进而提升查询性能;
-
在MVCC(多版本并发控制)查找历史版本链时,无需解压中间版本,只需要解压目标版本的数据行。这样可以大大减少解压的工作量,提高查询性能;
-
采用多数据页共享字典的方案,相比单表训练字典的方案,压缩字典可以随数据的变更自动演进,没有字典逐渐失效的问题。
7、非唯一索引压缩
当数据表中创建有B+Tree类型的非唯一索引时,索引中存在多个重复的key/value键值对,通过将多个相同key的key/value键值对合并压缩成一个key->value list的方式,能够获得50%的索引空间节省,同时还能提升索引页面的内存命中率,进而提升index scan的性能。
8、gstrace增强
gstrace是用于跟踪内核代码执行路径、记录内核数据结构和分析代码性能的工具,可以帮助开发人员深入了解内核代码的执行情况,提高问题定位效率,本版本在以下几个方面进行增强:
-
支持在生产环境下进行追踪观测:gstrace可以在不停库的情况下工作,允许用户指定一个或多个模块和函数进行追踪观测,这样可以避免对系统的正常运行造成干扰,并保证生产环境的稳定性;
-
导出SQL执行细节:gstrace可以记录SQL执行的详细信息,包括查询语句、执行计划、运行时间等等,这些信息可以用于后续的故障分析,帮助快速定位和解决问题,从而提高诊断效率;
-
支持追踪分析的模块:目前gstrace主要支持追踪walwriter模块、pagewriter模块和checkpointer模块,这些模块在数据库系统中具有重要的作用,通过追踪它们的执行路径和记录相关的数据结构,可以深入了解系统的运行情况,从而进行性能优化和故障排查;
-
轻量级锁的导出分析:gstrace还支持对轻量级锁进行导出分析,轻量级锁是一种用于提高多线程并发访问效率的锁机制,在数据库系统中广泛应用,通过对轻量级锁的追踪和分析,可以帮助发现和解决潜在的线程安全问题;
-
追踪会话和线程:gstrace支持追踪一个或多个会话和线程,这样可以精确地定位到特定的会话或线程,进行详细的分析和调试;
-
gstrace DCF模块功能增强:本版本增加了针对DCF模块打开trace的功能,通过指定gstrace追踪DCF模块可以获取DCF相关的函数调用信息及关键数据结构的具体信息,从而帮助开发调试人员快速定位问题,提高诊断效率。
9、CM (Cluster Manager)集群支持两节点部署
CM集群支持两节点部署,通过引入第三方网关作为仲裁节点实现多数派仲裁机制,将集群起配成本从3节点降低为2节点:
-
当集群网络正常时,CM主备实例中的任意一方发起选举时,只要与第三方网关IP通信成功,就会增加自身的票数,以此实现多数派决策;
-
当集群网络状态异常时,CM主备实例中的任意一方发现和对端CM实例通信异常,但与第三方网关IP通信正常,就会认为对端可能存在故障。如果是CM主节点则会执行降备流程,如果是CM备节点则会根据配置项来判断是否执行升主实现自动故障切换;
-
提供可选配置来决定网络分区场景下备机是否升主,避免脑裂问题的发生。
10、Oracle 兼容性增强
【1】支持procedure / function / package的end后的name和 Oracle 保持一致
【2】支持PLPGSQL subtype
【3】视图增加%rowtype属性
【4】支持 Oracle DBLink 兼容
【5】支持包内常量作为函数或者过程入参的默认值
【6】支持current_date,current_time等保留关键字可以作为表的字段名
【7】支持Insert All特性
【8】For Update支持外连接
【9】支持dbms_utility.format_error_backtrace
【10】支持在数组extend的参数中传入数组的count属性
【11】支持 Oracle 中的自定义type数组
【12】支持Merge into命中索引时增加使用bypass方法
【13】支持where current of的写法
【14】Agg函数支持Keep子句
【15】Agg支持场景扩展
【16】支持两个date类型的数据相减,返回numeric类型
【17】支持表函数table()
【18】支持创建 package function procedure时,去除type类型转换提示
【19】支持q quote转义字符
【20】支持无参数function的同义词调用可以不加括号
【21】支持增加存储过程及函数参数的nocopy属性
【22】Agg(distinct)性能优化
修复缺陷:
1、集成 openGauss 5.0.0修复缺陷
-
I6NVAB 3.0.3版本灰度升级到5.0.0版本后回滚和强制回滚均报错;
-
I6NK8U 修改发布/订阅名为已存在的名称,报错ERROR: unsupported object class xxx;
-
I6N2QD similar to在使用escape时,逃逸字符为汉字,报错;like逃逸字符为汉字,成功;
-
I6MOCS 兼容性b库下,对于二级分区表分区键为year函数时,在进行add partition操作后,使用pg_get_tabledef会报未知错误;
-
I6LMTU B兼容模式下,不支持反引号包裹对象;
-
I6KO5S 【资源池化】共享存储升级,执行升级命令,升级失败;
-
I6KRZ6 【资源池化】dsscmd du -p +data -f a命令实际上只计算了目录,没有计算文件;
-
I6IZH9 【资源池化】reform失败没有进入下一轮,集群卡主;
-
I6O0K6 2.0.1、2.0.0和2.0.5版本不带cm工具灰度升级到5.0.0带cm工具后提交失败;
-
I61OX7 cm_agent参数log_dir值改为空无合理报错,且重启cm_agent生效后不再生成新的cm_agent日志;
-
I6K2BZ 变色龙迁移由于双引号问题导致部分迁移失败;
-
I6KIWQ Debezium+kafka增量迁移,timestamp等时间戳类型,迁移后时间有误;
-
I6I640 使用数据校验工具校验15W张表的数据时,校验进程一直是卡住状态。
2、MogDB 5.0.0版本修复缺陷
-
修复同样的sql中对同一张表进行采样,指定相同的随机数种子seed,返回结果不同的问题;
-
修复xlogdump导出identity full的delete event存在的问题;
-
dolphin在开启线程池情况下,概率性出现mutex死锁问题;
-
备机扩展段页式空间时异常退出;
-
【TPCH】ERROR: Stream plan check failed;
-
TPCH 列存下Q20选择错误的查询计划导致查询慢;
-
1000个warehouse高并发tpcc执行半小时后switchover耗时过长;
-
gpi_interval测试样例在mogdb_function上偶发性报错。
平台支持:
MogDB 5.0.0支持以下操作系统及CPU架构组合:
Uqbar 2.0.0
Uqbar 2.0.0是首个LTS版本,其继承了1.1.0的功能,在保留 openGauss 的联机事务处理(OLTP)能力的基础上,针对时序数据处理场景进行了功能扩展和针对性优化,增强了时序表功能,对写入性能和压缩率进行了提升;新增持续聚合功能、支持Prometheus数据存储和查询、时序聚合算子增强(包括time_bucket_gapfill和histogram)以及支持LATERAL语法。
基础功能:
时序生命周期策略
时序生命周期策略用于时序数据的生命周期管理,通过定义时序生命周期策略可指定数据的保留期限和时间分区大小。时序生命周期策略管理功能包括:新建时序策略、修改时序策略、删除时序策略、设置数据库默认时序策略。
时序表管理
时序数据组织和存储的基本对象,与关系型数据库中表的定义类似。创建时序表时需要指定使用的时序策略,时序表按照时序策略中定义的时间分区对数据自动分区,并自动按时间对齐数据。时序表管理功能包括:新建时序表、修改时序表、删除时序表。
数据压缩
支持自动和手动压缩存储时序数据。Uqbar 底层采用行列混合存储引擎存储时序数据,后台自动将行存数据转换为列存,同时对数据进行压缩。数据压缩功能包括:自动后台压缩、手动执行压缩命令。
过期删除
根据时序生命周期策略,对时序表上超出保留期限的数据,按照分区粒度自动删除。过期删除功能包括:自动后台删除、手动执行删除命令。
持续聚合管理
持续聚合功能是后台对时序数据执行周期性查询,并保存查询结果,可用于查询优化及时序数据降采样等场景。持续聚合管理包括:创建持续聚合、修改持续聚合、删除持续聚合。
高可用
本版本采用主备架构,最多支持一主七备,主机提供读写能力,备机提供查询能力,支持主备自动故障切换。
备份与恢复
支持使用备份恢复工具对数据进行备份和恢复。
运维工具
数据库安装工具PTK支持数据库自动化安装部署、图像化管理工具Manager提供数据库监控、备份恢复管理、告警管理等。
第三方工具支持:
-
支持对接 Kafka 消息组件,主动从 Kafka 消费时序数据;
-
支持对接可视化工具 Grafana,通过 Grafana 对时序数据数据进行可视化展示;
-
支持对接 Prometheus,作为 Prometheus 的外置时序数据数据存储,提供更好的写入和查询性能。
时序场景优化:
写入性能优化
针对时序数据特征优化时序数据写入性能,支持7*24小时不间断持续大压力写入,支持时序数据乱序写入。
查询优化
-
通过向量化查询引擎,以及并行查询能力,提供海量数据的高性能查询分析能力;
-
支持倒排索引,支持使用任意标签组合对时序数据进行查询。
压缩率优化
-
将标签与数据分离存储,避免标签数据重复存储;
-
根据数据类型和特征,使用时序专用压缩算法进行压缩,典型场景下可获得10倍以上的压缩率。
时序查询算子
除了关系表已支持的聚合算子,如sum、avg、count等,新增支持时序场景常用的聚合算子:
-
First:数据中符合条件的时间戳最小的数据
-
Last:数据中符合条件的时间戳最大的数据
-
Time_bucket:按照指定的时间窗口对数据进行分组聚合
-
Time_bucket_gapfill:按照指定的时间窗口对数据进行分组聚合,并对缺失的数据按照指定规则插值填充
-
Histogram:对数据按照指定规则生成直方图数据
时序视图:
-
timeseries_views.bgw_job:后台任务视图,可用于查询时序表上有哪些后台任务在执行;
-
timeseries_views.compression_chunkgroup:压缩率视图,按chunkgroup统计,可用于展示时序表的压缩率;
-
timeseries_views.compression_table:压缩率视图,按时序表统计,可用于展示时序表的压缩率;
-
timeseries_views.continuous_aggregation:持续聚合视图,可用于查看时序表上的持续聚合;
-
timeseries_views.policies:时序策略视图,可用于查看当前数据库下的时序策略;
-
timeseries_views.tschunkgroup:时序表视图,按chunkgroup展示,可用于查看时序表的分区;
-
timeseries_views.tstable:时序表视图,按时序表展示,可用于查看当前数据库下的时序表。
缺陷修复:
-
数据过期删除偶现coredump问题;
-
copy数据过程中内存占用过高,疑似内存泄露问题;
-
guc参数timeseries_compression_delay重新设置后,数据库reload出现coredump问题;
-
数据压缩后执行field或time列等值查询,偶现进程退出。
平台支持:
Uqbar 2.0.0支持以下操作系统及CPU架构组合:
目前,MogDB 5.0.0和Uqbar 2.0.0已在官网开放下载,欢迎访问 https://mogdb.io/download/ 下载体验。