openGauss学习笔记-52 openGauss 高级特性-LLVM
文章目录
- openGauss学习笔记-52 openGauss 高级特性-LLVM
- 52.1 适用场景
- 52.2 非适用场景
- 52.3 其他因素对LLVM性能的影响
- 52.4 LLVM使用建议
openGauss学习笔记-52 openGauss 高级特性-LLVM
openGauss借助LLVM(Low Level Virtual Machine)提供的库函数,依据查询执行计划树,将原本在执行器阶段才会确定查询实际执行路径的过程提前到执行初始化阶段,从而规避原本查询执行时候伴随的函数调用、逻辑条件分支判断以及大量的数据读取等问题,以达到提升查询性能的目的。
LLVM动态编译技术可以为每个查询生成定制化的机器码用于替换原本的通用函数。通过减少实际查询时冗余的条件逻辑判断、虚函数调用并提高数据局域性,从而达到提升查询整体性能的目的。
由于LLVM需要消耗额外的时间预生成IR中间态表示并编译成机器码,因此在小数据量场景或查询本身耗时较少时,可能引起性能的劣化。
52.1 适用场景
-
支持LLVM的表达式
查询语句中存在以下的表达式支持LLVM优化:
- Case…when… 表达式
- In表达式
- Bool表达式
- And
- Or
- Not
- BooleanTest表达式
- IS_NOT_UNKNOWN:对应SQL语句IS NOT UNKNOWN
- IS_UNKNOWN:对应SQL语句IS UNKNOWN
- IS_TRUE:对应SQL语句IS TRUE
- IS_NOT_TRUE:对应SQL语句IS NOT TRUE
- IS_FALSE:对应SQL语句IS FALSE
- IS_NOT_FALSE:对应SQL语句IS NOT FALSE
- NullTest表达式
- IS_NOT_NULL
- IS_NULL
- Operator表达式
- Function表达式
- lpad
- substring
- btrim
- rtrim
- length
- Nullif表达式
表达式计算支持的数据类型包括bool, tinyint, smallint, int, bigint, float4, float8, numeric, date, time, timetz, timestamp, timestamptz, interval, bpchar, varchar, text, oid。
仅当表达式出现在向量化执行引擎中Scan节点的filter、Hash Join节点中的complicate hash condition、hash join filter、hash join target, Nested Loop节点中的filter、join filter, Merge Join节点的merge join filter, merge join target, Group节点中的filter表达式时,才会考虑是否使用LLVM动态编译优化。
-
支持LLVM的算子:
- Join :HashJoin
- Agg :HashAgg
- Sort
其中HashJoin算子仅支持Hash Inner Join,对应的hash cond仅支持int4、bigint、bpchar类型的比较;HashAgg算子仅支持针对bigint、numeric类型的sum及avg操作,且group by语句仅支持int4、bigint、bpchar,text,varchar,timestamp类型操作,同时支持count(*)聚集操作。Sort算子仅支持对int4,bigint,numeric,bpchar,text,varchar数据类型的比较操作。除此之外,无法使用LLVM动态编译优化,具体可通过explain performance工具进行显示。
52.2 非适用场景
- 不支持小数据量表使用LLVM动态编译优化。
- 不支持生成非向量化执行路径的查询作业。
52.3 其他因素对LLVM性能的影响
LLVM优化效果不仅依赖于数据库内部具体的实现,还与当前所选择的硬件环境等有关。
-
表达式调用C-函数个数
数据库内部针对表达式计算并未实现全codegen,即在整个表达式计算中部分表达式实现了codegen,部分直接调用原本的C代码。如果整个表达式计算中后者占据了主要部分,使用LLVM动态编译优化,可能会导致性能劣化。通过设置log_min_message的级别为DEBUG1可以查看到哪些表达式直接调用了C代码实现。
-
内存资源
LLVM特性的一个重要思想是保障数据的局域特性,即数据应尽可能的存放在寄存器中。同时应减少数据加载,因此在使用LLVM优化时应设置足够大的work_mem,保证对应使用LLVM优化的执行代码整个过程在内存中实现,否则可能引起性能劣化。
-
优化器代价估算
LLVM特性实现了简易的代价估算模型,即依据当前参与节点运算的表大小决定当前节点是否考虑使用LLVM动态编译优化。如果优化器低估了实际参与运算的行数,则原本可获得收益的未正常获得收益。反之亦然。
52.4 LLVM使用建议
目前LLVM在数据库内核侧已默认打开,用户可结合上述的分析进行配置,总体建议如下:
-
设置合理的work_mem,在允许的条件下尽可能设置较大的work_mem,如果出现大量下盘,则建议关闭LLVM动态编译优化(通过设置enable_codegen=off实现)。
-
设置合理的codegen_cost_threshold(默认值为10000),确保小数据量场景下避免使用LLVM动态编译优化。当codegen_cost_threshold的值设定后,因使用LLVM动态编译优化引入性能劣化,则建议增加codegen_cost_threshold的取值。
-
对于表达式计算使用LLVM动态编译优化,如果存在大量的调用C-函数的场景,建议关闭LLVM动态编译优化。
说明: 在资源许可的情况下,数据量越大,可获得的性能提升效果越好。
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

相关文章:
openGauss学习笔记-52 openGauss 高级特性-LLVM
文章目录 openGauss学习笔记-52 openGauss 高级特性-LLVM52.1 适用场景52.2 非适用场景52.3 其他因素对LLVM性能的影响52.4 LLVM使用建议 openGauss学习笔记-52 openGauss 高级特性-LLVM openGauss借助LLVM(Low Level Virtual Machine)提供的库函数&…...
MySQL 8.0字符集校正
MySQL升级为8.0版本时,之前版本的字符集往往是不同的,需要校正。 执行下面的三个SQL语句的查询结果,可以从库、表、列三个层面对字符集进行校正。 库 select concat(alter database , schema_name, default character set utf8mb4 collate …...
软考:中级软件设计师:数据库恢复与备份,故障与恢复,反规范化
软考:中级软件设计师:数据库恢复与备份 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备…...
Unbutu系统-Docker安装、JDK环境配置,Docker常用指令、Docker安装MySQL、Redis、Tomcat、Nginx,前端后分离项目部署
目录 1、防火墙 1.1、查看防火墙状态 1.2、开启防火墙 1.3、关闭防火墙 1.4、重启防火墙 1.5、查看防火墙版本 2、安装JDK 2.1、官网下载tar包 2.3、解压tar.gz文件 2.4、配置环境变量 2.4.1、查看安装路径 2.4.2、设置环境变量 2.4.3、执行该让环境变量生效 2.4…...
Python绘图系统10:在父组件中使用子组件的函数
文章目录 Combobox绑定事件互相调用源代码 Python绘图系统: 📈从0开始实现一个三维绘图系统自定义控件:坐标设置控件📉坐标列表控件📉支持多组数据的绘图系统图表类型和风格:散点图和条形图📊混…...
【Linux的成长史】Linux的发展史
🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…...
OLED透明屏是什么?什么叫做OLED透明屏的原屏?
OLED透明屏是一种新型的显示技术,具有高对比度、高亮度和能耗低等优势,正被越来越广泛地应用于各个领域中。 在OLED透明屏中,原屏是至关重要的元件之一。本文将深入探讨OLED透明屏原屏的意义、制造过程、品质要求、应用案例和发展趋势&#…...
Redis 持久化的手段有哪些 ?RDB 和 AOF 有什么区别 ?
目录 1. Redis 持久化的手段有哪些 2. RDB 和 AOF 有什么区别 2.1 RDB 持久化 2.2 AOF 持久化 2.2.1 AOF 持久化策略有哪些 3. 混合持久化是如何执行的(了解) 1. Redis 持久化的手段有哪些 Redis 持久化的手段有三种: 快照方式&#…...
【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容
文章目录 前言一、下载二、使用步骤1.引入样式2.html代码 总结 前言 提示:这里可以添加本文要记录的大概内容: vue后台框架,若依系统里有一个富文本编辑器,效果如下 在package.json里面查看,发现插件名叫quill 插件的…...
华纳云:ubuntu下nginx服务器如何配置
在Ubuntu操作系统上配置Nginx服务器涉及以下步骤。这里我将提供一个基本的配置示例,你可以根据自己的需求进行修改和定制。 安装 Nginx: 打开终端,并输入以下命令来安装 Nginx: sudo apt update sudo apt install nginx 启动 …...
PTP时间同步例程
下面是一个基本的PTP时间同步例程,可以使用Arduino或其他类似的微控制器实现: 步骤1:准备硬件 - 一个Arduino或类似的微控制器 - 一个以太网模块 步骤2:导入库文件 #include <Ethernet.h> #include <EthernetUdp.h>…...
【ES6】ES6遍历属性的方法
在ES6中,有几种遍历属性的方法,其中包括: 使用for…in循环和Object.keys()方法。 let obj {a: 1, b: 2, c: 3}; for (let key in obj) {console.log(obj[key]); }使用for…of循环和Object.values()方法。 let obj {a: 1, b: 2, c: 3}; f…...
【Web系列二十四】使用JPA简化持久层接口开发
目录 环境配置 1、引入依赖 配置文件 代码编写 实体类创建 JPA常用注解 Service与ServiceImpl Service ServiceImpl Controller Dao 三种实现Dao功能方式 1.继承接口,使用默认接口实现 2.根据接口命名规则默认生成实现 3.自定义接口实现(类似MyBatis…...
Flink流批一体计算(16):PyFlink DataStream API
目录 概述 Pipeline Dataflow 代码示例WorldCount.py 执行脚本WorldCount.py 概述 Apache Flink 提供了 DataStream API,用于构建健壮的、有状态的流式应用程序。它提供了对状态和时间细粒度控制,从而允许实现高级事件驱动系统。 用户实现的Flink程…...
软考高级系统架构设计师系列论文九十三:论计算机网络的安全性设计
软考高级系统架构设计师系列论文九十三:论计算机网络的安全性设计 一、计算机网络安全性设计相关知识点二、摘要三、正文四、总结一、计算机网络安全性设计相关知识点 软考高级系统架构设计师:计算机网络...
山西电力市场日前价格预测【2023-08-29】
日前价格预测 预测明日(2023-08-29)山西电力市场全天平均日前电价为321.48元/MWh。其中,最高日前电价为372.80元/MWh,预计出现在19: 30。最低日前电价为272.85元/MWh,预计出现在12: 30。 价差方向预测 1: 实…...
计算机毕设 基于深度学习的人脸专注度检测计算系统 - opencv python cnn
文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新…...
ES 7.6 - APi基础操作篇
ES7.6-APi基础操作篇 前言相关知识索引相关创建索引查询索引查询所有索引删除索引关闭与打开索引关闭索引打开索引 冻结与解冻索引冻结索引解冻索引 映射相关创建映射查看映射新增字段映射 文档相关(CURD)新增文档根据ID查询修改文档全量覆盖根据ID选择性修改根据条件批量更新 …...
【Go 基础篇】Go语言循环结构:实现重复执行与迭代控制
介绍 循环结构是编程中的重要概念,它允许我们重复执行一段代码块,或者按照一定的条件进行迭代控制。Go语言提供了多种循环结构,包括for、while和do-while等,用于不同的场景下实现循环操作。本篇博客将深入探讨Go语言中的循环结构…...
RabbitMQ笔记-RabbitMQ基本术语
RabbitMQ基本术语 相关概念; 生产者(Producer):投递消息。消息:消息体(payload)标签(label);生产者把消息交给rabbitmq,rabbitmq会根据标签把消息发给感兴趣…...
LZ4压缩边界深度解析:如何准确计算LZ4_compressBound压缩上限
LZ4压缩边界深度解析:如何准确计算LZ4_compressBound压缩上限 【免费下载链接】lz4 Extremely Fast Compression algorithm 项目地址: https://gitcode.com/GitHub_Trending/lz/lz4 LZ4压缩边界深度解析是理解LZ4高效内存管理的关键。在数据压缩领域…...
如何使用AI代码库分析工具快速掌握gRPC:高性能服务通信的终极指南
如何使用AI代码库分析工具快速掌握gRPC:高性能服务通信的终极指南 【免费下载链接】Tutorial-Codebase-Knowledge Pocket Flow: Codebase to Tutorial 项目地址: https://gitcode.com/gh_mirrors/tu/Tutorial-Codebase-Knowledge 你是否曾经面对复杂的gRPC代…...
ARM调试断点寄存器DBGBVR_EL1原理与应用详解
1. ARM调试断点寄存器DBGBVR_EL1深度解析在嵌入式系统开发和底层调试过程中,断点功能是诊断复杂问题的关键工具。作为ARM架构调试系统的核心组件,DBGBVR_EL1寄存器与配套的DBGBCR_EL1控制寄存器共同构成了强大的硬件断点机制。不同于软件断点需要修改指令…...
API延迟骤降68%,中文语调准确率提升3.2倍,ElevenLabs私有化部署调参黄金公式曝光
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs中文语音生成优化的底层逻辑与性能跃迁 ElevenLabs 原生未提供中文语音模型,但通过语义对齐微调(Semantic Alignment Fine-tuning)与音素级重映射…...
高性能鼠标跟随动画实现:从基础原理到mouse-follower库实战
1. 项目概述:一个丝滑的鼠标跟随器最近在重构一个个人作品集网站,想在交互细节上增加一些趣味性和现代感。一个常见的想法是:让鼠标光标不再是那个单调的箭头或小手,而是变成一个自定义的、带有动效的图形,并且这个图形…...
复杂环境下巡检机器人如何实现稳定联网?工业 4G 路由方案实践
引言在电力、石化、轨道交通等行业,巡检机器人正逐步替代人工完成高危环境下的设备巡检任务。然而,很多工程师在实际部署中遇到了一个共同痛点:机器人在复杂工业环境下的联网稳定性问题。信号遮挡、电磁干扰、移动场景下的网络切换……这些因…...
猫抓插件终极指南:5步掌握浏览器资源嗅探下载技巧
猫抓插件终极指南:5步掌握浏览器资源嗅探下载技巧 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓插件(Cat-Catch&…...
STM32驱动ATK-4.3寸屏避坑指南:用FSMC模拟8080时序,告别花屏和卡顿
STM32驱动ATK-4.3寸屏实战:FSMC模拟8080时序的深度优化 当你在STM32项目中使用ATK-4.3寸TFTLCD时,是否遇到过屏幕闪烁、显示错位或者刷新率低下的问题?这些常见痛点往往源于对NT35510驱动器时序理解不够深入或FSMC配置不当。本文将带你从硬件…...
书匠策AI:一个让你“毕业不秃头“的论文神器,到底藏了什么黑科技?
各位同学,先做个灵魂拷问:你有没有在凌晨三点对着空白的Word文档,大脑一片空白,感觉自己不是在写论文,而是在跟一堵墙对视? 别慌,今天给你们安利一个我最近挖掘到的"论文外挂"——书…...
开源OpenAI用量查询工具部署指南:实现API成本透明化管理
1. 项目概述与核心价值 最近在折腾OpenAI API的时候,发现一个挺实际的需求:怎么方便地查自己API Key的余额和用量明细?官方Dashboard虽然功能全,但有时候就想快速看一眼,或者团队里几个人共用一个额度池,想…...
