openGauss都做了哪些算子优化工作?
openGauss在代码里面实现了大量的算子级优化工作,为了更进一步便于用户理解,我们对这些工作进行了总结,并且对内部具体的一些算法进行详细介绍,其总结如下。
【索引扫描算子优化】
对索引扫描算子进行了一定程度的重构与优化,以提升算子性能。优化主要包括以下几个方面:
识别到程序中存在影响性能的噪点,对其进行屏蔽;
在现有执行流程下,为多数场景下的高频操作建立fast-path,以提高执行效率;
对一些数据结构与算法的实现进行了优化重构,以提升性能。最终经过测试,IndexScan算子性能提升10%,IndexOnlyScan算子性能提升30%。
【函数依赖】
函数依赖,是多列统计信息的一种,可以描述属性之间的关联关系,其主要用途是提高选择率估算的准确性。在引用函数依赖特性之前,数据库会使用条件独立假设的方法来估算选择率。举一个生活中的例子,在一个班级中,男女生的比例是1:1,喜欢瑜伽的人数占比为20%,身高175cm以下的人数占比为50%。我们可以说喜欢瑜伽且身高在175cm以下的女生的占比为50% * 20% * 50% = 5%吗?显然这个计算结果会比实际结果略低,因为这几个属性之间有关联关系,喜欢瑜伽的人中女生占多数,女生的身高较男生普遍偏低。函数依赖特性就是用于解决此类问题,在典型场景下对于高频数据的查询,选择率提升20%;对于中频数据的查询,选择率提升10倍;对于典型场景,选择率提升70倍。
【AGG函数共享转移状态】
AGG函数的执行分为3个阶段:初始化转移状态、执行transition函数、执行final函数。AGG函数共享转移状态特性目的在于调整转移状态和transition函数,实现资源共享。例如执行"SELECT avg(a), sum(a) FROM t;",此时的转移状态初始化后为两个参数(total, count),然后遍历表的所有元组,total执行累加操作,count执行自增操作,最后把total/count和total分别作为avg函数和sum函数的返回结果。经验证,SQL语句"SELECT avg(a), sum(a) FROM t;"的总耗时缩短48%左右。对其他可以共享转移状态的AGG函数,也可以实现不同程度的性能提升。
【Parser优化】
优化Parser阶段中关键字检查模块,将关键字查找算法由原来的二分查找算法优化为哈希查找算法,同时优化关键字内存数据结构,cache访问更友好,优化后Parser阶段的性能提升10%。
【新型选择率模型】
新型选择率模型充分利用基于直方图的统计信息,平衡计算量与准确性,充分考虑数据分布情况,通过轻量的计算,提高对低频值的估算准确率,能够使得优化器生成更优的执行计划,进而提高查询效率。
【通信优化】
提升通信整体性能,调整通信逻辑,默认使用非阻塞通信方式,当需要阻塞通信语义时,利用latch轻量锁机制,降低通信阶段耗时。轻量通信方式的开启与否通过POSTMASTER级别的GUC参数light_comm控制,当light_comm的值为ON / TRUE时,将开启轻量通信。
【表达式展平化】
基于非递归、操作码方式实现数据库中表达式计算,致力于通过展平化表达式信息减少计算过程中堆栈使用、函数调用等开销,提升语句的执行性能。
后续,openGauss还会持续对基础算子进行优化,不断完善openGauss社区竞争力。
openGauss: 一款高性能、高安全、高可靠的企业级开源关系型数据库。
🍒如果您觉得博主的文章还不错或者有帮助的话,请关注一下博主,如果三连收藏支持就更好啦!谢谢各位大佬给予的鼓励!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Seata:连接数据与应用
作者:季敏(清铭)Seata 开源社区创始人,分布式事务团队负责人。 本文主要介绍分布式事务从内部到商业化和开源的演进历程,Seata 社区当前进展和未来规划。 Seata 是一款开源的分布式事务解决方案,旨在为现代化微服务架构下的分布式事务提供解决方案。Seata 提供了完整的分布式事务解决方案,包括 AT、TCC、Saga 和 XA 事务模式,可支持多种编程语言和数据存储方案。Seata 还提供了简便易用的 API,以及丰富的文档和示例,方便企业在应用 Seata 时进行快速开发和部署。 Seata 的优势在于具有高可用性、高性能、高扩展性等特点,同时在进行横向扩展时也无需做额外的复杂操作。 目前 Seata 已在阿里云上几千家客户业务系统中使用,其可靠性得到了业内各大厂商的认可和应用。 作为一个开源项目,Seata 的社区也在不断扩大,现已成为开发者交流、分享和学习的重要平台,也得到了越来越多企业的支持和关注。 今天我主要针对以下三个小议题对 Seata 进行分享: 从 TXC/GTS 到 Seata Seata 社区最新进展 Seata 社区未来规划 从 TXC/GTS 到 S...
- 下一篇
虚拟云网络系列 | Antrea 应用于 VMware 方案功能简介(九)
前面我们讨论完在 Kubernetes Cluster 内采用 Antrea 作为 Container Network Interface,并整合 NSX Manager 作为安全管理接口的使用范例与方案架构。接下来我想要更仔细地与大家介绍将 Antrea 与 NSX Manager 整合的手动安装流程。大致上,整个流程可以用下面这张图来表示: 接下来我会一个一个流程细部逐步与大家进行讨论,希望在这边的介绍完成后,大家也能在自己的 Lab 里面按图施工,完成需要进行的作业。这几篇文章谈到的安装方式主要基于官方文件 : “Registering an Antrea Container Cluster to NSX-T Data Center” 进行说明,大家有兴趣也欢迎参考。 流程一:先将NSX / Kubernetes with Antrea 安装完成 基本上无论是采用原生 Kubernetes/Tanzu Kubernetes Grid/vSphere with Tanzu,整合 NSX Manager 的手动安装方式都一模一样。在进行相关的注册作业前,我们应该需要: 完成 NS...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16