当谈起Greenplum 7时,我们在谈什么?之内核篇

344661ee-d1cf-444e-813e-97e15ed571b7.jpg

 

了解更多Greenplum相关内容,欢迎访问Greenplum中文社区网站

Greenplum 7

在上篇文章中,我们为大家介绍了Greenplum商业版组件的最新近况,下面来具体介绍一下Greenplum 7中内核方面都将带来哪些惊喜。由于7版本中的新特性较多,本文将就一些重点特性进行简单介绍,具体细节可以关注《Greenplum 7新版本大剧透》的后续直播,原厂工程师将为大家详细讲解内核新特性和原理实现。相关PPT可以前往Greenplum中文社区cn.greenplum.org获取。

 

 1 基于PostgreSQL 12

 

Greenplum一直紧密拥抱PostgreSQL社区,内核版本的升级也非常快,目前master分支上已经是12版本,Greenplum团队正在进行一系列的代码清理和测试,希望为大家带来更加稳定的产品体验。

 

 2 Just-In-Time 编译

 

了解Java或者Python的同学可能知道,这类语言都是解释执行的。解释执行是跨平台的,但是解析执行需要时间,执行效率低。

 

在Greenplum里也存在这样的问题,SQL本质上也是一种解释执行语言。例如SELECT a+b,在SQL里,第一步会先把a的数据取出来,放在左操作符里,再把b的值取出来放在右操作符里,最后再做加法运算。接着会将值做形式转换返回。整个过程效率不高,需要多条机器指令而不是一条加法指令。

 

于是我们想到是否可以用即时编译的技术来提升效率,即JIT。在Greenplum 7版本里将支持JIT编译的功能,从而可以用JIT来支持SQL的表达式、投影等运算。

 

a858b5d1-4544-4f10-af4c-48a942fa30e7.png

 

但JIT编译并不一定是更好的选择。在编译的过程中,会把原生表达式编译成内部的格式。然而,编译是需要时间的,因此如果在查询语句本身很快,此时JIT编译的时间就不可忽略。

 

JIT编译默认使用LLVM来执行,可以被用来加速以下表达式。

 

  • WHERE 语句

  • Target list

  • 聚合(aggregate)

  • 投影运算(projections)

 

大家在大学里应该都学过过程语言,过程语言中,编译时可以使用内联函数,即inline。函数本来的实现是一种跳转,可以用call的方式进行调用。而内联函数,在调用函数的地方,会把代码直接嵌到源代码里,而不是进行调用。函数的执行效率和局部性将大为提高。

 

但如果全部函数都是内联函数,会导致编译出来的结果较大,因为每个地方都会被替换成函数体,而非调用函数命令本身。因此inline是个双刃剑,需要斟酌使用场景。生成JIT时可以选择以何种优化粒度来生成代码。

 

用户需要通过GUC值来控制什么时候使用JIT。

 

  • jit:默认是“开”的状态,如果这里的状态为“关”,则后面的都关闭状态

  • jit_above_cost:前面我们提到,不是每个查询语句都需要用JIT,当查询计划的cost高于用户设定的阈值时,才会试着用JIT;

    </
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值