openGauss 6.0.0 LTS,历时18个月的开发周期,凝聚社区940名开发者,累计合入PR 9970个,兼容前代版本特性功能,同时在内核能力、DataPod资源池化架构、DataKit数据全生命周期管理工具能力、生态兼容性等方面有着显著的提升。
openGauss 6.0功能特性介绍
相对于openGauss 5.0.0 LTS版本,本次新增诸多功能特性,以内核能力和四高能力进行介绍,如下:
内核能力增强
oGEngine原位更新存储引擎增强:大压力下性能抖动小于3%,存储空间利用率相比AStore提升15%;支持SMP并行查询(支持顺序扫描算子);其他可靠性全面增强。
存储过程增强:游标支持嵌套定义,cursor定义中可以再定义子cursor。通过TYPE语法定义动态游标 REF CURSOR 时,支持通过RETURN指定游标返回的数据类型。支持存储过程覆盖率测试并输出 html 报告,同时允许创建 procedure 时忽略依赖关系进行创建。
SQL功能增强:支持PIPELINED管道函数,函数可以返回行集合。SELECT语句支持通过ROTATE和NOT ROTATE子句进行行列转换。
其他增强:支持全链路跟踪能力,实现追踪并记录jdbc查询接口执行sql的端到端网络耗时,并记录在数据库dbe_perf.statement视图、statement_history表中。慢SQL统计默认开启执行计划统计。
内核四高能力
高性能
主备复制性能:支持 UWAL 组件,加速主备 XLog 复制,提升一主一同步备场景下TPCC性能20%。优化主备锁机制控制粒度和有序队列加锁逻辑,提升一主一同步备场景下TPCC性能10%。对SyncRepLock的控制粒度进行修改,并且对原有的WalSnder、Backends所共同控制的加锁有序队列机制进行修改,去除大粒度的加锁同步操作。
北向网络性能:借助高性能用户态网络协议栈(Gazelle),基于区域大页划分、动态绑核、全路径零拷贝等技术,避免资源的共享开销。基于数据读写与协议处理分离的设计,避免多线程锁竞争,从而达到性能最大化。
分区表性能:在多分区表场景(大于 3000 分区)下,TPCC 数据导入耗时下降 13%,TPCC 性能提升 30%;分区表数据操作(查询、插入、更新、删除等)耗时下降 50%。
SMP场景扩展:函数/PACKAGE支持指定并行相关参数,NO SCROLL游标和作为并行函数入参的游标表达式支持并行执行。
基础算子性能:Insert、Update、Delete、索引扫描性能提升 15%以上。
高可用
CM集群管理组件支持在资源池化场景下,通过CM切换备集群首备,实现备集群首备切换能力。
CM两节点部署,支持心跳网络,支持多个三方ip检测,减少脑裂情况发生。
逻辑复制功能新增支持Alter/Truncate/Rename 表和分区表DDL语法支持。使得大部分的常用DDL语法均支持逻辑复制,提供逻辑复制功能可用性。
支持异步备升主数据找回能力,新增 gs_retrieve 工具实现对旧主未同步到异步备的数据通过逻辑解码的方式找回,满足异步备升主场景 RPO≈0。
发布订阅支持用户自定义冲突解决方案,构建完整异地双活能力。
高智能
新增 DataVec 向量数据库插件,作为为专有大模型的向量数据存储和检索的底座,支持向量数据的存储、相似度计算,支持针对向量数据建立索引(IVFFLAT、HNSW),加速查询。
高安全
支持对服务启停操作进行审计、对数据库备份恢复操作进行审计。
发布安全配置基线以及安全配置巡检工具。提供工具自动化检测数据库的各项配置是否符合安全指导并提供配置建议,支持自动修改不安全的参数。
抽象加解密与密钥管理适配层,支持统一接口对接第三方密钥管理服务和加密机,兼容第三方 KMS。
关于内核能力的实践示范
环境准备
服务器配置为操作系统为CentOS 7.6。
openGauss版本:官网下载openGauss 6.0 LTS 企业版。

我们可以在官网找到详细的安装指南,一步步按照说明文档,即可安装成功,这里不作详述。

创建单节点XML配置文件
<?xml version="1.0" encoding="UTF-8"?><ROOT><!-- openGauss整体信息 --><CLUSTER><!-- 数据库名称 --><PARAM name="clusterName" value="dbCluster" ><!-- 数据库节点名称(hostname) --><PARAM name="nodeNames" value="node1_hostname" ><!-- 数据库安装目录--><PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" ><!-- 日志目录--><PARAM name="gaussdbLogPath" value="/var/log/omm" /><!-- 临时文件目录--><PARAM name="tmpMppdbPath" value="/opt/huawei/tmp" /><!-- 数据库工具目录--><PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" /><!-- 数据库core文件目录--><PARAM name="corePath" value="/opt/huawei/corefile" /><!-- 节点IP,与数据库节点名称列表一一对应 --><!-- 如果用ipv6 替换ipv4地址即可 如:<PARAM name="backIp1s" value="2407:xxxx:xxxx:xxxx:xxxx:xxxx:caa:2335"/> --><PARAM name="backIp1s" value="192.168.0.1"/></CLUSTER><!-- 每台服务器上的节点部署信息 --><DEVICELIST><!-- 节点1上的部署信息 --><DEVICE sn="node1_hostname"><!-- 节点1的主机名称 --><PARAM name="name" value="node1_hostname"/><!-- 节点1所在的AZ及AZ优先级 --><PARAM name="azName" value="AZ1"/><PARAM name="azPriority" value="1"/><!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --><!-- 用ipv6安装部署时 换上ipv6地址即可,后面xml文件示例也是同样操作 --><PARAM name="backIp1" value="192.168.0.1"/><PARAM name="sshIp1" value="192.168.0.1"/><!--dbnode--><PARAM name="dataNum" value="1"/><PARAM name="dataPortBase" value="15400"/><PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/><PARAM name="dataNode1_syncNum" value="0"/></DEVICE></DEVICELIST></ROOT>

测试用例举例
在openGauss数据库中,存储过程和SQL功能增强的语法如下:
游标支持嵌套定义
CREATE OR REPLACE PROCEDURE nested_cursor_example()LANGUAGE plpgsqlAS $$DECLAREouter_cursor CURSOR FOR SELECT id FROM outer_table;inner_cursor CURSOR FOR SELECT name FROM inner_table WHERE id = outer_id;BEGINOPEN outer_cursor;LOOPFETCH outer_cursor INTO outer_id;EXIT WHEN NOT FOUND;OPEN inner_cursor;LOOPFETCH inner_cursor INTO inner_name;EXIT WHEN NOT FOUND;-- 处理inner_nameEND LOOP;CLOSE inner_cursor;END LOOP;CLOSE outer_cursor;END;$$;
动态游标(REF CURSOR)
CREATE OR REPLACE PROCEDURE dynamic_cursor_example(OUT ref_cursor REFCURSOR)LANGUAGE plpgsqlAS $$BEGINOPEN ref_cursor FOR SELECT * FROM some_table;END;$$;
存储过程覆盖率测试并输出HTML报告
openGauss本身不直接支持存储过程覆盖率测试和生成HTML报告的功能。通常需要借助外部工具或脚本来实现这些功能。例如,可以使用<font style="color:rgb(27, 28, 33);">pgTAP</font>
进行单元测试,然后通过其他工具生成覆盖率报告。
忽略依赖关系创建存储过程
CREATE OR REPLACE PROCEDURE create_procedure_ignore_dependencies()LANGUAGE plpgsqlAS $$BEGIN-- 存储过程逻辑END;$$;
PIPELINED管道函数
CREATE OR REPLACE FUNCTION pipelined_function()RETURNS SETOF some_table AS $$BEGINFOR record IN SELECT * FROM some_table LOOPRETURN NEXT record;END LOOP;RETURN;END;$$ LANGUAGE plpgsql;
ROTATE和NOT ROTATE子句进行行列转换
SELECT * FROM (SELECT * FROM some_table) AS rotated_table ROTATE (1); -- 将第一列旋转到最后
通过以上测试用例的全面验证,我们可以确认openGauss内核在多个关键方面展现出了强大的能力。这些测试覆盖了从基础功能到高级特性等多个维度,包括但不限于以下几个方面:
数据一致性与完整性:所有读写操作均能保证数据的一致性和完整性,即使在并发环境下也能正确处理事务冲突。
性能表现:无论是单表查询还是复杂联表查询,openGauss都表现出了优秀的响应速度;对于大数据量插入、更新等操作也有着良好的吞吐量。
扩展性与伸缩性:支持水平拆分(分片)及垂直扩展(增加节点),能够根据业务需求灵活调整集群规模,同时保持较高的系统稳定性。
故障恢复机制:具备完善的备份恢复策略,包括但不限于物理备份、逻辑备份以及基于时间点的恢复等功能,确保在发生故障时可以快速恢复到最近一次正常状态。
安全性保障:提供了多种安全措施来保护数据库免受未授权访问,如用户认证、权限控制、加密传输等。
兼容性与生态支持:不仅兼容主流SQL标准,还对PostgreSQL生态系统中的工具和应用程序有良好的支持,便于迁移和使用。
综上所述,经过严格的测试流程后,openGauss内核证明了自己在功能性、性能、可靠性等方面均达到了预期目标,是一款值得信赖的企业级关系型数据库管理系统。未来随着更多应用场景的探索和技术迭代升级,相信openGauss将会在更广泛的领域发挥重要作用。
点击阅读原文跳转作者文章




