CN114090695A - 分布式数据库的查询优化的方法和装置 - Google Patents
分布式数据库的查询优化的方法和装置 Download PDFInfo
- Publication number
- CN114090695A CN114090695A CN202210081583.XA CN202210081583A CN114090695A CN 114090695 A CN114090695 A CN 114090695A CN 202210081583 A CN202210081583 A CN 202210081583A CN 114090695 A CN114090695 A CN 114090695A
- Authority
- CN
- China
- Prior art keywords
- operator
- database
- execution plan
- execution
- plan
- 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.)
- Pending
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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/242—Query formulation
-
- 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
Abstract
本公开披露了一种分布式数据库的查询优化的方法和装置。所述方法包括:接收第一数据库语句,所述第一数据库语句包括第一算子;枚举所述第一算子的执行计划,得到至少一个执行计划;其中,所述第一算子的执行计划包括基于所述第一算子的分布式算法生成的执行计划。
Description
技术领域
本公开涉及分布式数据库领域,并且更为具体地,涉及一种分布式数据库的查询优化的方法和装置。
背景技术
相关技术在生成分布式数据库的执行计划时,通常使用启发式枚举。例如,首先利用单机的查询优化方法,生成数据库查询语句的执行计划;其次,将该单机的执行计划进行分布式适配,得到分布式的执行计划。
上述启发式的查询优化方法,无法枚举所有等价的分布式执行计划。因此,生成的执行计划次优。
发明内容
本公开提供一种查询优化的方法和装置,以得到更优的分布式执行计划。
第一方面,提供一种查询优化的方法,一种分布式数据库的查询优化的方法,包括:接收第一数据库语句,所述第一数据库语句包括第一算子;枚举所述第一算子的执行计划,得到至少一个执行计划;其中,所述第一算子的执行计划包括基于所述第一算子的分布式算法生成的执行计划。
可选地,所述至少一个执行计划包括第一执行计划,所述第一计划为基于分布式代价计算模型计算得到的最小代价计划。
可选地,所述分布式代价计算模型包括以下代价中的一种或多种:CPU代价、I/O代价以及网络传输代价。
可选地,所述至少一个执行计划包括第二执行计划,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的。
可选地,所述数据库分区信息包括数据库表的分区方式,和/或数据库表的每个分区的物理位置。
可选地,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的,包括:所述第二执行计划提供的数据库分区信息能够提升所述第一算子的后续算子的执行效率。
可选地,所述至少一个执行计划包括第三执行计划,所述第三执行计划提供的数据在数据库中的存储顺序对所述第一算子的后续算子的分配是有用的。
第二方面,提供一种分布式数据库的查询优化装置,包括:接收模块,用于接收第一数据库语句,所述第一数据库语句包括第一算子;优化模块,用于枚举所述第一算子的执行计划,得到至少一个执行计划;其中,所述第一算子的执行计划包括基于所述第一算子的分布式算法生成的执行计划。
可选地,所述至少一个执行计划包括第一执行计划,所述第一计划为基于分布式代价计算模型计算得到的最小代价计划。
可选地,所述分布式代价计算模型包括以下代价中的一种或多种:CPU代价、I/O代价以及网络传输代价。
可选地,所述至少一个执行计划包括第二执行计划,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的。
可选地,所述数据库分区信息包括数据库表的分区方式,和/或数据库表的每个分区的物理位置。
可选地,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的,包括:所述第二执行计划提供的数据库分区信息能够提升所述第一算子的后续算子的执行效率。
可选地,所述至少一个执行计划包括第三执行计划,所述第三执行计划提供的数据在数据库中的存储顺序对所述第一算子的后续算子的分配是有用的。
第三方面,提供一种分布式数据库的查询优化装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现如第一方面所述的方法。
第四方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法。
第五方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法。
本公开提供的分布式数据库的查询优化的方法,在执行计划生成的过程中,考虑每个算子的分布式算法。因此,相比于相关技术中,将单机执行计划进行分布式适配的查询优化方法,本公开提供的方法能够得到符合分布式数据库的更优的执行计划。
附图说明
图1是相关技术中枚举连接算子的执行计划的流程示意图。
图2是本公开实施例提供的分布式数据库查询优化方法的流程示意图。
图3(a)是本公开实施例提供的第一算子的一种执行计划的示意图。
图3(b)是图3(a)提供的第一算子的另一种执行计划的示意图。
图4是本公开实施例提供的分布式数据库的查询优化装置的结构示意图。
图5是本公开实施例提供的分布式数据库的查询优化的装置的结构示意图。
具体实施方式
下面将结合附图,对本公开中的技术方案进行描述。为了便于理解本公开,下文先介绍本公开实施例涉及的术语。
分布式数据库
数据库是按照数据结构来组织、存储和管理数据的仓库。数据库是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。分布式数据库是一种结合了数据库与分布式的技术。分布式数据库将地理意义上分散,但计算机系统逻辑上属于同一个系统的各个数据库节点结合起来。
结构化查询语言
结构化查询语言(structured query language,SQL)是一种特殊的编程语言。结构化查询语言用于存取数据以及查询、更新和管理数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式。因此,具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言的语句可以嵌套,这使它具有极大的灵活性和强大的功能。
动态规划
动态规划(dynamic programming,DP)用于解决多阶段决策问题。动态规划的基本思想是,将待求解的问题分解为若干个子问题(阶段),按顺序求解子问题。前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,枚举出所有可能的局部解,通过决策保留那些有可能达到最优的局部解。丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
数据库在接收到一条数据库查询语句(例如一条SQL)后,数据库只知道这条数据库查询语句“想要什么”,而不知道具体“如何获取”这个结果。在数据库系统中,一个数据库查询语句通常会有很多种等价的获取结果的方法,每一种获取的方法被称为一个"执行计划"。执行计划可以指数据库用来访问数据的方法。
根据研究显示,数据库中不同的执行计划的在执行时,性能可能有数量级别的差异。因此,查询优化的方法在数据库系统中是非常重要的。如何更好地获取数据库查询语句想要的结果的过程,即为数据库中的查询优化方法。
相关技术常用的系统性的查询优化方法有System-R的自下而上(bottom up)动态规划方法和Volcano/Cascade的自上而下(top down)动态规划方法。
下面以自下而上的动态规划方法为例,简单介绍动态规划在查询优化中的实现过程。
一个数据库查询语句可能包含多个算子,例如,连接(join)算子、group by算子、window function 算子、order by算子等。
查询优化方法在生成执行计划的过程中,会按照预定的顺序依次枚举每个算子的执行计划,以得到包含所有算子的执行计划。例如,首先枚举连接算子的所有执行计划,保留连接算子的最优执行计划。在连接算子的最优执行计划的基础上,继续枚举group by算子,得到包含连接算子和group by算子的最优执行计划。依次类推,直到生成包含数据库查询语句中所有算子的最优执行计划。
具体地,以生成连接算子的执行计划的过程为例,简要介绍枚举连接算子的所有执行计划的方法。
图1是相关技术中枚举连接算子的执行计划的流程示意图。图1的例子中,需要对4张表(R1、R2、R3、R4)进行连接。每张表(例如R1)可以称为一张基表。
在第一阶段,需要首先枚举每张基表(R1、R2、R3、R4)的执行计划。枚举每张基表时,会枚举主表和主表的所有索引,保留最优的执行计划。最优的执行计划可以包括代价最小的执行计划和包含有用序的执行计划。
数据库在维护表(例如表R1)时,会同时维护表R1的索引。索引是一种单独地、物理地对数据库表中一列或多列的值进行排序的一种存储结构。它是某个表中一列或若干列的值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
表R1的索引可能有多个。每个索引可能针对表中不同的列的组合。不同的索引中,表的数据可能按照不同的顺序存储。
一个执行计划包含有用序,可以指当该执行计划执行完成后,数据的排序方式,对后续算子是有用的。例如,表R1为一个用户订单表,表R1包含第一索引,第一索引按照用户的订单数量进行排序。而当前的数据库查询语句需要返回所有订单数量超过100的用户的信息。此时,第一索引即为表R1的一个包含有用序的执行计划。
在枚举每张基表(R1、R2、R3、R4)的执行计划后,在第二阶段,枚举包含2张表的连接的执行计划。在枚举R1和R2这两张表的连接时,会分别在R1和R2保留的有用的执行计划的基础上,正交上R1和R2的所有单机连接算法。
正交指在R1和R2保留的执行计划的基础上,分别枚举R1和R2的所有连接。例如,R1保留了两个执行计划(执行计划1和执行计划2),在执行计划1的基础上,枚举所有R1和R2的连接算法,得到多个执行计划。在执行计划2的基础上,枚举所有R1和R2的连接,得到多个执行计划。将从执行计划1和执行计划2的基础上得到的所有执行计划进行筛选,保留最优的执行计划。以此类推,直到枚举完所有的执行计划,得到包含4张表(R1、R2、R3、R4)的执行计划。
得到4张表的连接算子的最优的执行计划后,在该最优的执行计划的基础上,继续枚举其他的算子(例如,group by 算子),以得到包含所有算子的执行计划。对于每一个算子,该方法都会枚举该算子所有的单机算法,保留最优的执行计划。
使用动态规划方法,能够系统性地枚举出所有等价的执行计划。然而,上述枚举执行计划的方法为单机的算法,只能够适用于单机数据库场景中。
对于分布式数据库(例如Oracle),目前通常采用启发式的计划枚举方法。启发式的计划枚举方法,可以将查询优化的过程大致分为两个阶段。
在第一阶段,使用已有的单机查询优化方法,生成一个单机的最优的执行计划。已有的单机查询优化方法例如可以是前文介绍的单机的动态规划查询优化方法。
在第二阶段,将第一阶段生成的单机的执行计划进行分布式适配,得到分布式的执行计划。
这种两阶段的分布式查询优化方法,在第一阶段生成执行计划的过程中,对于每个算子,该方法不考虑每个算子的执行计划的分布式信息(例如,网络传输代价)。因此,第一阶段生成单机执行计划虽然是单机最优的执行计划,但是,该执行计划对分布式数据库而言,可能是次优的执行计划。
在第二阶段进行分布式适配时,虽然可以在分布式的算子算法中选择代价较小的,然而,第二阶段选择的算法,是在第一阶段已选择的算法的基础上进一步的选择。即,第二阶段选择分布式算法时,仅会在第一阶段已经确定的范围内进行选择。因此,启发式的计划枚举无法枚举出所有等价的分布式执行计划。
例如,第一阶段选择的单机执行计划中,数据库语句中的一个算子选择的单机算法为,将表R1的数据拷贝到表R2所在的数据库分区的算法。当第二阶段对该算法进行分布式适配时,适配的分布式算法,是在将表R1的数据拷贝到表R2所在的数据库分区的单机算法的基础上的适配。当表R1的数据量比较大,且表R1和表R2所在的数据库分区之间网络时延非常大时,第二阶段获得的分布式执行计划的执行效率可能会较低。
然而,由于第一阶段已经选定了该算子的单机算法,在第二阶段分布式适配时,不会再考虑其他未选择的该算子的算法的分支。
因此,通过启发式的计划枚举生成的分布式执行计划,可能是次优的计划。该计划在分布式数据库中执行时,可能由于分布式代价(例如网络传输代价)较大,而使得执行效率较低。
实际上,分布式数据库至今没有形成一种如单机数据库一样能够枚举所有执行计划的系统性的方法。
因此,本公开实施例提供一种分布式数据库的查询优化方法。该方法为分布式数据库提供一种系统性的查询优化方案。
图2是本公开实施例提供的分布式数据库查询优化方法的流程示意图。
如图2所示,在步骤S210,接收第一数据库语句。第一数据库语句可以用于操作数据库中的数据。例如,第一数据库语句可以查询数据库中的数据,返回需要的数据集合或结果。
第一数据库语句可以是一条SQL语句。例如,第一数据库语句也可称为数据库查询语句。第一数据库语句可以是简单句也可以是复合句。
第一数据库语句可以包含一个或多个算子,本公开对第一数据库语句包含的算子的数量不做限制。算子也可以称为操作。算子可以操作数据库中的数据。例如,算子可以合并数据库中的两张表中的数据。数据库中的算子有多种,每种算子可以用于完成不同的操作。例如,连接算子可以将数据库中不同的表连接起来。又如,group by算子可以将数据库中的数据按照预定的规则分组。
后文以第一数据库语句中的第一算子为例,对第一数据库语言中的算子的执行计划的确定方式进行更为详细地举例说明。该第一算子可以指第一数据库语句中的任意一个算子。第一数据库语句中的其他算子均可以与第一算子相同或类似的方式确定自己的执行计划。
在步骤S220,枚举第一算子的执行计划,得到至少一个执行计划。枚举可以指列出有穷序列集的所有结果。该有穷序列集可以根据实际需要设定。
第一算子的执行计划可以指第一算子在数据库中的执行过程或访问路径。例如,第一算子为连接(join)算子。第一算子需要连接两张表(表1和表2)。将表1的数据拷贝到表2所在的数据库分区中,再将表1和表2进行连接,即为第一算子的一个执行计划。
第一算子的执行计划可以包括基于第一算子的算法生成的执行计划。算子的算法可以指一个操作在数据库具体的实现方式。第一算子的算法可以包括多种类型。使用第一算子的算法可以生成第一算子的执行计划。
第一算子的算法可以包括单机算法和分布式算法。单机算法为在单机数据库中处理第一算子时可以使用的算法。分布式算法为在分布式数据库中处理第一算子时可以使用的算法。
以第一算子为连接算子为例。对于连接算子,单机的算子算法可以包括hash join算法、merge join算法等。分布式的算子算法可以包括hash-hash重分区算法、broadcast算法等。
对于同一个算子,不同的数据库可能提供不同数量和类型的算法。本公开对第一算子的具体算法的个数和类型不做限定,以实际的数据库能够提供的算法类型为准。
在一些实施例中,一个算子可能需要执行多步操作,以得到一个执行计划。例如,继续参见图1,一个连接算子在进行4张表的连接时,每一次连接(例如连接表R1和R2)都可以理解为一个子连接算子。本公开所述的第一算子,也可以指一个算子的子算子。例如,可以指一个子连接算子。
枚举第一算子的执行计划可以指列出第一算子的所有执行计划。枚举第一算子的所有执行计划后,得到至少一个执行计划。可以将得到的至少一个执行计划保留下来,以供枚举后续算子的执行计划时使用。
本公开实施例在枚举第一算子的执行计划的过程中,同时枚举第一算子的分布式算法。由于可以等价地生成第一算子的所有执行计划,因此,相比于传统的启发式算法,可以得到更优的分布式执行计划。
在一些实施例中,至少一个执行计划中可以包括第一执行计划,第一执行计划可以指最小代价计划。
在枚举第一算子的执行计划的过程中,可以计算每个执行计划的代价。计算代价使用的计算模型可以根据需要或实际的数据库实现选择。
为了得到分布式下更优的执行计划,可以使用基于分布式的代价计算模型计算执行计划的代价。分布式代价计算模型可以包括以下代价中的一种或多种:CPU代价、I/O代价以及网络传输代价。
通过在计算代价时考虑分布式代价,使得获得的第一执行计划(即最小代价计划)为分布式下代价最小的计划。
本公开实施例在保留每个算子的执行计划时,保留每个算子在分布式下的最优计划。因此,使用本公开实施例提供的查询优化方法,可以系统性地枚举所有等价的执行计划,以寻找到预定的规则下最优的执行计划。
在一些实施例中,得到的至少一个执行计划可以包括第二执行计划。第二执行计划可以指该执行计划提供的数据库的分区信息对第一算子的后续算子的执行是有用的。第二执行计划也可以称为有用分区计划。
数据库(例如关系型数据库)中的数据通常以表的形式存储。当表中的数据量不断增大,查询数据的速度就会变慢,数据库管理系统(例如数据库应用程序或数据库代理)的性能就会下降。
为了提高数据库处理数据(例如查询数据)的性能,数据库中通常提供表分区或分表的功能。表分区指将逻辑上完整的一张表,存放在物理上分离的空间中。将表进行分区后,所有的表仍然属于同一张表,需要统一管理。分表指将一张大表分为多张小表。分表后,多张小表都是独立的表,可以进行单独的维护。
对表进行表分区或分表后,对表进行操作时,可以仅对相关的表分区或分表进行处理,因此,可以有效地提升数据库的数据处理效率。
对于分布式数据库,表的不同分区可能位于数据库的不同分区上。数据库的不同分区可能位于不同的物理位置。例如,数据库的第一分区可能位于北京,数据库的第二分区可能位于上海。又如,数据库的第一分区可能位于北京的第一机房,数据库的第二分区可能位于北京的第二机房。位于不同物理位置的数据库,在相互传输数据的过程中,可能由于网络原因导致传输时延较大。
在一些实施例中,在枚举第一算子的执行计划时,可以同时维护执行计划相关的分区信息。不同的执行计划得到的执行结果,会使数据具有不同的存储结构。例如,使用散列(哈希)算法得到的执行结果和使用合并(merge)算法得到的执行结果,数据会有不同的存储形式。
第一数据库语句还可能包括第二算子。在生成第一数据库语句的执行计划时,首先生成第一算子的执行计划。接着,在保留的第一算子的执行计划(例如第一执行计划和第二执行计划)的基础上,继续枚举第二算子的执行计划。在保留的第一算子的执行计划的基础上,继续枚举第二算子的执行计划,也可以称为正交第一算子和第二算子的执行计划。
当第一算子的一个执行计划(例如第二执行计划)执行完成后,数据的存储形式对第二算子的执行有用时,该执行计划即为一个有用分区计划。
一个算子的执行计划对后续的算子是有用分区计划,可以指选择该执行计划后,可以提升后续算子的执行效率。
图3(a)和图3(b)是本公开实施例提供的第一算子的两种执行计划的示意图。下面以图3(a)和图3(b)为例,介绍最小代价计划和有用分区计划。
图3(a)和图3(b)所示的实施例中,表R1可以使用数据库语句(create table R1(aint primary key, b int, c int, d int) partition by hash(a) partitions 4)生成。该数据库语句表示表R1有4列(a、b、c、d),使用哈希函数将表R1以a列为键分为4个分区。
表R2可以使用数据库语句(create table R2(a int primary key, b int, cint, d int) partition by hash(a) partitions 5)生成。该数据库语句表示表R2有4列(a、b、c、d),使用哈希函数将表R2以a列为键分为5个分区。
第一数据库语句例如可以是(select R1.a, sum(R2.c) from R1, R2 whereR1.b = R2.b group by R1.a)。该第一数据库语句表示从表R1和表R2中选出R1.b=R2.b的数据。将选出的结果根据R1.a分组,并将表R1.a和表R2的c列的和返回。
第一数据库语句可以包括多个算子。通常数据库在执行的过程中,会按照预设的顺序分析第一数据库中的每个算子。上述第一数据库语句可以包括连接(join)算子。连接算子可以将多张表连接起来。
图3(a)和图3(b)示出了分别使用两种分布式的连接算子算法得到的执行计划。图3(a)使用hash hash重分区的hash join算法。图3(b)使用broadcast的hash join算法。
使用hash hash重分区的hash join算法,哈希值相同的数据会被存储在相同的数据库分区中。例如,表R1的b列包括数据{1,2,3,4,5},表R2的b列包括数据{2,2,3,5,6,8}。使用hash hash重分区的hash join算法后,表R1和表R2中b列数值相同的数据会被存储在同一个数据库分区中。
而使用broadcast的hash join算法,则会将表R1或表R2进行广播。即,将表R1的数据传输到表R2所在的数据库分区中,或将表R2的数据传输到表R1所在的数据库分区中。
根据图3(a)和图3(b)可以看出,使用hash hash重分区的hash join算法执行速度更快。即,使用hash hash重分区的hash join算法,执行效率高于使用broadcast的hashjoin算法。
但是,上述第一数据库语句的group by算子对R1表的a列进行分组。使用broadcast的hash join算法的执行计划继承了表R1的分区信息。因此,该执行计划对后续的group by算子是有用的。该计划即为第一算子(连接算子)的一个有用分区计划。
对于每一个数据库中的每一个算子,不同的分布式数据库(例如Oracle、DB2等)可能会提供不同的分布式算法。但只要改算法能够提供物理属性(例如分区信息、网络传输信息等),和/或分布式代价计算方式,该数据库即可使用本公开提供的查询优化方案。
应理解,由于第一数据库语句可能有多个算子,不同的执行计划维护的分区信息可能对第一算子后续的不同算子有用。例如,第二执行计划包括第二执行计划1和第二执行计划2。第一数据库语句还包括第二算子和第三算子。第二执行计划1维护的分区信息可能对第二算子是有用的分区信息。第二执行计划2维护的分区信息可能对第三算子是有用的分区信息。
在获得第一算子的第二执行计划时,可以同时维护第二执行计划1和第二执行计划2。
通过保留针对第一算子后续的不同算子有用的第二执行计划,可以使保留的执行计划为更优的执行计划。
基于已有的单机的查询优化方法,本方法通过枚举算子的分布式算法和维护算子的分区属性,能够系统性地枚举所有的分布式执行计划,保证生成最优的分布式查询计划。
在一些实施例中,获得的第一算子的至少一个执行计划还可以包括第三执行计划。第三执行计划提供的数据在数据库中的存储顺序对第一算子的后续算子的分配是有用的。第三执行计划也可以称为有用序计划。
当第一算子的一个执行计划执行完成后,数据的存储顺序,可以减少后续算子的操作时,该执行计划即可称为一个有用序计划。
例如,第一算子使用合并(merge)算法合并表R1和表R2。使用合并算法后获得的数据可以按照选定的列的顺序存储。如果后续的算子(例如group by算子),需要按照顺序对数据进行分组,则使用合并算法生成的第一算子的执行计划对后续的算子即为有用的执行计划。
在一些实施例中,如果第一算子不使用合并算法合并表R1和表R2,而后续的算子(例如group by算子)需要按照顺序对数据进行分组时,在执行group by算子之前,数据库或数据库的优化器可能需要首先给group by算子分配一个排序(sort)算子。此时,不适用合并算法的执行计划,就不是一个有用序计划。
应理解,第三执行计划(有用序计划)也可以有多个。具体理由可以参见有用分区部分的描述。
本公开实施例提供的查询优化方法,可以充分枚举分布式数据库中每个算子的算法,得到最优的执行计划。例如,可以得到效率最高的执行计划,或代价最小的执行计划。
应理解,第二执行计划(有用分区计划)或第三执行计划(有用序计划)或第一执行计划(最小代价计划)可以是同一个计划,也可以是不同的计划。
在生成第一数据库语句的过程中,对第一数据库的每一个算子(例如第一算子),可以仅保留第一执行计划,以得到分布式代价最小的执行计划。也可以同时保留第一执行计划和第二执行计划。还可以同时保留第一执行计划和第三执行计划。
在一些实施例中,为了充分枚举所有的执行计划,得到最优的分布式执行计划,也可以在枚举每个算子的执行计划的过程中,保留第一执行计划、第二执行计划和第三执行计划。
本公开实施例提供的分布式数据库的查询优化方法,可以适用于动态规划算法。例如,可以适用于自下而上的动态规划算法或自上而下的动态规划算法。
前面结合图1至图3(b)介绍了本公开的方法实施例。下面结合图4和图5介绍本公开的装置实施例。应理解,装置实施例和方法实施例相互对应。装置实施例未详尽描述之处,请参见方法实施例部分的描述。
图4是本公开实施例提供的分布式数据库的查询优化装置的结构示意图。如图4所示,本公开实施例提供的查询优化装置可以包括接收模块410和优化模块420。
接收模块410可以用于接收第一数据库语句。第一数据库语句可以包括第一算子。
优化模块420可以用于枚举第一算子的执行计划,得到至少一个执行计划。第一算子的执行计划可以包括基于第一算子的分布式算法生成的执行计划。
可选地,该至少一个执行计划可以包括第一执行计划。第一执行计划可以为基于分布式代价计算模型计算得到的最小代价。
可选地,分布式代价计算模型可以包括以下代价中的一种或多种:CPU代价、I/O代价以及网络传输代价。
可选地,该至少一个执行计划包括第二执行计划。第二执行计划提供的数据库分区信息对第一算子后续算子的执行是有用的。
可选地,数据库分区信息包括数据库表的分区方式,和/或数据库表的每个分区的物理位置。
可选地,第二执行计划提供的数据库分区信息对第一算子的后续算子的执行是有用的,包括:第二执行计划提供的数据库分区信息能够提升第一算子的后续算子的执行效率。
可选地,该至少一个执行计划包括第三执行计划。第三执行计划提供的算子的执行顺序对第一算子的后续算子的分配是有用的。
图5是本公开实施例提供的分布式数据库的查询优化的装置的结构示意图。该分布式数据库的查询优化的装置500可以是数据库服务器。装置500可以包括存储器510和处理器520。存储器510可用于存储可执行代码。处理器520可用于执行所述存储器510中存储的可执行代码,以实现前文描述的各个方法中的步骤。在一些实施例中,该装置500还可以包括网络接口530,处理器520与外部设备的数据交换可以通过该网络接口530实现。
应理解,在本公开的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(digital video disc,DVD))、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统和装置,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (15)
1.一种分布式数据库的查询优化的方法,包括:
接收第一数据库语句,所述第一数据库语句包括第一算子;
枚举所述第一算子的执行计划,得到至少一个执行计划;
其中,所述第一算子的执行计划包括基于所述第一算子的分布式算法生成的执行计划。
2.根据权利要求1所述的方法,所述至少一个执行计划包括第一执行计划,所述第一执行计划为基于分布式代价计算模型计算得到的最小代价计划。
3.根据权利要求2所述的方法,所述分布式代价计算模型包括以下代价中的一种或多种:CPU代价、I/O代价以及网络传输代价。
4.根据权利要求1所述的方法,所述至少一个执行计划包括第二执行计划,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的。
5.根据权利要求4所述的方法,所述数据库分区信息包括数据库表的分区方式,和/或数据库表的每个分区的物理位置。
6.根据权利要求4所述的方法,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的,包括:所述第二执行计划提供的数据库分区信息能够提升所述第一算子的后续算子的执行效率。
7.根据权利要求1所述的方法,所述至少一个执行计划包括第三执行计划,所述第三执行计划提供的数据在数据库中的存储顺序对所述第一算子的后续算子的分配是有用的。
8.一种分布式数据库的查询优化装置,包括:
接收模块,用于接收第一数据库语句,所述第一数据库语句包括第一算子;
优化模块,用于枚举所述第一算子的执行计划,得到至少一个执行计划;
其中,所述第一算子的执行计划包括基于所述第一算子的分布式算法生成的执行计划。
9.根据权利要求8所述的装置,所述至少一个执行计划包括第一执行计划,所述第一执行计划为基于分布式代价计算模型计算得到的最小代价计划。
10.根据权利要求9所述的装置,所述分布式代价计算模型包括以下代价中的一种或多种:CPU代价、I/O代价以及网络传输代价。
11.根据权利要求8所述的装置,所述至少一个执行计划包括第二执行计划,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的。
12.根据权利要求11所述的装置,所述数据库分区信息包括数据库表的分区方式,和/或数据库表的每个分区的物理位置。
13.根据权利要求11所述的装置,所述第二执行计划提供的数据库分区信息对所述第一算子的后续算子的执行是有用的,包括:所述第二执行计划提供的数据库分区信息能够提升所述第一算子的后续算子的执行效率。
14.根据权利要求8所述的装置,所述至少一个执行计划包括第三执行计划,所述第三执行计划提供的数据在数据库中的存储顺序对所述第一算子的后续算子的分配是有用的。
15.一种电子设备,包括:
存储器和处理器;
所述存储器用于存储一条或多条计算机指令;
所述处理器用于执行所述一条或多条计算机指令以执行根据权利要求1至7中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210081583.XA CN114090695A (zh) | 2022-01-24 | 2022-01-24 | 分布式数据库的查询优化的方法和装置 |
PCT/CN2023/073203 WO2023138665A1 (zh) | 2022-01-24 | 2023-01-19 | 分布式数据库的查询优化方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210081583.XA CN114090695A (zh) | 2022-01-24 | 2022-01-24 | 分布式数据库的查询优化的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114090695A true CN114090695A (zh) | 2022-02-25 |
Family
ID=80309186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210081583.XA Pending CN114090695A (zh) | 2022-01-24 | 2022-01-24 | 分布式数据库的查询优化的方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114090695A (zh) |
WO (1) | WO2023138665A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115114328A (zh) * | 2022-08-29 | 2022-09-27 | 北京奥星贝斯科技有限公司 | 针对分布式数据库生成查询计划的方法及装置 |
WO2023138665A1 (zh) * | 2022-01-24 | 2023-07-27 | 北京奥星贝斯科技有限公司 | 分布式数据库的查询优化方法和装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435594B (zh) * | 2023-12-18 | 2024-04-16 | 天津南大通用数据技术股份有限公司 | 一种分布式数据库分布键的优选方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4769772A (en) * | 1985-02-28 | 1988-09-06 | Honeywell Bull, Inc. | Automated query optimization method using both global and parallel local optimizations for materialization access planning for distributed databases |
CN103927346A (zh) * | 2014-03-28 | 2014-07-16 | 浙江大学 | 基于数据量的查询连接方法 |
CN105677812A (zh) * | 2015-12-31 | 2016-06-15 | 华为技术有限公司 | 一种数据查询方法及数据查询装置 |
CN113312371A (zh) * | 2020-02-27 | 2021-08-27 | 华为技术有限公司 | 执行计划的处理方法、设备及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10922315B2 (en) * | 2018-05-24 | 2021-02-16 | Sap Se | Unified optimization of iterative analytical query processing |
US11386086B2 (en) * | 2018-08-30 | 2022-07-12 | International Business Machines Corporation | Permutation-based machine learning for database query optimization |
CN110909072B (zh) * | 2018-09-18 | 2023-07-18 | 阿里巴巴集团控股有限公司 | 一种数据表建立方法、装置及设备 |
CN112162983A (zh) * | 2020-09-22 | 2021-01-01 | 北京人大金仓信息技术股份有限公司 | 数据库索引建议处理方法、装置、介质和电子设备 |
CN113535753A (zh) * | 2021-07-19 | 2021-10-22 | 北京人大金仓信息技术股份有限公司 | 一种基于并行遍历算法的sql语句执行计划定位方法和装置 |
CN114090695A (zh) * | 2022-01-24 | 2022-02-25 | 北京奥星贝斯科技有限公司 | 分布式数据库的查询优化的方法和装置 |
-
2022
- 2022-01-24 CN CN202210081583.XA patent/CN114090695A/zh active Pending
-
2023
- 2023-01-19 WO PCT/CN2023/073203 patent/WO2023138665A1/zh unknown
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4769772A (en) * | 1985-02-28 | 1988-09-06 | Honeywell Bull, Inc. | Automated query optimization method using both global and parallel local optimizations for materialization access planning for distributed databases |
CN103927346A (zh) * | 2014-03-28 | 2014-07-16 | 浙江大学 | 基于数据量的查询连接方法 |
CN105677812A (zh) * | 2015-12-31 | 2016-06-15 | 华为技术有限公司 | 一种数据查询方法及数据查询装置 |
CN113312371A (zh) * | 2020-02-27 | 2021-08-27 | 华为技术有限公司 | 执行计划的处理方法、设备及系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023138665A1 (zh) * | 2022-01-24 | 2023-07-27 | 北京奥星贝斯科技有限公司 | 分布式数据库的查询优化方法和装置 |
CN115114328A (zh) * | 2022-08-29 | 2022-09-27 | 北京奥星贝斯科技有限公司 | 针对分布式数据库生成查询计划的方法及装置 |
CN115114328B (zh) * | 2022-08-29 | 2022-10-28 | 北京奥星贝斯科技有限公司 | 针对分布式数据库生成查询计划的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2023138665A1 (zh) | 2023-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10606834B2 (en) | Methods and apparatus of shared expression evaluation across RDBMS and storage layer | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
EP2901313B1 (en) | Pruning disk blocks of a clustered table in a relational database management system | |
EP1738290B1 (en) | Partial query caching | |
US8332389B2 (en) | Join order for a database query | |
US8601474B2 (en) | Resuming execution of an execution plan in a virtual machine | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
EP1234258B1 (en) | System for managing rdbm fragmentations | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
US20070038658A1 (en) | Communication optimization for parallel execution of user-defined table functions | |
US8812489B2 (en) | Swapping expected and candidate affinities in a query plan cache | |
US9218394B2 (en) | Reading rows from memory prior to reading rows from secondary storage | |
US10783142B2 (en) | Efficient data retrieval in staged use of in-memory cursor duration temporary tables | |
CN105989015B (zh) | 一种数据库扩容方法和装置以及访问数据库的方法和装置 | |
US8396858B2 (en) | Adding entries to an index based on use of the index | |
CN104573112A (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
US11188594B2 (en) | Wildcard searches using numeric string hash | |
CN113918602A (zh) | 一种数据缓存方法、装置和电子设备 | |
WO2024078122A1 (zh) | 数据库表扫描的方法、装置以及设备 | |
CN106980673A (zh) | 内存数据库表索引更新方法及系统 | |
CN115391424A (zh) | 数据库查询的处理方法、存储介质与计算机设备 | |
CN112818010B (zh) | 数据库查询方法及装置 | |
Mullangi et al. | SCISSOR: scalable and efficient reachability query processing in time-evolving hierarchies | |
CN114385555A (zh) | 一种数据查询方法、装置、设备及存储介质 | |
JP2020135530A (ja) | データ管理装置、データ検索方法及びプログラム |
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 |