CN109313639B - Dbms中进行查询执行的系统和方法 - Google Patents
Dbms中进行查询执行的系统和方法 Download PDFInfo
- Publication number
- CN109313639B CN109313639B CN201680086992.1A CN201680086992A CN109313639B CN 109313639 B CN109313639 B CN 109313639B CN 201680086992 A CN201680086992 A CN 201680086992A CN 109313639 B CN109313639 B CN 109313639B
- Authority
- CN
- China
- Prior art keywords
- query
- kernel
- tjit
- dbms
- code
- 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/24549—Run-time optimisation
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于处理数据库管理系统(database management system,简称DBMS)查询的装置,包括处理器,用于接收DBMS查询,并且从所接收到的DBMS查询中提取查询签名。当所述查询签名与即时追踪(tracing just in time,简称TJIT)内核数据集中的现有记录相匹配时:通过访问来自所述TJIT内核数据集的现有记录来执行与所述TJIT内核数据集中的查询签名相关联的TJIT内核,以及在执行所述TJIT内核期间,通过解释所述TJIT内核的源代码来生成用于执行所述DBMS查询的机器代码。否则,从所接收的DBMS查询中提取结构化查询语言(structured query language,简称SQL)文本,根据所提取的SQL文本,生成用于处理所接收到的DBMS查询的查询执行计划,执行所述查询执行计划;并且将与所述查询签名相关联的所述SQL文本存储为所述TJIT内核数据集的新记录。
Description
背景技术
本发明及其实施例涉及一种用于处理数据库管理系统(database managementsystem,简称DBMS)查询的装置,更具体地但不仅限于,涉及使用即时追踪编译技术的预编译DBMS查询。
移动设备和计算机操作系统通常需要DBMS,但缺少资源来运行客户端-服务器DBMS。在这些情况下,会使用嵌入式DBMS。但是,相比客户端-服务器DBMS,嵌入式DBMS的延迟通常更长。提高嵌入式DBMS的效率将提高智能手机用户以及众多使用嵌入式DBMS的网站的用户体验。
由于嵌入式DBMS软件通常在解释环境中执行,因此减少延迟的一种现有方法是将DBMS查询转化为查询执行计划,而不是直接解释。这种方法省去了解释开销,并提高了查询执行的速度。
通常,查询执行计划包括将查询编译为一些中间表示(intermediaterepresentation,简称IR),有时又称为物理执行计划。可以通过以下三种方式来执行所述IR:可以直接执行所述IR;所述IR也可以由查询引擎进一步转化为查询计划,并且由虚拟机(virtual machine,简称VM)来执行;和/或所述IR可以转化为机器代码。三种方法的任意组合都是可行的。可以使用C/C++或底层虚拟机(low level virtual machine,简称LLVM)编译器等通用编译器来执行机器代码转化。
第一种和第二种方法的执行速度并不理想,但由于所述代码为高级语言代码,因此这些方法可以进一步优化。执行机器代码转化的速度比IR或VM更快,但需要编译工具链以在目标计算机上运行,这在使用嵌入式DBMS的设备中通常不可行,例如智能手机、手持设备和物联网设备等。另一限制因素在于程序员通常无法理解机器代码,这使得进一步的优化和维护变得几乎不可能。此外,更改单个参数时还需要重新编译整个代码。
现有解决方案在解决这些限制方面有所不同。但是,这些现有解决方案都不能同时提供机器代码效率和高级计算机语言的灵活性和可维护性。
发明内容
本发明及其实施例涉及一种用于处理数据库管理系统(database managementsystem,简称DBMS)查询的装置,更具体地但不仅限于,涉及使用即时追踪(tracing just-in-time,TJIT)编译技术的预编译DBMS查询。
本发明及其实施例适用于任何DBMS,例如SQLite、MySQL、NoSQL、Key-Value、地理空间存储和/或任何数据库引擎,其中查询以域专用语言(domain specific language,简称DSL)表示。本发明可以实现任何DBMS配置,例如客户端-服务器DBMS和嵌入式DBMS等。可以在用于执行DBMS的任何计算平台上实现本发明,例如计算机、服务器、无线计算设备、移动计算设备等。
例如,移动设备可能需要嵌入式DBMS,本文中称为DBMS,以便执行访问客户数据库和客户关系管理(customer relationship management,简称CRM)系统等任务。但是,由于内存和计算资源有限,移动设备上的DBMS可能无法为计算密集型查询提供恰当的性能。在电池供电设备中,计算DBMS请求可能会缩短电池寿命,从而降低用户体验。
回环通常是DBMS查询中计算密度最大的代码,并且在DBMS中的执行速度特别慢。如本领域所知,回环是计算机程序内的指令序列,这些指令不断重复直到满足某个条件。因此,通过编译回环的机器代码可以实现执行速度的重大改进。TJIT通过识别回环并在运行时将回环编译成机器代码来解决此问题。可以使用任何版本的TJIT,包括LuaJIT、TraceMonkey、HotPathVM、CIL的SPUR等。
传统的即时(just in time,简称JIT)编译基于“即时方法”,实现工程师可理解的高阶运行原语,并且该编译可以进一步优化。然而,传统的JIT编译器不能总是优化源语言的高阶原语,这可能会导致机器代码不理想。TJIT编译优化高阶运行原语,并为回环生成接近最佳性能的机器代码片段。
将查询预编译为TJIT源代码,在此称为内核代码,并在TJIT VM中执行结果代码,以减少编译和执行的开销。由于内核代码是高级源代码,所以更容易生成内核代码,可以通过TJIT编译器进一步优化,并且内核代码生成器更易于维护。此外,TJIT源代码允许为每次执行传递不同的输入参数,且无需重新编译。例如,可以使用单个内核代码来检索不同范围的参数,而无需重新编译。
根据本发明的第一方面,提供了一种用于处理数据库管理系统(databasemanagement system,简称DBMS)查询的装置,包括处理器,用于接收DBMS查询,并且从所接收的DBMS查询中提取查询签名。此外,当从所述DBMS查询中提取的所述查询签名与即时追踪(tracing just intime,简称TJIT)内核数据集中的现有记录相匹配时,所述处理器用于通过访问来自所述TJIT内核数据集的现有记录来执行与所述TJIT内核数据集中的查询签名相关联的TJIT内核,以及在执行所述TJIT内核期间,通过解释所述TJIT内核的源代码来生成用于执行所述DBMS查询的机器代码。当所提取的查询签名与所述TJIT内核数据集中的现有记录不匹配时,所述处理器还用于从所接收的DBMS查询中提取结构化查询语言(structured query language,简称SQL)文本;根据所提取的SQL文本,生成用于处理所接收到的DBMS查询的查询执行计划,以执行所述查询执行计划;并且将与所述查询签名相关联的所述SQL文本存储为所述TJIT内核数据集的新记录。此外,可能会生成SQL文本的新查询签名。根据这个应用,TJIT内核的源代码也称为内核代码。
根据第一方面,在所述装置的第一种可能的实现方式中,当从所述DBMS查询中提取的所述查询签名与即时追踪(tracing just in time,简称TJIT)内核数据集中的现有记录相匹配时,所述处理器还用于解析所述DBMS查询,以获取所述DBMS查询的查询执行计划,并用至少一个内核指令代码替换所述查询执行计划或所述查询执行计划的至少一个片段,以创建修补后的查询执行计划;其中所述处理器用于根据所述修补后的查询执行计划来执行所述TJIT内核的所述源代码。
根据第一方面的第一种实现方式,在所述装置的第二种可能的实现方式中,根据从所述查询执行计划中提取的变量参数生成所述至少一个内核指令代码。
根据第一方面的第一种或第二种实现方式,在所述装置的第三种可能的实现方式中,所述至少一个内核指令代码在TJITed语言执行环境中执行。
根据第一方面或第一方面的上述任一实现方式,在所述装置的第四种可能的实现方式中,所述处理器用于通过将所提取的SQL文本转换为域专用语言(domain-specificlanguage,简称DSL)编译器的中间表示(intermediate representation,简称IR)来生成所述TJIT内核的源代码。
根据第一方面的第四种实现方式,在所述装置的第五种可能的实现方式中,所述处理器用于根据所述IR执行编译过程。
根据第一方面或第一方面的上述任一实现方式,在所述装置的第六种可能的实现方式中,通过DB配置感知的高阶原语库执行所述TJIT内核的源代码。
根据第一方面的第六种实现方式,在所述装置的第七种可能的实现方式中,所述DB配置感知的高阶原语库是从包括映射函数、滤波函数、缩减函数、mapReduce、groupBy、连接函数的组中选择出的功能组合器。
根据第一方面的第七种实现方式,在所述装置的第八种可能的实现方式中,所述高阶原语库由域专用语言(domain specific language,简称DSL)编译器生成,其中所述功能组合器用于特定DBMS。
根据第一方面或第一方面的上述任一实现方式,在所述装置的第九种可能的实现方式中,所述TJIT内核的源代码由类似迭代器的对象执行,其中所述对象通过TJITed语言执行操作,并具有支持追踪执行路径并将追踪编译为机器代码的TJIT编译器。
根据本发明的第二方面,提供了一种用于处理数据库管理系统(databasemanagement system,简称DBMS)查询的方法,所述方法包括以下步骤:接收DBMS查询;从所述接收到的DBMS查询中提取查询签名。此外,当从所述DBMS查询中提取的所述查询签名与即时追踪(tracingjust in time,简称TJIT)内核数据集中的现有记录相匹配时,所述方法包括:通过访问来自所述TJIT内核数据集的现有记录来执行与所述TJIT内核数据集中的查询签名相关联的TJIT内核,以及在执行所述TJIT内核期间,通过解释所述TJIT内核的源代码来生成用于执行所述DBMS查询的机器代码。此外,当所提取的查询签名与所述TJIT内核数据集中的现有记录不匹配时,所述方法包括:从所接收的DBMS查询中提取结构化查询语言(structured query language,简称SQL)文本;根据所提取的SQL文本,生成用于处理所接收到的DBMS查询的查询执行计划,以执行所述查询执行计划;并且将与所述查询签名相关联的所述SQL文本存储为所述TJIT内核数据集的新记录。此外,可能会生成SQL文本的新查询签名。
除非另有定义,本文所使用的所有技术和/或科学术语的含义与本发明所属领域的普通技术人员所公知的含义相同。与本文所描述的方法和材料类似或者相同的方法和材料可以用于本发明实施例的实践或测试,下文描述示例性的方法和/或材料。若存在冲突,则以包括定义在内的专利说明书为准。另外,材料、方法以及示例都只是用于说明,并非必要限定。
附图说明
此处仅作为示例,结合附图描述了本发明的一些实施例。现在具体结合附图,需要强调的是所示的项目作为示例,为了说明性地讨论本发明的实施例。这样,根据附图说明,如何实践本发明实施例对本领域技术人员而言是显而易见的。
在附图中:
图1A是本领域已知的嵌入式SQL DBMS查询处理系统的组件和其之间的操作流程的示意图;图1B是根据本发明的一些实施例的用于处理DBMS查询的组件和其之间的操作流程的示意图;
图2是根据本发明的一些实施例的用于预编译和执行DBMS查询的示例性系统的示意图;
图3是根据本发明的一些实施例的执行TJIT内核的源代码(即内核代码)的过程的示意性流程图;
图4是根据本发明的一些实施例的预编译内核代码的过程的示意性流程图;
图5是根据本发明的一些实施例的为特定TJIT编译器和特定DBMS生成内核代码的过程的示意性流程图。
具体实施方式
本发明及其实施例描述了一种将DBMS查询预编译成内核代码并存储所得代码以供后续执行的装置。当收到新的查询时,执行相应的内核代码,并在运行时将回环代码片段编译为机器代码并执行。
通过减少编译开销和执行时间,本发明及其实施例可以为移动计算设备提供响应更迅速的用户体验,并且使用更少的能量来执行DBMS查询,以延长电池寿命。本发明的另一个优点是维持对嵌入式DBMS内现有应用程序的支持,同时减少了编译开销和执行时间。
在详细解释本发明的至少一个实施例之前,应当理解,本发明不必将其应用局限于下文中阐述的和/或在附图和/或举例中说明的部件和/或方法的结构和布置的细节。本发明可以有其他实施例或可以采用各种方式实践或执行。
本发明可以是系统、方法和/或计算机程序产品。所述计算机程序产品可以包括具有计算机可读程序指令的一个(或多个)计算机可读存储介质,所述指令用于使处理器执行本发明的各个方面。
所述计算机可读存储介质可以是有形设备,该有形设备可以保存和存储指令执行设备使用的指令。例如,所述计算机可读存储介质可以是但不限于电子存储设备、磁性存储设备、光存储设备、电磁存储设备、半导体存储设备或其任意合适组合。
可以从计算机可读存储介质中将此处描述的计算机可读程序指令下载到各个计算/处理设备上,或通过网络下载到外部计算机或外部存储设备上,所述网络如因特网、局域网、广域网和/或无线网。
所述计算机可读程序指令可以完全在用户电脑上执行,部分在用户电脑上执行,作为独立的软件包执行,部分在用户电脑上执行且部分在远端电脑上执行,或完全在远端电脑或服务器上执行。在后面的场景中,远端电脑可以通过任何类型的网络与用户电脑连接,包括局域网(local area network,简称LAN)或广域网(wide area network,简称WAN),或者,可以(例如,使用因特网服务提供商提供的因特网)与外部电脑建立该连接。在一些实施例中,电子电路包括可编程逻辑电路、现场可编程门阵列(field programmable gatearray,简称FPGA)或可编程逻辑阵列(programmable logic array,简称PLA)等,可以利用计算机可读程序指令的状态信息执行所述计算机可读程序指令以定制所述电子电路,以便执行本发明的各方面。此处,结合本发明实施例的方法、装置(系统)以及计算机程序产品的流程图和/或框图描述本发明的各方面。应当理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。
附图中的流程图和框图示出了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。此时,流程图或框图中的每个框都可以代表一个模块、一个分段或多个指令的一部分,该指令部分包括一个或多个用于实现特定逻辑功能的可执行指令。在一些可选的实现方式中,框中指出的功能可以不按照图中的顺序实现。例如,事实上,连续展示的两个框可以大体上同时执行,或者有时候,框可以按照相反的顺序执行,这取决于所涉及的功能。还应注意的是,框图和/或流程图中每一个框以及框图和/或流程图中框的组合可以由基于专用硬件的系统执行,该系统执行指定的功能或动作,或者执行专用硬件和计算机指令的组合。
现在参照图1A,图1A是本领域已知的嵌入式SQL DBMS查询处理系统的组件和其之间的操作流程的示意图。图1A可以是任意SQL DBMS,例如SQL Server Compact、AdvantageDatabase Server、SQLite、MySQL和/或任何其他DBMS。本发明及其实施例中包括如图1A所示的嵌入式DBMS的扩展。如DBMS101所示,DBMS包括本领域已知的查询编译器102、查询引擎103和数据库的数据访问层(data access layer,简称DAL)应用编程接口(applicationprogramming interface,简称API)104。
现在参考图1B,图1B是根据本发明的一些实施例的用于处理DBMS查询的组件和其之间的操作流程的示意图100。
如图1B所示,示意图100包括两个功能单元100A和100B。100A包括用于执行预编译查询的组件和其之间的操作流程。可以通过在处理器204上执行的代码模块来实现100A,例如查询选择器210、计划修补器211、内核执行器212和TJIT VM213。
100B包括用于生成内核代码的组件和其之间的操作流程。可以通过在处理器204上执行的代码模块来实现100B,例如SQL到IR转换器215、DAL API216、专用内核生成器217。
如100A所示,图1A中执行查询的扩展包括:为每个接收到的DBMS查询生成签名,并将所述签名与所述TJIT内核数据集进行比较。当找到匹配的签名时,在接收到的查询中识别上下文信息,以作为输入参数传递给内核代码。在TJIT VM中执行至少一些内核代码段,所述TJIT VM支持追踪执行路径,将回环的追踪编译为机器代码,并执行所述机器代码。也可以在传统的SQL执行环境中执行内核代码段。100A可以由系统执行,例如如下所述的系统200。100A的功能可以通过一个过程来描述,如下述图3所述。
当没有找到匹配的签名时,所选择的接收到的查询与对应的签名一起存储在表格中,所述表格称为TJIT内核数据集。之后从存储的查询中生成内核代码,如下所述。
如100B所示,图1B中用于生成内核代码的扩展包括:将所接收的来自SQL的查询转化成TJIT源代码,包括替代SQL操作符的高阶原语。100B可以由系统执行,例如如下所述的系统200。100B的功能可以通过一个过程来描述,如下述图4和图5所述。
根据本发明的一些实施例,如图1A所示,示意图100是DBMS的扩展。图1B示出了SQLite的扩展,但是可以使用任意嵌入式DBMS。图1B中所示的TJIT是LuaJIT,但是也可以使用其他TJIT编译器。
现在参考图2,图2是根据本发明的一些实施例的用于预编译和执行DBMS查询的示例性系统的示意图,如图1B所示。
系统200包括用于接收用户查询并输出查询结果的输入/输出(input/output,简称I/O)接口202、处理器204、存储器208。I/O202可以包括一个或多个输入接口,例如键盘、软键盘、语音到文本系统和/或任何其他数据输入接口。I/O202可以包括一个或多个输出接口,例如屏幕、触摸屏、视频显示器和/或任何其他视觉显示设备。处理器204可以包括一个或多个处理器、多核处理器和/或任何其他类型的核心处理单元(core processing unit,简称CPU)。存储器208可以包括一个或多个非瞬时性持久存储设备,例如硬盘驱动器和闪存阵列等。存储器208可以包括数据库(例如数据库104)以及记录表(例如TJIT内核数据集115)。
100A和100B由处理器204执行,所述处理器执行来自存储器208中的一个或多个软件模块的代码,例如查询选择器210、计划修补器211、内核执行器212、TJIT VM213和/或DSL编译器214。其中,软件模块是指存储在非瞬时性介质(例如存储器208)中并且由处理器(例如所述处理器204)来执行的多个程序指令。DSL编译器214可以包括一个或多个软件模块,例如SQL到IR转换器215、DAL API216、专用内核代码生成器217。
现在参考图3,图3是根据本发明的一些实施例的用于执行内核代码的过程的示意性流程图。如上所述,图3描述了如100A所示的功能。如301所示,如本领域所知,100A开始于接收来自诸如I/O202的DBMS查询,并且查询选择器210计算接收到的查询的签名。如302所示,查询选择器210在TJIT内核数据集115中搜索具有与接收到的查询相匹配的签名的内核代码。
可选地,每个TJIT内核数据集记录包括内核代码或所接收到的查询。另外,每条记录包括关联的签名、元数据和一个值为“活跃”或“非活跃”的字段。非活跃TJIT数据集记录包括尚未预编译为内核代码的DBMS查询。活跃TJIT数据集记录包括已经预编译为内核代码的DBMS查询。所述预编译内核代码的过程如下述图4所述。元数据包括描述内核代码的信息,例如来自不同表格的数据库列和/或字段、由内核代码访问的索引、表征内核的信息、由内核代码访问的表和列的列表以及数据库模型。如下所述,元数据和模型用于从数据库中检索信息。
当检测到匹配时,接收到的查询标记为用于进一步处理,例如由计划修补器211处理。
可选地,查询选择器210仅针对在所接收的查询中检测到的回环来计算签名,而不是针对整个接收到的查询。
可选地,查询选择器210可以识别具有匹配签名的多个内核代码。可选地,多个匹配签名中的每一个匹配签名分别对应于接收到的查询中已识别的回环。
如303所示,通过诸如计划修补器211来识别来自所接收到的查询的上下文信息,并将其作为输入参数提供给内核代码。如本领域所知,所述上下文信息可以包括CursorId、TableId、DatabaseId等。如本领域所知,生成执行计划,并且从所述执行计划中生成修补计划。可选地,所述修补计划包括识别所述执行计划中的回环,并用特殊指令代替那些回环,此处称为内核指令。可选地,在生成所述执行计划时,会识别回环并将所述回环替换为内核指令。有关内核指令的示例,请参见下面的代码片段7。
修补后的计划可以使用“热路径拼接”机制来生成,该机制有助于拼接执行路径,否则这些执行路径会由内核代码和DBMS系统代码之间传递的控制流分开。特别地,这意味着由至少一个内核指令代码取代的查询执行计划的片段可能不是整个回环,而只是回环的主体。当只考虑回环主体时,可以使用将编译后的轨迹拼接在一起的特殊机制。
在回环主体片段的情况下,执行控制流程可以包括以下步骤:
1)在DBMS中开始执行该回环;
2)在每次迭代执行回环主体期间,都会执行内核代码:
a)使用setjmp/longjmp或TJIT-ed VM的路径拼接机制支持的其他等效指令将控制流传递给TJITed VM;
b)执行内核代码;
c)使用setjmp/longjmp或由TJIT-ed VM的路径拼接机制支持的其他等效指令将控制流传回DBMS。
3)在执行内核代码后,完成回环主体的执行,所述DBMS进入回环的下一次迭代。
在TJIT-ed VM中,路径拼接机制是特殊的,用于处理在TJITed VM之外定义回环但在TJIT VM中执行回环主体的这种情况。
如304所示,对来自相应TJIT数据集记录的内核代码进行实例化,并且由诸如内核执行器212等来将所提取的上下文信息作为输入参数提供给内核代码。例如,内核代码由内核执行器212执行。内核执行器212可以通过诸如调用内核实例对象的指定方法来调用执行所述内核代码的TJIT VM213。内核执行器212还包括标准的SQL执行环境。
内核代码包含SQL指令、TJIT源代码和/或内核指令。内核指令被预编译为TJIT源代码,所述TJIT源代码来自从所接收的查询中提取的回环和/或查询本身预编译的回环。在运行时,TJIT VM,如TJIT VM213,追踪所述回环,将所述追踪编译为机器代码,并执行所述机器代码。修补后的执行计划和/或内核代码发送查询,并接收来自数据库(例如数据库104)的回复。
如305所示,如本领域所知,当接收到的查询签名与TJIT数据集记录的内核代码签名不匹配时,由计划修补器211准备执行计划。执行计划由内核执行器212执行,包括访问数据库的DAL API,如本领域所知。如上所述,所接收到的不具有匹配的内核代码的查询可以与对应的签名一起存储在TJIT数据集表中,以便进行预编译。可选地,查询选择器210包括代码指令,用于根据用户提供的参数或其他标准来计算哪些DBMS查询已存储为TJIT数据集中的记录,以便进行预编译。
现在参考图4,图4是根据本发明的一些实施例的用于预编译和存储内核代码的过程的流程图,例如100B。
如401所示,通过诸如DSL编译器214中的代码指令来标识TJIT数据集中具有“非活跃”的值的记录。如402所示,当找到非活跃记录时,如下述403所示继续预编译过程。可选地,100B的执行可以由存储非活跃记录的查询选择器210触发和/或通过定时触发器触发等。
如403所示,解析查询文本,并且通过诸如SQL到IR转换器215提取SQL文本,并将其转换为基于图表的中间表示(intermediate representation,简称IR)。如404所示,从IR中生成内核代码。生成内核代码的过程参考如下图5所示。
如405所示,生成的内核代码可复制到相应的内核数据集记录,并且通过诸如DSL编译器214将该记录设置为“活跃”。如402所示,重复步骤403、404、405直到TJIT数据集中的所有记录都标记为活跃。
现在参考图5,图5是根据本发明的一些实施例的用于为特定TJIT编译器和特定DBMS生成内核代码的过程,例如100B。计算内核代码的操作可以由代码指令执行,例如通过SQL到IR215、DAL API216、专用生成器217来执行。
如501所示,发送查询到数据库,例如由DAL API216发送到数据库104,并且如本领域所知,接收包括数据库模型的回复。有关DBMS模型的示例,请参阅下面的代码片段4。DALAPI216将接收到的模型配置传送给内核生成器502。
如503所示,通过诸如SQL到IR转换器215将查询发送到TJIT数据集115,接收包括标记为“非活跃”的TJIT数据集记录的回复,并将该查询转换为IR。所述SQL到IR转换器215将IR传送到内核代码生成器502。
可选地,内核代码生成器502通过诸如专用生成器217来执行以下操作。如下所述,IR中的SQL操作符转化为高阶原语。在产生TJIT源代码的IR上执行专用内核代码生成器411的编译过程。可选地,IR中的回环编译成内核指令,如上所述。由此产生的TJIT源代码是内核代码。
可选地,在生成第一内核代码之前,通过DSL编译器214和/或通过手动编写的源代码等方式来创建高阶原语库与DBMS抽象层,以便内核代码访问DBMS中的数据。可选地,生成的高阶原语是与特定DBMS相关联的专用组合器。高阶原语库转换自SQL运算符。例如,SQL中的“SELECT”转化为高阶原语“map”,“WHERE”转化为“filter”,并且“JOIN”转化为“join”。
可选地,由专用内核代码生成器411将高阶原语库编译成内核代码源代码,以替换在所接收的查询中找到的SQL运算符。
可选地,高阶原语在执行时调用由上述DBMS抽象层实现的软件功能。所述DBMS抽象层为高阶原语库提供了底层代码,所述底层代码用于访问DBMS,因此DBMS是特定的。例如,为SQLite和MySQL编写不同的DBMS抽象层。
再次参考图1B,包括100A和100B。用户应用240可以将查询250发送给系统,例如系统200。如上所述,存储选择的新查询并将其预编译成内核代码,并且当存储相应的内核代码时,执行所述内核代码以代替所接收的查询。116中处理查询请求的过程,如图3所述,由100A的部件之间的实线箭头示出。117中生成内核代码的过程,如图4和图5所述,由100B的组件之间的空心箭头示出。
如图4和图5所示,从接收到的查询中生成内核代码的过程通过下面的代码片段的示例示出。在代码片段1中示出接收的查询的示例,例如,来自基准事物处理性能委员会标准H(Transaction Processing Council standard H,简称TPC-H)的SQL DBMS查询Q1。
代码片段1:"TPC-H Q1"
Q1:
select
l_returnflag,l_linestatus,
sum(l_quantity)as sum_qty,
sum(l_extendedprice)as sum_base_price,
sum(l_extendedprice*(1-l_discount))as sum_disc_price,
sum(l_extendedprice*(1-l_discount)*(1+l_tax))as
sum_charge,avg(l_quantity)as avg_qty,
avg(l_extendedprice)as avg_price,
avg(l_discount)as avg_disc,count(*)as count_order
from lineitem
where l_shipdate<='1998-12-01‘
group by l_returnflag,l_linestatus
order by l_returnflag,l_linestatus;
代码片段1中应该特别关注根据代码片段4中所示的DB模型来实现的表格lineitem(用斜体表示),以及代码片段2中将转化为高阶原语“filter”的SQL操作。
如上述图5所述,代码片段2是Q1预编译成的内核代码输出的TJIT源代码。
代码片段2:转化为TJIT源代码的Q1
代码片段2中应该特别关注高级原语“filter”和“mapReduceU”(用斜体表示),这些原语由SQL操作符“WHERE”和“GROUP BY”转化而来。在代码片段2的示例中,所接收的SQL查询的源代码是LuaJIT。
如代码片段3所示,来自诸如代码片段2的示例性回环由TJIT VM在运行时编译成机器代码,如上所述。
代码片段3:代码片段2中在运行时编译的机器代码
fa6ffa9f and byte[r12+0x4],0xfb
fa6ffaa5 mov edi,[0x0965f3f4]
->LOOP:
fa6ffab9 movsd[rsp+0x50],xmm3
fa6ffaf3 cmp edi,[0x0965f3dc]
fa6ffafa jb 0xfa6ffb13
fa6ffb01 mov edi,0x0965f3b8
fa6ffb06 call 0x1094337a0->lj_gc_step_jit
fa6ffb0b test eax,eax
fa6ffb0d jnz 0xfa6f0058->18
…
fa6ffc76 cvttsd2si r12,xmm7
fa6ffc7b imul r11,r12,0x98
fa6ffc82 mov[rsp+0x48],r11
fa6ffc87 mov r12,r11
fa6ffc8a add r12,rbp
fa6ffc8d add r12,0x98
fa6ffc94 mov[rsp+0x38],r12
fa6ffc99 mov esi,0x10
fa6ffc9e call 0x1094338c0->lj_mem_newgco
…
fa6ffe27 mov[0x0965f3f4],r12d
fa6ffe2f mov[r12+0xc],edi
fa6ffe34 jmp 0xfa6ffab9->LOOP
在代码片段4中示出了实现TPC-H Q1中的表格“lineitem”的示例,代码片段4包括由专用内核生成器217使用的模型的一部分,以使所生成的TJIT源代码能够读取访问数据库,例如数据库104。
代码片段4:模型实施方式
create table lineitem(
l_orderkey integer,
l_partkey integer,
l_suppkey integer,
l_linenumber integer,
l_quantity real,
l_extendedprice real,
l_discount real,
l_tax real,
l_returnflag char,
l_linestatus char,
l_shipdate date,
l_commitdate date,
l_receiptdate date,
l_shipinstruct varchar,
l_shipmode varchar,
l_comment varchar);
create index lineitem_pk on lineitem(l_orderkey,l_linenumber);
create index lineitem_order_fk on lineitem(l_orderkey);
create index lineitem_supp_fk on lineitem(l_suppkey);
create index lineitem_part_fk on lineitem(l_partkey);
create index lineitem_ps_fk on lineitem(l_partkey,l_suppkey);
create index part_pk on part(p_partkey);
在代码片段5中示出了如上所述的DBMS抽象层的示例性片段。代码片段5包含SQLite的高阶原语“filter”的实现。如上所述,DBMS抽象层是DBMS特有的,并且不同的DBMS会有不同的实现。
代码片段5:高阶组合器“filter”的实现
如本领域所知,代码片段6中示出了DBMS抽象层的一部分,包括类似迭代器的对象的接口的实现。代码片段6演示了类似接口的迭代器如何避开高阶组合器,隐藏SQLite命名空间派生的任意函数。
代码片段6:类似接口的迭代器的实现
代码片段7中示出了如上所述的用内核指令替换回环的计划修补器211的示例。
代码片段7:计划修补器用内核指令替换回环SQL命令。
如代码片段7的左侧图所示,接收到的查询包括内部右上角箭头内显示的SQL回环。如代码片段7的右侧图所示,“内核”指令取代了SQL回环指令。
对本发明各个实施例的描述只是为了说明的目的,而这些描述并不旨在穷举或限于所公开的实施例。在不脱离所描述的实施例的范围的情况下,本领域技术人员可以清楚理解许多修改和变化。相比于市场上可找到的技术,选择此处使用的术语可最好地解释本实施例的原理、实际应用或技术进步,或使本领域其他技术人员理解此处公开的实施例。
可预测,在从本申请案专利的有效期期间,将开发出许多相关TJIT且术语“TJIT”的范围意图先验地包括所有此类新技术。
本文所使用的术语“约”是指±10%。
术语“包括”、“包含”、“具有”以及其变化形式表示“包含但不限于”。这个术语包括了术语“由……组成”以及“本质上由……组成”。
短语“主要由…组成”意指组成物或方法可以包含额外成分和/或步骤,但前提是所述额外成分和/或步骤不会实质上改变所要求的组成物或方法的基本和新颖特性。
除非上下文中另有明确说明,此处使用的单数形式“一个”和“所述”包括复数含义。例如,术语“化合物”或“至少一个化合物”可以包含多个化合物,包含其混合物。
此处使用的词“示例性的”表示“作为一个例子、示例或说明”。任何“示例性的”实施例并不一定理解为优先于或优越于其他实施例,和/或并不排除其他实施例特点的结合。
此处使用的词语“可选地”表示“在一些实施例中提供且在其他实施例中没有提供”。本发明的任意特定的实施例可以包含多个“可选的”特征,除非这些特征相互矛盾。
在整个本申请案中,本发明的各种实施例可以范围格式呈现。应理解,范围格式的描述仅为了方便和简洁起见,并且不应该被解释为对本发明范围的固定限制。因此,对范围的描述应被认为是已经具体地公开所有可能的子范围以及所述范围内的个别数值。例如,对例如从1到6的范围的描述应被认为是已经具体地公开子范围,例如从1到3、从1到4、从1到5、从2到4、从2到6、从3到6等,以及所述范围内的个别数字,例如1、2、3、4、5和6。不管范围的宽度如何,这都适用。
当此处指出一个数字范围时,表示包含了在指出的这个范围内的任意所列举的数字(分数或整数)。短语“在第一个所指示的数和第二个所指示的数范围内”以及“从第一个所指示的数到第二个所指示的数范围内”和在这里互换使用,表示包括第一个和第二个所指示的数以及二者之间所有的分数和整数。
应了解,为简洁起见在单独实施例的上下文中描述的本发明的某些特征还可以组合提供于单个实施例中。相反地,为简洁起见在单个实施例的上下文中描述的本发明的各个特征也可以单独地或以任何合适的子组合或作为本发明的任何合适的其他实施例提供。在各个实施例的上下文中描述的某些特征未视为那些实施例的基本特征,除非没有这些元素所述实施例无效。此处,本说明书中提及的所有出版物、专利和专利说明书都通过引用本说明书结合在本说明书中,同样,每个单独的出版物、专利或专利说明书也具体且单独地结合在此。此外,对本申请的任何参考的引用或识别不可当做是允许这样的参考在现有技术中优先于本发明。就使用节标题而言,不应该将节标题理解成必要的限定。
Claims (12)
1.一种用于处理数据库管理系统DBMS查询的装置,其特征在于,包括:
处理器,用于:
接收DBMS查询;
从接收到的所述DBMS查询中提取查询签名;
当从所述DBMS查询中提取的所述查询签名与即时追踪TJIT内核数据集中的现有记录相匹配时:
通过访问来自所述TJIT内核数据集的现有记录来执行与所述TJIT内核数据集中的查询签名相关联的TJIT内核,以及
在执行所述TJIT内核期间,通过解释所述TJIT内核的源代码来生成用于执行所述DBMS查询的机器代码;
当所提取的查询签名与TJIT内核数据集中的现有记录不匹配时:
从所接收的DBMS查询中提取结构化查询语言SQL文本,
根据所提取的SQL文本,生成用于处理所接收到的DBMS查询的查询执行计划,
执行所述查询执行计划;
将与所述查询签名相关联的所述SQL文本存储为所述TJIT内核数据集的新记录。
2.根据权利要求1所述的装置,其特征在于,当从所述DBMS查询中提取的所述查询签名与即时追踪TJIT内核数据集中的现有记录相匹配时,所述处理器用于解析所述DBMS查询,以获取所述DBMS查询的查询执行计划,并用至少一个内核指令代码替换所述查询执行计划或所述查询执行计划的至少一个片段,以创建修补后的查询执行计划;其中所述处理器用于根据所述修补后的查询执行计划来执行所述TJIT内核的所述源代码。
3.根据权利要求2所述的装置,其特征在于,根据从所述查询执行计划提取的变量参数生成所述至少一个内核指令代码。
4.根据权利要求2所述的装置,其特征在于,所述至少一个内核指令代码在TJIT语言执行环境中执行。
5.根据权利要求3所述的装置,其特征在于,所述至少一个内核指令代码在TJIT语言执行环境中执行。
6.根据权利要求1至5中的任一项所述的装置,其特征在于,所述处理器用于通过将所提取的SQL文本转换为域专用语言DSL编译器的中间表示IR来生成所述TJIT内核的源代码。
7.根据权利要求6所述的装置,其特征在于,所述处理器用于根据所述IR执行编译过程。
8.一种用于处理数据库管理系统DBMS查询的装置,其特征在于,所述装置包括权利要求1至7任意一项所述装置的特征,并且,通过数据库DB配置感知的高阶原语库执行所述TJIT内核的源代码。
9.根据权利要求8所述的装置,其特征在于,所述数据库DB配置感知的高阶原语库是从包括映射函数、滤波函数、缩减函数、mapReduce、groupBy、连接函数的组中选择出的功能组合器。
10.根据权利要求9所述的装置,其特征在于,所述高阶原语库由域专用语言DSL编译器生成,其中所述功能组合器用于特定DBMS。
11.一种用于处理数据库管理系统DBMS查询的装置,其特征在于,所述装置包括权利要求1至7任意一项所述装置的特征,并且,所述TJIT内核的源代码由类似迭代器的对象执行,其中所述对象通过TJIT语言执行操作,并具有支持追踪执行路径并将追踪编译为机器代码的TJIT编译器。
12.一种用于处理数据库管理系统DBMS查询的方法,其特征在于,所述方法包括:
接收DBMS查询;
从接收到的所述DBMS查询中提取查询签名;
当从所述DBMS查询中提取的所述查询签名与即时追踪TJIT内核数据集中的现有记录相匹配时:
通过访问来自所述TJIT内核数据集的现有记录来执行与所述TJIT内核数据集中的查询签名相关联的TJIT内核,以及
在执行所述TJIT内核期间,通过解释所述TJIT内核的源代码来生成用于执行所述DBMS查询的机器代码;
当所提取的查询签名与TJIT内核数据集中的现有记录不匹配时:
从所接收的DBMS查询中提取结构化查询语言SQL文本,
根据所提取的SQL文本,生成用于处理所接收到的DBMS查询的查询执行计划,
执行所述查询执行计划;
将与所述查询签名相关联的所述SQL文本存储为所述TJIT,内核数据集的新记录。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/RU2016/000855 WO2018106141A1 (en) | 2016-12-06 | 2016-12-06 | A system and a method for query execution in dbms |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109313639A CN109313639A (zh) | 2019-02-05 |
CN109313639B true CN109313639B (zh) | 2021-03-05 |
Family
ID=58402115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680086992.1A Active CN109313639B (zh) | 2016-12-06 | 2016-12-06 | Dbms中进行查询执行的系统和方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN109313639B (zh) |
WO (1) | WO2018106141A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109063057A (zh) * | 2018-07-20 | 2018-12-21 | 玖富金科控股集团有限责任公司 | 数据库查询方法、终端、服务器、计算机可读介质及设备 |
CN112783500B (zh) * | 2019-11-08 | 2024-01-05 | Oppo广东移动通信有限公司 | 编译优化信息生成方法、装置及电子设备 |
CN111324803B (zh) * | 2020-02-11 | 2024-01-02 | 支付宝(杭州)信息技术有限公司 | 搜索引擎的查询请求处理方法、装置及客户端 |
CN112069202A (zh) * | 2020-09-09 | 2020-12-11 | 上海携程商务有限公司 | 基于追踪技术的sql性能分析方法、系统、设备及介质 |
CN113009550A (zh) * | 2021-02-26 | 2021-06-22 | 山东省科学院海洋仪器仪表研究所 | 一种海水放射性核素能量谱的滤波方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138597A (zh) * | 2009-12-13 | 2015-12-09 | 毕威拓软件公司 | 分析查询优化器性能的设备和方法 |
CN105279286A (zh) * | 2015-11-27 | 2016-01-27 | 陕西艾特信息化工程咨询有限责任公司 | 一种交互式大数据分析查询处理方法 |
CN106033469A (zh) * | 2014-11-14 | 2016-10-19 | 塔塔顾问服务有限公司 | 用于大数据的结构化查询的高效性能预测的方法和系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050177557A1 (en) * | 2003-09-06 | 2005-08-11 | Oracle International Corporation | Automatic prevention of run-away query execution |
US20150186462A1 (en) * | 2014-01-02 | 2015-07-02 | International Business Machines Corporation | Optimizing query processing by interposing generated machine code |
US9934278B2 (en) * | 2015-05-04 | 2018-04-03 | Quest Software Inc. | Method of optimizing complex SQL statements using a region divided preferential SQL rewrite operation |
-
2016
- 2016-12-06 CN CN201680086992.1A patent/CN109313639B/zh active Active
- 2016-12-06 WO PCT/RU2016/000855 patent/WO2018106141A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105138597A (zh) * | 2009-12-13 | 2015-12-09 | 毕威拓软件公司 | 分析查询优化器性能的设备和方法 |
CN106033469A (zh) * | 2014-11-14 | 2016-10-19 | 塔塔顾问服务有限公司 | 用于大数据的结构化查询的高效性能预测的方法和系统 |
CN105279286A (zh) * | 2015-11-27 | 2016-01-27 | 陕西艾特信息化工程咨询有限责任公司 | 一种交互式大数据分析查询处理方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2018106141A1 (en) | 2018-06-14 |
CN109313639A (zh) | 2019-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109313639B (zh) | Dbms中进行查询执行的系统和方法 | |
Palkar et al. | Evaluating end-to-end optimization for data analytics applications in weld | |
JP6491725B2 (ja) | データベース管理システムにおけるマイクロ特化の方法 | |
Armbrust et al. | Spark sql: Relational data processing in spark | |
Hueske et al. | Opening the black boxes in data flow optimization | |
Essertel et al. | Flare: Optimizing Apache Spark with Native Compilation for {Scale-Up} Architectures and {Medium-Size} Data | |
Alexandrov et al. | Implicit parallelism through deep language embedding | |
Klonatos et al. | Building efficient query engines in a high-level language | |
Freedman et al. | Compilation in the Microsoft SQL Server Hekaton Engine. | |
Zhang et al. | Optimizing Data Shuffling in {Data-Parallel} Computation by Understanding {User-Defined} Functions | |
Iu et al. | Hadooptosql: a mapreduce query optimizer | |
US20140280030A1 (en) | Method of converting query plans to native code | |
Gupta et al. | Aggify: Lifting the curse of cursor loops using custom aggregates | |
CA2980333A1 (en) | Field specialization systems and methods for improving program performance | |
Hong et al. | Improving simd parallelism via dynamic binary translation | |
Dörre et al. | Modeling and optimizing MapReduce programs | |
Gruber et al. | Bringing compiling databases to RISC architectures | |
Imran et al. | Fast datalog evaluation for batch and stream graph processing | |
Ramjit et al. | Acorn: Aggressive result caching in distributed data processing frameworks | |
Sousa et al. | Consolidation of queries with user-defined functions | |
Xu et al. | Niijima: Sound and automated computation consolidation for efficient multilingual data-parallel pipelines | |
Foufoulas et al. | YeSQL: rich user-defined functions without the overhead | |
US20150186462A1 (en) | Optimizing query processing by interposing generated machine code | |
US11157491B2 (en) | Compilation framework for dynamic inlining | |
Hueske et al. | Enabling operator reordering in data flow programs through static code analysis |
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 |