在数据库查询执行引擎中利用参数化中间表示进行即时编译的装置和方法制造方法及图纸

技术编号:16388427 阅读:36 留言:0更新日期:2017-10-16 08:47
本文所提供的实施例用于将参数化中间表示IR用于数据库查询执行引擎中的即时JIT编译。在一实施例中,一种支持在数据库管理系统中查询JIT编译和执行的方法包括:识别查询中的中央处理器密集函数,并在所述CPU密集函数中识别一个或者多个参数,其中,所述一个或者多个参数代表在不同查询实例中可以变化的值的变量;将所述CPU密集函数编译成包括所述一个或者多个参数的参数化IR;将所述CPU密集函数的参数化IR保存在参数化IR的目录中。

【技术实现步骤摘要】
【国外来华专利技术】在数据库查询执行引擎中利用参数化中间表示进行即时编译的装置和方法相关申请案交叉申请本申请要求于2015年4月15日递交的专利技术名称为“在数据库查询执行引擎中利用参数化中间表示进行即时编译的装置和方法”申请号为14/687,473的美国非临时专利申请案的权益和在先申请优先权,该在先申请的内容以引入的方式并入本文。
本专利技术涉及数据库处理,在特定实施例中,涉及在数据库查询执行引擎中利用参数化中间表示进行即时编译的装置和方法。
技术介绍
在现代数据系统中,例如通过采用固态磁盘(solidstatedrive,简称SSD)设备很大程度上避免了慢磁盘访问时,查询执行的中央处理器(centralprocessingunit,简称CPU)的成本变得越来越关键。即时(Just-in-time,简称JIT)编译是用于提高数据库系统中CPU性能的方法。JIT编译指的是在程序执行的运行时间而不是执行之前进行的查询执行中的编译方案。因为在代码优化、本地代码生成以及编译后的代码的质量方面的有效性,低级虚拟机(lowlevelvirtualmachine,简称LLVM)编译器的结构对于JIT编译是很好的候选。所述LLVM包括用于在运行时间生成特定查询函数的中间表示(intermediaterepresentation,简称IR)的组合函数(称作IRBuilder)。相比编译后的特定查询函数,所述LLVM可以更加高效地从所述IR生成优化的机器代码。但是LLVMIR在运行时间通过LLVMIRBuilder生成代码在时间和/或计算资源例如内存等方面代价较高且容易出错。或者可以利用LLVM提供的clang/clang++等工具将C/C++代码编译成LLVMIR。如果所述C/C++代码不是专门用于传入查询,该方法可能不会受益于JIT编译。因此需要一种更加高效地为查询的JIT编译生成IR的方案。
技术实现思路
根据一实施例,一种支持在数据库管理系统中查询即时(just-in-time,简称JIT)编译和执行的方法包括:识别查询中的中央处理器(centralprocessingunit,简称CPU)密集函数,并且在所述CPU密集函数中识别一个或者多个参数。所述一个或者多个参数代表在不同查询实例中可以变化的值的变量。将所述CPU密集函数编译成包括所述一个或者多个参数的参数化中间表示(intermediaterepresentation,简称IR)。将所述CPU密集函数的参数化IR保存在参数化IR的目录中。根据另一实施例,一种支持在数据库管理系统中查询JIT编译和执行的方法包括:将CPU密集函数编译成包括一个或者多个参数的参数化IR。所述一个或者多个参数代表在不同的查询实例中可以变化的的值的变量。所述方法还包括:将所述CPU密集函数的参数化IR保存在参数化IR的目录中;并且在准备执行传入查询时,从目录加载参数化IR。在所述参数化IR中利用所述传入查询的变量的常数值替代所述一个或者多个参数;通过所述JIT编译利用替代所述一个或者多个参数的常数值编译所述参数化IR,以生成执行所述传入查询的机器代码。根据又一实施例,一种用于数据库查询执行引擎的装置包括:至少一个处理器以及用于存储供所述至少一个处理器执行的程序的非瞬时性计算机可读取存储介质。所述程序包括指令,用于识别查询中CPU密集函数,并且在所述CPU密集函数中识别代表在不同查询实例中可以变化的值的变量的一个或者多个参数。所述程序还包括指令,用于将所述CPU密集函数编译成包括所述一个或者多个参数的参数化IR,并且将所述CPU密集函数的参数化IR保存在参数化IR的目录中。上述宽泛地概括了本专利技术实施例的特征,以便能够更好理解以下本专利技术详细描述。以下将描述本专利技术实施例其他的特征和优势,其构成本专利技术权利要求书的主体。本领域的技术人员应当理解,所公开的概念和特定实施例易被用作修改或设计其他实现与本专利技术相同目的的结构或过程的基础。本领域的技术人员还应当意识到,这种等同构造不脱离所附权利要求书所阐述的本专利技术的精神和范围。附图说明为了更完整地理解本专利技术及其优点,现在参考下文结合附图进行的描述,其中:图1示出一种在数据库管理系统中进行查询处理的框架;图2示出针对查询函数生成参数化IR的方法实施例;图3示出对查询函数的参数化IR进行JIT编译的方法实施例;图4是一种能够用于实现不同实施例的处理系统的示意图。除非另有指示,否则不同图中的对应标号和符号通常指代对应部分。绘制各图是为了清楚地说明实施例的相关方面,因此未必是按比例绘制的。具体实施方式下文将详细论述当前优选实施例的制作和使用。然而,应了解,本专利技术提供可在各种具体上下文中体现的许多适用的专利技术性概念。所论述的具体实施例仅仅说明用以实施和使用本专利技术的具体方式,而不限制本专利技术的范围。本文所提供的系统和方法实施例用于将参数化中间表示(intermediaterepresentation,简称IR)用于数据库查询执行引擎中的即时(just-in-time,简称JIT)编译。具体地,对于规定的查询函数,例如由所述数据库执行引擎处理的处理器(或者CPU)密集函数,识别所述函数中针对特殊查询可能不变(固定)的变量。所述变量在不同的查询实例中有可以变化的值,因此可以用作查询的参数。所述CPU密集函数可以是要求更多处理资源例如时间、内存或者其他处理资源的函数。所述CPU密集函数可以通过CPU性能分析识别。所述识别的变量可以包括模式信息、表达式或者与所述变量相关的数据类型等。识别为不变量的变量可以提供更多的编译器优化,例如不可达代码去除、循环展开、常量折叠和传播、内联的虚函数调用或者通过函数指针进行调用。所述识别的变量均设置在CPU密集函数的IR模板中用作所述IR的参数。在利用IR编译器例如LLVMJIT编译器等进行JIT编译时,利用所述查询特殊信息的常数值替代所述IR中的参数,以生成用于执行的优化的机器代码。这里称作参数化IR的带有参数的IR模板是从初始函数(翻译码)静态编译,并且所述IR可以与唯一ID和参数名一起保存在目录表中。所述参数化IR在准备执行特殊查询的运行时间加载,因此利用常数值替代所述IR中的参数以获得修改后的IR。然后,对所述修改后的IR进行JIT编译,以生成用于所述函数的本地机器代码。利用查询函数中的一组指令同时生成和编译参数化IR可以避免在运行时间为查询特殊IR函数代价较高且容易出错的逐条生成指令。通过保存参数化IR函数的通用版本,在运行时间加载所述IR,在向所述参数化IR添加查询特殊信息之后,对所述IR函数进程JIT编译,不需要在运行时间针对每个JIT编译生成C/C++代码。相比针对查询生成C/C++代码并且利用C/C++编译器对查询进行JIT编译,生成和编译参数化IR的方案更快。图1示出一种在数据库管理系统中进行查询处理的框架100的示例。首先由解析函数110对SQL查询进行解析,然后由改写函数120以适合执行的形式相应改写。可以由计划函数130对改写查询进行分析,以确定其执行参数或设置,然后生成查询计划。执行函数140在本文也称作查询执行引擎,其用于执行改写查询计划。所述执行函数140包括以下三个步骤:准备执行器步骤141:分配运行时间数据结构,并且准备本文档来自技高网
...
在数据库查询执行引擎中利用参数化中间表示进行即时编译的装置和方法

【技术保护点】
一种支持在数据库管理系统中查询即时JIT编译和执行的方法,其特征在于,所述方法包括:识别查询中的中央处理器CPU密集函数;在所述CPU密集函数中识别一个或者多个参数,其中所述一个或者多个参数代表在不同查询实例中可以变化的值的变量;将所述CPU密集函数编译成包括所述一个或者多个参数的参数化中间表示IR;将所述CPU密集函数的参数化IR保存在参数化IR的目录中。

【技术特征摘要】
【国外来华专利技术】2015.04.15 US 14/687,4731.一种支持在数据库管理系统中查询即时JIT编译和执行的方法,其特征在于,所述方法包括:识别查询中的中央处理器CPU密集函数;在所述CPU密集函数中识别一个或者多个参数,其中所述一个或者多个参数代表在不同查询实例中可以变化的值的变量;将所述CPU密集函数编译成包括所述一个或者多个参数的参数化中间表示IR;将所述CPU密集函数的参数化IR保存在参数化IR的目录中。2.根据权利要求1所述的方法,其特征在于,还包括:在准备执行传入查询时,从所述目录加载所述参数化IR;在所述参数化IR中利用所述变量的常数值替代所述一个或者多个参数;通过JIT编译利用替代所述一个或者多个参数的常数值编译所述参数化IR,以生成用于执行所述传入查询的机器代码。3.根据权利要求2所述的方法,其特征在于,还包括:将所述参数化IR的唯一标识符ID保存在所述目录中,其中所述参数化IR是利用所述唯一ID从所述目录加载。4.根据权利要求2所述的方法,其特征在于,还包括:将所述编译的参数化IR的指针保存在用于通过所述机器代码执行所述传入查询的运行时间数据结构中。5.根据权利要求1至4任一项所述的方法,其特征在于,在运行时间利用所述变量的值执行传入查询之前,将所述CPU密集函数编译成所述参数化IR。6.根据权利要求1至5任一项所述的方法,其特征在于,所述识别所述CPU密集函数包括:通过追踪之前运行的查询中CPU的性能并且将追踪到的CPU密集函数的CPU性能与其他函数或者阈值的CPU性能进行比较来执行CPU性能分析。7.根据权利要求1至6任一项所述的方法,其特征在于,所述在所述CPU密集函数中识别一个或者多个参数包括:利用数据库模式信息、表达式或者与查询中所述CPU密集函数相关的数据类型进行程序分析,以确定所述变量是否不变。8.根据权利要求1至7任一项所述的方法,其特征在于,所述在所述CPU密集函数中识别一个或者多个参数包括:选择期望提供包括不可达代码去除、循环展开、常量折叠和传播、内联的虚函数调用或者通过函数指针进行调用等更多编译器优化的变量。9.根据权利要求1至8任一项所述的方法,其特征在于,所述将所述CPU密集函数编译成所述参数化IR包括:在所述CPU密集函数中同时编译多个指令。10.一种支持在数据库管理系统中查询即时JIT编译和执行的方法,其特征在于,所述方法包括:将中央处理器CPU密集函数编译成包括一个或者多个参数的参数化中间表示IR,其中所述一个或者多个参数代表在不同的查询实例中可以变化的值的变量;将所述CPU密集函数的参数化IR保存在参数化IR的目录中;在准备执行传入查询时,从所述目录加载参数化IR;在所述参数化IR中利用所述传入查询的变量的常数值替代所述一个或者多个参数;通过JIT编译利用替代所述一个或者多个参数的常数值编译所述参数化IR,以生成用于执行所述传入查询的机器代码。11.根据权利要...

【专利技术属性】
技术研发人员:丁永华张国根朱澄
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1