CN108369591B - 用于缓存和参数化ir的系统和方法 - Google Patents
用于缓存和参数化ir的系统和方法 Download PDFInfo
- Publication number
- CN108369591B CN108369591B CN201680071878.1A CN201680071878A CN108369591B CN 108369591 B CN108369591 B CN 108369591B CN 201680071878 A CN201680071878 A CN 201680071878A CN 108369591 B CN108369591 B CN 108369591B
- Authority
- CN
- China
- Prior art keywords
- plan
- node
- query
- module
- parameterized
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2452—Query translation
- G06F16/24524—Access plan code generation and invalidation; Reuse of access plans
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Operations Research (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种缓存和参数化中间表示代码的系统和方法,包括:数据库接收查询;所述数据库解析所述查询,以获取包含多个计划节点的计划树,所述多个计划节点布置成从顶层计划节点降序排列的层级次序;所述数据库为所述计划节点产生节点中间表示(intermediate representation,IR);所述数据库使用所述节点IR执行第一查询;以及所述数据库重用所述节点IR执行后续查询。
Description
相关申请案交叉申请
本申请要求2015年12月7日递交的发明名称为“用于缓存和参数化IR的系统和方法(System and Method for Caching and Parameterizing IR)”的第14/960,894号美国非临时专利申请的在先申请优先权,该在先申请的内容以引入的方式并入本文本中。
技术领域
本发明大体上涉及数据库系统和方法,在特定实施例中,涉及缓存和参数化中间表示(intermediate representation,IR)代码的技术和机制。
背景技术
随着存储器和高速存储设备价格的下降,中央处理单元(central processingunit,CPU)性能和输入/输出(input/output,I/O)性能一样,已经成为数据库效率的瓶颈。传统的数据库系统必须容纳数据的所有变化和形式,因此传统的查询执行模型在执行查询时会做出很多分支和迭代决策。这种执行模型导致数据库引擎在运行时要解析和执行每一查询。这样,那些原本能共享相似代码分支的查询每次都必须重新解析、规划并执行。
已经有人提出用本机编译来解决与数据库引擎中单次解析和执行路径相关的问题。可以在运行时产生特定针对于某一查询的代码并由数据库引擎执行。产生为一个查询定制的计算机代码避免了用一种需要很多分支决策的迭代方式解析和执行多个查询。
一些编译器基础设施,例如低级虚拟机(low level virtual machine,LLVM)项目,提出了进行特定针对于查询的代码即时(just-in-time,JIT)编译。此类基础设施通常将查询简化为低级编程语言或中间表示(intermediate representation,IR),随后在运行时由JIT编译器将其转换为机器代码。JIT编译可以降低执行查询时所需的CPU处理功率,因为数据库引擎可以执行特定针对于所述查询的代码,而不是执行能够响应于任何查询的通用代码。但是,由于产生和编译特定针对于查询的IR需要大量CPU资源,因此JIT编译引入了开销。
发明内容
本公开实施例描述了用于缓存和参数化IR以降低JIT编译成本的系统和方法,基本实现了技术优势。
根据一实施例,提供了一种方法。所述方法包括:数据库接收查询;所述数据库解析所述查询以获取包含多个计划节点的计划树,所述多个计划节点布置成从顶层计划节点降序排列的层级次序;所述数据库为所述计划节点产生节点中间表示(intermediaterepresentations,IR);所述数据库使用所述节点IR执行第一查询;以及所述数据库重用所述节点IR执行后续查询。
根据另一实施例,提供了一种方法。所述方法包括数据库接收第一查询;所述数据库解析所述第一查询,以获取包含第一多个计划节点的第一计划树;所述数据库为所述第一多个计划节点产生第一节点中间表示(intermediate representations,IR);所述数据库参数化所述第一节点IR以生成参数化IR;所述数据库组合所述参数化IR以生成模块;所述数据库将所述模块和所述第一计划树存储在计划缓存中;以及所述数据库藉由所述模块执行所述第一查询。
根据又一实施例,提供了一种设备。所述设备包括处理器和存储有被所述处理器执行的程序的计算机可读存储介质。所述程序包括指令,用于接收查询;解析所述查询以获取包含多个计划节点的计划树,所述多个计划节点布置成从顶层计划节点降序排列的层级次序;为所述计划节点产生节点中间表示(intermediate representation,IR);使用所述节点IR执行第一查询;以及重用所述节点IR执行后续查询。
附图说明
为了更完整地理解本发明及其优点,现在参考下文结合附图进行的描述,其中:
图1为一实施例处理系统的框图;
图2A绘示一实施例节点中间表示(intermediate representations,IR)的产生方法;
图2B绘示一实施例IR重用方法;
图3绘示一用于在执行查询时产生和重用IR的实施例查询方法;
图4绘示一实施例IR参数化方法;以及
图5绘示一展示查询间重用参数化IR的实例。
除非另有指示,否则不同图中的对应标号和符号通常指代对应部分。绘制各图是为了清楚地说明实施例的相关方面,因此未必是按比例绘制的。
具体实施方式
下文将详细论述本发明实施例的制作和使用。应了解,本文所揭示的概念可以在多种具体环境中实施,且所论述的具体实施例仅作为说明而不限制权利要求书的范围。进一步的,应理解,可在不脱离由所附权利要求书界定的本发明的精神和范围的情况下,对本文做出各种改变、替代和更改。
本文公开了用于缓存和参数化中间表示(intermediate representations,IR)代码以降低JIT编译成本的系统和方法。虽然本论述是在数据库引擎的上下文中呈现,应理解的是,本发明实施例可用于任何类型的计算机以产生和执行IR。现代数据库引擎产生查询执行计划树并将所述计划树存储在计划缓存中。计划树通常包括几个布置成层级次序的计划节点。实施例技术为计划树的每一节点生成IR,并将所述IR以及计划树中对应的节点保存在计划缓存中,在后续执行查询时可以重用缓存的IR。
JIT编译期间,将IR编译成用于执行查询的机器代码。编译的机器代码可以汇编为代码模块,所述代码模块可包括变量、函数声明、函数实现等。实施例技术缓存编译所得的模块,从而在重用IR时可以重用这些模块。因此,除存储IR和计划树的节点之外,可以通过缓存所述代码模块和所述计划树的顶层计划节点来存储通过IR产生的机器代码模块。由此可以在后续执行同一个查询时重用缓存的机器代码。
产生的IR通常特定针对于一个计划节点。例如,某一计划节点可包括涉及常量的算术运算。实施例技术参数化为计划节点产生的IR或机器代码。参数化IR可以是更通用的IR,而不是特定针对于某一特定计划节点,因而可以在计划节点仅有一个常量不同的情况下重用于不同的计划节点。随后在相同或相似查询中参数化IR可以重用于不同计划节点。由此参数化IR将特定IR转化为更通用的IR。通过将IR转化为更通用的IR,改进了数据库自身的功能性。
不同实施例可以实现不同的优点。通过缓存所产生的IR或机器代码,可以避免在每次执行查询时进行完整的IR产生和JIT编译。执行查询时,IR产生会占用JIT编译所需的额外CPU时间的约20%至30%。通过避免在每次执行时都产生IR,可以降低IR产生的成本,由此可以降低执行每一查询的运行成本,改进数据库的整体性能。即使缓存的IR与后续查询之间存在变化,参数化缓存的IR也可以进一步改进IR的可重用性。改进的IR可重用性可以进一步提高重用的IR的缓存命中率,从而提升性能。
图1是可以安装在主机设备中的用于执行本文所描述的方法的实施例处理系统100的框图。如图所示,处理系统100包括处理器102、存储器104、接口106-110、数据库112、以及缓存114,其可以(或可以不)如图1所示布置。处理器102可以是用于执行计算和/或其它处理相关的任务的任何组件或组件集合,存储器104可以是用于存储处理器102执行的编程和/或指令的任何组件或组件集合。在一实施例中,存储器104包括非瞬时性计算机可读存储介质。接口106、108、110可以是允许处理系统100与其它设备/组件和/或用户通信的任何组件或组件集合。例如,接口106、108、110中的一个或多个可以用于将数据、控制或管理消息从处理器102传送到安装在主机设备和/或从端设备上的应用程序。作为另一实例,接口106、108、110中的一个或多个可以用于允许用户或用户设备(例如个人电脑(personalcomputer,PC)等)与处理系统100交互/连通。处理系统100可包括图1中未描绘的其它组件,如长期存储器(例如非易失性存储器等)。
数据库112包括处理器102执行的指令,可以是结构化或非结构化的数据库。在一些实施例中,数据库112可以是PostgreSQL数据库。在一些实施例中,数据库112可以是NoSQL数据库。处理系统100中的缓存114可以是任何能够缓存信息的存储设备或空间。缓存114可以为数据库112缓存查询、计划、或结果。缓存114可以和存储器104一起设置,或者位于一个独立的存储设备上。
在一些实施例中,处理系统100包含在接入电信网络或作为电信网络的部件的网络设备中。在一个实例中,处理系统100处于无线或有线电信网络中的网络侧设备中,例如基站、中继站、调度器、控制器、网关、路由器、应用程序服务器或电信网络中的任何其它设备。在其它实施例中,处理系统100处于无线或有线电信网络中的用户侧设备中,例如移动站、用户设备(user equipment,UE)、个人电脑(personal computer,PC)、平板电脑、可穿戴通信设备(例如智能手表等)或用于接入电信网络的任何其它设备。
在一实例实施例中,处理系统100包含数据库设备,所述数据库设备包括接收模块,接收查询;解析模块,解析所述查询以获取包含多个计划节点的计划树,所述多个计划节点布置成从顶层计划节点降序排列的层级次序;表示模块,为所述计划节点产生节点中间表示(intermediate representations,IR);查询模块,使用节点IR执行第一查询;以及重用模块,重用所述节点IR执行后续查询。在一些实施例中,处理系统100可以包括用于执行实施例中所描述的步骤中的任一个或其组合的其它或额外模块。
在一实例实施例中,处理系统100包含数据库设备,所述数据库设备包括接收模块,接收第一查询;解析模块,解析所述第一查询以获取包含第一多个计划节点的第一计划树;表示模块,为所述第一多个计划节点产生第一节点中间表示(intermediaterepresentations,IR);参数模块,参数化所述第一节点IR以产生参数化IR;组合模块,组合所述参数化IR以生成模块;存储模块,将所述模块和所述第一计划树存储在计划缓存中;以及查询执行模块,藉由所述模块执行所述第一查询。在一些实施例中,处理系统100可以包括用于执行实施例中所描述的步骤中的任一个或其组合的其它或额外模块。
图2A绘示一实施例节点IR产生方法200。IR产生方法200可以指示在数据库中规划阶段的时候发生的操作。
IR产生方法200由为查询产生计划树开始(步骤202)。随后,为查询计划树中的每一计划节点产生节点IR(步骤204)。产生的节点IR可以特定针对于每一计划节点,或者可以被参数化(下文将进一步论述)。随后,将每一计划节点的IR添加到查询所用的模块(步骤206)。在一些实施例中,所述模块可以使用LLVM的接口生成。最后,同时保存所述模块与所述查询计划树(步骤208)。在一些实施例中,例如,在数据库支持计划缓存的实施例中,所述查询计划以及模块分别作为对象保存在数据库的计划缓存中,且所述模块与所述查询计划相关联。
图2B绘示一实施例IR重用方法250。IR重用方法250可以用于在计划缓存中预先保存有用于查询的计划树和模块的情况下,指示在执行进行数据库操作的查询的阶段发生的操作。
IR重用方法250由获取保存的对应于查询计划树的模块开始(步骤252)。可以在检索用于查询的计划树时检索所述模块。随后,将所述模块中的IR编译为可执行对象,或者获取为所述模块缓存的可执行对象(步骤254)。在一些实施例中,所述缓存的可执行对象也和所述查询计划树一起存储在计划缓存中。在一些实施例中,所述缓存的可执行对象存储在其它地方。如果所述模块尚未被编译,将由JIT编译器编译。如果所述模块已经被编译,将所述缓存的可执行对象的地址重新映射到存储器中,所述可执行对象的函数指针返回到所述JIT编译器。最后,所述数据库进行查询时执行所述可执行对象(步骤256)。
图3绘示一用于在执行查询时产生和重用IR的实施例查询方法300。查询方法300可以指示在执行数据库查询时发生的操作,其中数据库缓存并重用用于数据库查询的机器代码。
查询方法300由接收查询开始,以进行处理和执行(步骤302)。随后,所述数据库确定是否缓存有用于查询的计划树(步骤304)。如果计划树不存在,分析所述查询,产生查询计划树(步骤306)。所述计划树可以包括多个计划节点,布置成从顶层计划节点降序排列的层级次序。随后,为所述计划中每一计划节点产生IR(步骤308)。所述IR的产生可以用来接合LLVM。随后,通过将每一计划节点的IR添加至模块中,用所述产生的IR来构建模块(步骤310)。随后,通过保存所述模块和所述计划树的顶层计划节点,将所述模块和所述计划树一起保存(步骤312)。在一些实施例中,所述查询计划树和模块保存在数据库的计划缓存中。
如果存在用于查询的计划树,数据库引擎不产生查询计划,而是确定是否有为所述计划保存的IR模块(步骤314)。如果没有为所述计划保存的模块,产生IR,并将其添加至模块中,和所述计划树一起存储(步骤308-312)。但是,如果缓存有计划,并且所述计划含有IR模块,则数据库引擎确定是否有为所述模块缓存的已编译的可执行对象(步骤316)。如果不存在已编译的可执行对象,则编译所述模块以获取可执行对象(步骤318)。随后,保存所述模块的已编译的可执行对象(步骤320)。在一些实施例中,所述可执行对象与所述计划树一起保存在计划缓存中,这可以通过,例如,扩展计划缓存使其包括IR、模块和/或可执行对象的表项来实现。最后,一旦编译或从缓存中加载了所述可执行对象,就执行所述可执行对象,进行查询(步骤322)。
除缓存对应于查询计划/节点的IR或机器代码之外,在实施例中,可以在缓存IR或将其编译为机器代码之前针对节点优化IR(节点IR)。实施例优化包括在IR产生期间参数化所述节点IR,例如,用参数替换产生的IR代码主体中的常量或表元组属性,修改产生的IR以接受含有参数的运行时间变量。IR优化在编译以及存储IR或机器代码之前进行。即使为不同查询产生的IR之间存在变化,实施例优化也允许在一次查询时或多次查询之间(例如查询间)重用IR。例如,以下是实施例可以为之生成和参数化IR的一实例查询的伪代码清单:
SELECT id+5
FROM tblExample
可以通过分析上文所列的实例查询来产生计划树,并为所述计划树的计划节点产生IR。产生的用于查询的计划节点的其中一个对应于加法运算(id+5)。下述伪代码清单绘示为所述加法运算产生的实例IR。
接着,可以调用以上所列IR,如下所示:
call IR_expr();
从以上的伪代码清单可以看出,生成的用于加法运算的IR的主体包括求被加数(id)和加数(5)之和的操作码。虽然以上所示IR可以被数据库引擎编译和重用,所述IR相对特定,只可以重用于另一查询中求相同被加数和加数之和的计划节点。在此实例中所述被加数是表元组的属性(“tblExample”数据库表的“id”栏),在此实例中所述加数是常量(5)。因此,未来查询即使所含的表元组属性或常量发生微小变化,也无法重用所列IR。例如,查询所述表中除“id”栏的另外一栏,或求该栏与另一非5的值之和的查询,都需要产生新的IR。
实施例可以优化以上IR以参数化所述IR。参数化IR可以是一个更通用版的IR,由计划节点调用,特定针对于某个节点的额外参数可以逐节点传送到所述IR中。继续以上实例,下述伪代码清单绘示用参数替换常量时可以产生的实例参数化IR:
以上伪代码清单中可以看出,参数化IR不再含有常量,加数是输入参数或变量(%arg),所述IR求被加数(id)和加数之和。在运行时间所述原始清单中的加数(5)随后传送到IR中。相应地,绘示的参数化IR可以用于上文所论述的两种实例查询。所述含有算术运算(id+5)的实例查询可以调用参数化IR以及自变量5,例如
call IR_expr(5);
同样地,所述含有算术运算(id+6)的实例查询可以调用参数化IR以及自变量6,例如:
call IR_expr(6);
在一些实施例中,还可用参数替换参数化IR的主体中表元组的属性。继续以上实例,下述伪代码清单绘示用参数替换所列IR中元组属性“id”时可以产生的实例参数化IR:
上述伪代码清单可以看出,参数化IR不再含有表元组的属性。改为用输入参数(%attnum)替换IR存取的表栏(id)。在运行时原始清单中的元组属性(id)随后传送到IR中。所述含有算术运算(id+5)的实例查询可以调用参数化IR以及自变量5,例如
call IR_expr(id,5);
因为以上两种实例计划节点使用相同IR,可以在查询间缓存和重用所述IR。相应地,在查询间有略微变化的计划节点不需要产生新的IR。由此,可以通过降低每一查询必须产生和编译的IR数量来改进数据库引擎性能。
图4绘示一实施例IR参数化方法400。IR参数化方法400可以指示在产生用于查询的IR时在数据库中发生的操作。
IR参数化方法400由接收查询并分析和执行开始(步骤402)。随后,解析所述查询,为所述查询产生计划树(步骤404)。随后,所述数据库引擎遍历所述计划树,确定是否有更多计划节点需要代码产生(步骤406),这可以通过CPU分析和程序分析来实现。如果需要为更多节点产生代码,则数据库引擎确定是否已经为当前节点产生IR(步骤408)。如果并不存在IR,则为当前计划节点产生IR(步骤410)。产生IR包括参数化IR,以用作为运行时间变量传送到产生的IR中的参数替换产生的表达式的主体中的常量或表元组操作。
如果IR已经存在,则数据库引擎进行到下一计划节点,不为当前计划节点产生IR。由此可以为查询计划树中的每一计划节点重复步骤406至410。最后,一旦为查询中每一计划节点都产生或匹配了IR,所述IR就汇编到模块中,编译并缓存(步骤412)。
图5展示查询间重用参数化IR的实例500。实例500可以说明执行IR参数化方法400时发生在数据库中的操作。
实例500由接收第一查询开始(步骤502)。随后,所述数据库为第一查询产生第一参数化IR(步骤504)。编译参数化IR,用其执行第一查询,并缓存编译的对象(步骤506)。数据库引擎接收第二查询(步骤508)。数据库引擎为第二查询产生第二参数化IR(步骤510)。最后,数据库引擎从第一查询中定位匹配第二查询的IR,在执行第二查询时重用对应的缓存对象(步骤512)。如果用于第一查询的IR和用于第二查询的IR的差别已经在IR中参数化,则匹配的IR可能相同。
尽管进行了详细的描述,但应理解,可在不脱离由所附权利要求书界定的本发明的精神和范围的情况下,对本文做出各种改变、替代和更改。此外,本发明的范围不希望限于本文中所描述的特定实施例,所属领域的一般技术人员将从本发明中容易了解到,过程、机器、制造工艺、物质成分、构件、方法或步骤(包括目前存在的或以后将开发的)可执行与本文所述对应实施例大致相同的功能或实现与本文所述对应实施例大致相同的效果。相应地,所附权利要求范围包括这些流程,机器,制造,物质组分,构件,方法,及步骤。
Claims (19)
1.一种中间表示IR重用的方法,其特征在于,包含:
数据库接收第一查询;
所述数据库解析所述第一查询以获取包含多个计划节点的计划树,所述多个计划节点布置成从顶层计划节点降序排列的层级次序;
所述数据库为所述计划节点产生第一节点中间表示IR;
参数化所述第一节点IR以生成第一参数化IR,所述参数化所述第一节点IR包括使用对应的参数替换所述第一节点IR主体内的一个或多个常量或元组属性;
组合所述第一参数化IR以生成所述第一查询的第一模块;
所述数据库使用所述第一模块执行第一查询;
所述数据库接收第二查询;
所述数据库产生第二节点IR;
参数化所述第二节点IR以生成第二参数化IR,所述参数化所述第二节点IR包括使用对应的参数替换所述第二节点IR主体内的一个或多个常量或元组属性;
所述数据库从所述第一查询中定位匹配所述第二查询的参数化IR,所述数据库重用所述第一模块执行第二查询。
2.根据权利要求1所述的方法,其特征在于,进一步包含:
将所述第一模块和所述计划树的顶层计划节点存储在计划缓存中;以及
为所述第一模块生成可执行对象。
3.根据权利要求2所述的方法,其特征在于,为所述第一模块生成所述可执行对象包含编译所述第一模块以获取所述可执行对象,并将所述可执行对象存储在所述计划缓存中。
4.根据权利要求2所述的方法,其特征在于,重用所述第一模块执行第二查询包含:
在所述计划缓存中检索所述第一模块;
确定所述计划缓存是否含有所述第一模块的所述可执行对象;
响应于所述计划缓存含有所述可执行对象,检索所述可执行对象;
重映射所述可执行对象的存储器地址,并生成指向所述存储器地址的函数指针;以及
藉由所述函数指针执行所述可执行对象。
5.根据权利要求1到4中任一权利要求所述的方法,其特征在于,重用所述第一模块执行第二查询包含在计划缓存中检索所述第一节点IR。
6.一种中间表示IR重用的方法,其特征在于,包含:
数据库接收第一查询;
所述数据库解析所述第一查询,以获取包含第一多个计划节点的第一计划树;
所述数据库为所述第一多个计划节点产生第一节点中间表示IR;
所述数据库参数化所述第一节点IR以生成参数化IR;
所述数据库组合所述参数化IR以生成所述第一查询的第一模块;
所述数据库将所述第一模块和所述第一计划树存储在计划缓存中;
所述数据库藉由所述第一模块执行所述第一查询;
接收第二查询;
解析所述第二查询以获取包含第二多个计划节点的第二计划树,所述第二多个计划节点不同于所述第一多个计划节点;以及
藉由所述第一模块执行所述第二查询。
7.根据权利要求6所述的方法,其特征在于,参数化所述第一节点IR以生成参数化IR包含:
确定所述第一节点IR的任意主体是否含有带常量的表达式;以及
用输入参数替换所述常量。
8.根据权利要求7所述的方法,其特征在于,所述常量包含文字值。
9.根据权利要求7所述的方法,其特征在于,所述常量包含绑定值。
10.根据权利要求6所述的方法,其特征在于,参数化所述第一节点IR以生成参数化IR包含:
确定所述第一节点IR的任意主体是否含有带元组属性的表达式;以及
用属性位置参数替换所述元组属性。
11.根据权利要求10所述的方法,其特征在于,所述元组属性包含表的栏。
12.根据权利要求6所述的方法,其特征在于,将所述第一模块和所述第一计划树存储在计划缓存中包含:
编译所述第一模块中的第一参数化IR以生成可执行对象;以及
将所述可执行对象与所述第一多个计划节点的顶层计划节点存储在所述计划缓存中。
13.根据权利要求12所述的方法,其特征在于,所述计划缓存中第一模块的数量少于所述计划缓存中计划树的数量。
14.一种中间表示IR重用的设备,其特征在于,包含:
处理器;以及
计算机可读存储介质,存储有被所述处理器执行的程序,所述程序包括指令,用于:
接收第一查询;
解析所述查询以获取包含多个计划节点的计划树,所述多个计划节点布置成从顶层计划节点降序排列的层级次序;
为所述计划节点产生第一节点中间表示IR;
参数化所述第一节点IR以生成第一参数化IR,所述参数化所述第一节点IR包括从所述第一节点IR的主体中移除常量或元组属性的其中一个;
组合所述第一参数化IR以获取所述第一查询的第一模块;
使用所述第一模块执行第一查询;
接收第二查询;
产生第二节点IR;
参数化所述第二节点IR以生成第二参数化IR,所述参数化所述第二节点IR包括使用对应的参数替换所述第二节点IR主体内的一个或多个常量或元组属性;
从所述第一查询中定位匹配所述第二查询的参数化IR,重用所述参数化IR执行第二查询。
15.根据权利要求14所述的设备,其特征在于,所述程序进一步包括指令,用于:
将所述第一模块和所述计划树的顶层计划节点一起存储在计划缓存中;
编译所述第一模块以获取可执行对象;以及
将所述可执行对象存储在所述计划缓存中。
16.一种中间表示IR重用的设备,其特征在于,包含:
处理器;以及
计算机可读存储介质,存储有被所述处理器执行的程序,所述程序包括指令,用于:
接收第一查询;
解析所述第一查询以获取包含第一多个计划节点的第一计划树;
为所述第一多个计划节点产生第一节点中间表示IR;
参数化所述第一节点IR以生成第一参数化IR;
组合所述第一参数化IR以生成所述第一查询的第一模块;
将所述第一模块和所述第一计划树存储在计划缓存中;
藉由所述第一模块执行所述第一查询;
接收第二查询;
解析所述第二查询以获取包含第二多个计划节点的第二计划树,所述第二多个计划节点不同于所述第一多个计划节点;
为所述第二多个计划节点产生第二节点中间表示IR;
参数化所述第二节点IR以生成第二参数化IR;
响应于所述第二参数化IR与所述第一参数化IR一致,藉由所述第一模块执行所述第二查询,其中,藉由所述第一模块执行所述第二查询包含重用存储的所述第一模块。
17.根据权利要求16所述的设备,其特征在于,用于参数化所述第一节点IR以生成第一参数化IR的指令包含:
确定所述第一节点IR的任意主体是否含有带常量的表达式;以及
用对应的输入参数替换所述常量。
18.根据权利要求16所述的设备,其特征在于,用于参数化所述第一节点IR以生成第一参数化IR的指令包含:
确定所述第一节点IR的任意主体是否含有带元组属性的表达式;以及
用属性位置参数替换所述元组属性。
19.根据权利要求16所述的设备,其特征在于,用于将所述第一模块和所述第一计划树存储在所述计划缓存中的指令包含:
编译所述第一模块中的第一参数化IR以生成可执行对象;以及
将所述可执行对象与所述第一多个计划节点的顶层计划节点存储在所述计划缓存中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/960,894 | 2015-12-07 | ||
US14/960,894 US10339137B2 (en) | 2015-12-07 | 2015-12-07 | System and method for caching and parameterizing IR |
PCT/CN2016/108236 WO2017097160A1 (en) | 2015-12-07 | 2016-12-01 | System and method for caching and parameterizing ir |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108369591A CN108369591A (zh) | 2018-08-03 |
CN108369591B true CN108369591B (zh) | 2021-08-13 |
Family
ID=58798330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680071878.1A Active CN108369591B (zh) | 2015-12-07 | 2016-12-01 | 用于缓存和参数化ir的系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10339137B2 (zh) |
CN (1) | CN108369591B (zh) |
CA (1) | CA3007425C (zh) |
WO (1) | WO2017097160A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101832594B1 (ko) * | 2016-02-18 | 2018-02-26 | 라인 가부시키가이샤 | 중간 언어 파일의 로딩 속도 개선을 위한 방법 및 시스템 |
US10394895B2 (en) | 2016-11-28 | 2019-08-27 | International Business Machines Corporation | Identifying relationships of interest of entities |
US10838959B2 (en) * | 2017-04-10 | 2020-11-17 | Sap Se | Harmonized structured query language and non-structured query language query processing |
US20190079972A1 (en) * | 2017-09-13 | 2019-03-14 | Electronics And Telecommunications Research Institute | System and method for parallel query processing based on jit compilation |
US11461324B2 (en) * | 2019-08-29 | 2022-10-04 | Oracle International Corporation | First futamura projection in the context of SQL expression evaluation |
US11294894B2 (en) | 2019-08-30 | 2022-04-05 | Oracle International Corporation | Dynamic resolution of dependencies for database guest languages |
US11531652B2 (en) | 2019-08-30 | 2022-12-20 | Oracle International Corporation | Database modularization of pluggable guest languages |
US20210303583A1 (en) * | 2020-03-27 | 2021-09-30 | Sap Se | Ranking filter algorithms |
US11947531B1 (en) | 2023-02-14 | 2024-04-02 | Oracle International Corporation | Copy avoidance via static analysis for DBMS querying |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1609855A (zh) * | 2003-06-23 | 2005-04-27 | 微软公司 | 查询优化系统和方法 |
CN1609856A (zh) * | 2003-06-23 | 2005-04-27 | 微软公司 | 查询中间语言的方法和系统 |
US6985904B1 (en) * | 2002-02-28 | 2006-01-10 | Oracle International Corporation | Systems and methods for sharing of execution plans for similar database statements |
CN101984439A (zh) * | 2010-12-09 | 2011-03-09 | 上海市共进通信技术有限公司 | 基于子查询实现数据源xml查询系统优化的方法 |
CN102323946A (zh) * | 2011-09-05 | 2012-01-18 | 天津神舟通用数据技术有限公司 | 并行数据库中算子复用的实现方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2279222C (en) * | 1999-07-30 | 2002-07-16 | Ibm Canada Limited-Ibm Canada Limitee | Direct call threaded code |
CA2382714A1 (en) * | 2002-04-19 | 2003-10-19 | Ibm Canada Limited-Ibm Canada Limitee | Substituting parameter markers for literals in a database query language statement to promote reuse of previously generated access plans |
US7461052B2 (en) | 2004-12-06 | 2008-12-02 | International Business Machines Corporation | Abstract query plan |
US20070027905A1 (en) | 2005-07-29 | 2007-02-01 | Microsoft Corporation | Intelligent SQL generation for persistent object retrieval |
US20080098003A1 (en) * | 2006-10-20 | 2008-04-24 | Oracle International Corporation | Database workload replay remapping infrastructure |
US20120150913A1 (en) | 2010-12-13 | 2012-06-14 | Microsoft Corporation | Multidimensional data-centric service protocol |
US9317552B2 (en) * | 2012-01-30 | 2016-04-19 | Memsql, Inc. | Reusing existing query plans in a database system |
US8924373B2 (en) * | 2012-08-09 | 2014-12-30 | International Business Machines Corporation | Query plans with parameter markers in place of object identifiers |
US11341132B2 (en) * | 2015-09-01 | 2022-05-24 | Sybase, Inc. | Generating a producer-driven execution plan from a consumer-driven iterator-based execution plan |
-
2015
- 2015-12-07 US US14/960,894 patent/US10339137B2/en active Active
-
2016
- 2016-12-01 CA CA3007425A patent/CA3007425C/en active Active
- 2016-12-01 WO PCT/CN2016/108236 patent/WO2017097160A1/en active Application Filing
- 2016-12-01 CN CN201680071878.1A patent/CN108369591B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6985904B1 (en) * | 2002-02-28 | 2006-01-10 | Oracle International Corporation | Systems and methods for sharing of execution plans for similar database statements |
CN1609855A (zh) * | 2003-06-23 | 2005-04-27 | 微软公司 | 查询优化系统和方法 |
CN1609856A (zh) * | 2003-06-23 | 2005-04-27 | 微软公司 | 查询中间语言的方法和系统 |
CN101984439A (zh) * | 2010-12-09 | 2011-03-09 | 上海市共进通信技术有限公司 | 基于子查询实现数据源xml查询系统优化的方法 |
CN102323946A (zh) * | 2011-09-05 | 2012-01-18 | 天津神舟通用数据技术有限公司 | 并行数据库中算子复用的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CA3007425C (en) | 2021-10-26 |
US20170161325A1 (en) | 2017-06-08 |
CN108369591A (zh) | 2018-08-03 |
CA3007425A1 (en) | 2017-06-15 |
US10339137B2 (en) | 2019-07-02 |
WO2017097160A1 (en) | 2017-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369591B (zh) | 用于缓存和参数化ir的系统和方法 | |
US8661023B1 (en) | Optimizing search query logic to speed retrieval | |
US9058360B2 (en) | Extensible language framework using data cartridges | |
US8997070B2 (en) | Extension mechanism for scripting language compiler | |
EP3254191B1 (en) | Apparatus and method for using parameterized intermediate representation for just-in-time compilation in database query execution engine | |
US20110196891A1 (en) | Class loading using java data cartridges | |
US20090144229A1 (en) | Static query optimization for linq | |
US10956417B2 (en) | Dynamic operation scheduling for distributed data processing | |
CN105718593A (zh) | 一种数据库查询优化方法及系统 | |
CN110019314B (zh) | 基于数据项分析的动态数据封装方法、客户端和服务端 | |
CN103412754A (zh) | 动态语言代码执行方法和装置 | |
CN109408493A (zh) | 一种数据源的迁移方法及系统 | |
CN110058861B (zh) | 源码处理方法及装置、存储介质、电子设备 | |
CN115809063B (zh) | 一种存储过程编译方法、系统、电子设备和存储介质 | |
US8621424B2 (en) | Compiler based code modification for use in document ranking | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
US20230004563A1 (en) | Method and system for providing a context-sensitive, non-intrusive data processing optimization framework | |
CN111221841A (zh) | 基于大数据的实时处理方法及装置 | |
US11392356B1 (en) | Online machine learning based compilation | |
KR20180104498A (ko) | 질의 처리 방법 및 장치 | |
CN109388619B (zh) | 共享数据系统及共享数据方法 | |
CN117055895B (zh) | 一种将sql语句转换为http接口的方法、系统和可读介质 | |
KR102100513B1 (ko) | 프리미티브 생성 방법과 그를 이용한 질의처리 방법 | |
CN113326042B (zh) | 可视化配置薪资的方法、装置、存储介质及处理器 | |
US20230071160A1 (en) | Compiler generation for partial evaluation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |