即时编译助力人大金仓KES分析能力飞跃,即时编译助力人大金仓KES分析能力飞跃
- 时间:
- 浏览:0
随着数字化技术向各行各业的渗透,人大金融、能源、电信等行业将逐步向深水区域发展,系统改造面临核心级的增加,而这些系统也将逐步向深水区域发展在线交易系统应满足高实时性要求,并保证高效的分析能力,以帮助客户。
数据库的SQL表达式和PLSQL代码实现了[通用]逻辑,在语句执行过程中可能会出现不必要的逻辑分支和代码分支的旅行路径。特别是在复杂分析系统的计算场景中,这种性能损失非常严重。
为了解决这种低效的性能损失,KES使用一种叫做动态编译(just-in-time compilation,[JIT])的技术来扁平地执行代码。简单地说,直接调用相应的函数,如果知道输入的话,简化代码的逻辑分支,可以在复杂的计算分析场景中大幅降低CPU单位的负荷,有效地提高数据库的整体性能。
JIT是什么
在解释[JIT]之前,先了解什么是编译器。编译器是将高级别语言的源代码翻译成机器语言(或翻译成比原始程序低级别的代码)的程序。
从ldquo;代码rdquo;到ldquo;代码rdquo转换
转换后的代码
-计算机可直接运行的机器语言(本机代码);
它是一个低级的中间语言代码
以前,程序通常以静态编译和动态直译两种方式运行,现在出现了即时编译的方法。
ahead-of-time:AOT编译:静态编译:在运行应用程序之前预编译应用程序的编译。
代表例:C
将源代码(.c)转换为机器语言(本机代码)
-二进制文件;
2,解释器-动态直译:执行用编程语言编写的源代码和中间表示,并逐次解释它们的程序。
代表性的东西:java-jvm
代码ldquo,同时执行rdquo。;
-优点是无需预先编译,程序独立于特定架构;
-缺点是工作性能低。
3、即时(JIT)编译:在软件运行过程中编译代码以提高运行速度的编译器。
java
将运行时频繁运行的方法编译成机器代码;
Python+Numba
编译并运行运行运行时指定的函数。
即时(JIT)编译将前两种编译方式融合在一起,编译并运行每一种源代码,同时缓存编译后的代码以降低性能损失。与静态编译的代码相比,即时编译的代码可以处理延迟绑定,从而提高安全性。简单地说,JIT是提高程序执行效率的方法。
KES如何实现JIT
KES基于LLVM实现了“JIT”功能。
KES将相应的“JIT”提供程序封装为从属库,以防止入侵“JIT”内核代码。用户必须打开或关闭“JIT”功能。通过进一步抽象化,KES还提供了支持不同后扩展[JIT]的解决方案。该[JIT]实施步骤的概要如下。
1.将表达式的“中间表达式”转换为LVMM的中间表达式(LVMM IR)
2.使用LVMM编译JIT,转换成机器代码;
3.KES执行器将其作为内部函数调用并执行;
KES根据[JIT]提供的优化项目
1,优化公式计算
在WHERE条件判定中,聚合计算等场景会实时将表达式路径编译为具体代码并运行,从而优化过程中大量不必要的调用和分支。
2、优化访问层
数据库促动器可以通过访问层加载数据,并根据特定的表结构读取和分析元组代码。例如,在分析元组流程中,根据表格结构动态生成的代码不需要进行数据类型的重复判断。另外,在获取部分列时,可以直接从相应的偏移中提取数据,跳过不需要提取的列,从而减少计算和I/O开销。通过增加处理的数据量,可以惊人地节约计算和I/O量。
3、执行器工艺优化。
LLVM对中间表示代码(IR)进行了优化,在一定程度上提高了数据库查询的执行速度。从优化各行数据的处理提升到优化整个SQL的处理流程:从传统的相对低效的流水线执行方式调整到循环批处理方式,从而充分利用CPU缓存尽量避免在相对慢得多的内存中访问数据;再结合CPU矢量计算相关指令集,进一步提高性能。
KES默认情况下启动动态编译(JIT、,通过比较查询的评估成本和JIT成本值的大小来确定是否执行JIT编译。用户还可以关闭“JIT”参数的动态编译(如果需要设置为活动)
JIT优化性能实测
JIT比较顾客业务分析场景的脱敏简化版,说明SQL执行性能的提高。
是EXPLAN ANALYZE的结果
总结展望。
[JIT]可以帮助优化KES数据库的SQL执行逻辑,加快复杂SQL的查询,提高KES的整体性能。在tpc-h等数据库测试中,KES的JIT编译表达式的执行速度加快了20%以上。在“JIT”模式下,索引创建速度通常加快5-19%。
作为国内最早、最深入的数据库国家团队,人大以金仓用户为中心,致力于提供优秀的数据库产品和服务。金仓人在关注和学习前沿技术的同时,坚持自主创新,不断落地新理论,融合新技术,越来越满足多元终极新需求,提升产品核心竞争力,为千行百业的数字转型升级持续发力。