CN111512283A - 数据库中的基数估算 - Google Patents
数据库中的基数估算 Download PDFInfo
- Publication number
- CN111512283A CN111512283A CN201880082871.9A CN201880082871A CN111512283A CN 111512283 A CN111512283 A CN 111512283A CN 201880082871 A CN201880082871 A CN 201880082871A CN 111512283 A CN111512283 A CN 111512283A
- Authority
- CN
- China
- Prior art keywords
- column
- entropy
- server
- values
- correlation
- 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.)
- Granted
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
- G06F16/24545—Selectivity estimation or determination
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2291—User-Defined Types; Storage management thereof
-
- 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
Abstract
本发明提供了一种应用于数据库管理系统的服务器以及一种方法。根据数据库中一列的熵,计算所述列的数据倾斜率;将所述数据倾斜率存储在所述数据库的目录中;通过将第一选择率与所述数据倾斜率相乘,估算所述列的选择率,所述数据库管理系统中的基数估算性能提高。计算数据库中两列之间的相关度,将所述相关度存储在所述数据库的目录中,根据所述相关度估算选择率,所述数据库管理系统中的基数估算性能提高。基数估算性能提高,进而完善了优化器生成的查询计划,从而提高了查询性能。
Description
本申请要求于2017年12月21日提交的序列号为15/850,361、发明名称为“数据库中的基数估算(Cardinality Estimation in Databases)”的美国非临时专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本发明涉及数据库,尤其涉及数据库中的基数估算。
背景技术
当数据库从客户端接收到结构化查询语言(structured query language,SQL)等查询语句时,需要对查询语句进行语法分析、语义分析、优化等步骤,从而生成执行结构。影响数据库管理系统(database management system,DBMS)中的SQL语句执行效率的一个重要部分是在编译过程中用于输出查询计划的优化器。执行器根据所生成的查询计划进行数据操作。
现在大多数优化器都是以成本为基础的。查询计划包括执行特定数据库操作的多个步骤,例如,扫描表格(可能同时还根据特定条件过滤各行)、执行聚合、连接两个表格等。优化器根据操作的输入(例如,估算的基数)和操作的成本模型,估算每个步骤的成本。查询计划的成本就是所有步骤成本的总和。优化器搜索计划空间,计算候选计划的成本,然后选择成本最低的计划。
在基于成本的优化器中,有三个主要部分:基数估算(cardinality estimation,CE)、成本模型和查询计划搜索。在这三个主要部分之中,基数估算是最关键的,也是最难解决的一个部分。估算方法可能相差几个数量级,导致计划不是最优的。
发明内容
本发明涉及数据库管理系统中的一种数据库服务器和一种用于提高数据库管理系统中的基数估算性能的方法。
在一些实例中,本文描述的主题的一个方面可以是一种应用于数据库管理系统的服务器。所述数据库管理系统包括:包含指令的非瞬时性内存存储器;与所述存储器通信的一个或多个处理器。所述一个或多个处理器执行所述指令以:根据数据库中第一列的熵,计算所述第一列的数据倾斜率,其中,所述第一列包括多个唯一值;将所述数据倾斜率存储在所述数据库的目录中;通过将第一选择率与所述数据倾斜率相乘,估算所述第一列的选择率;根据所述估算出的选择率,生成查询计划。
在一些实例中,所述一个或多个处理器还执行所述指令以:计算所述数据库中的所述第一列和第二列的联合熵;根据所述第一列的熵、所述第二列的熵和所述联合熵,计算互信息I;根据所述互信息,计算所述第一列和所述第二列之间的相关度c,其中,c=2I;将所述相关度存储在所述目录中。
在一些实例中,所述一个或多个处理器还执行所述指令以:通过将所述第一列的选择率、所述第二列的选择率和所述相关度相乘,估算所述第一列和所述第二列之间的联合选择率;根据所述估算出的联合选择率,生成所述查询计划。
在一些实例中,所述一个或多个处理器还执行所述指令以:根据所述相关度和所述第二列中的唯一值以及根据所述第二列上的条件,计算所述第一列过滤后的剩余值的数量;使用所述第一列过滤后的剩余值的数量进行连接基数估算。此外,如果所述第二列中的所述唯一值的数量为1,则所述一个或多个处理器执行所述指令以:通过将所述第一列中的伪值的第一数量与所述相关度相除,计算所述第一列过滤后的剩余值的数量,其中,所述第一列具有熵H,所述第一列中的所述伪值的第一数量是2H。如果j表示所述第二列中的唯一值的数量,v1(x)表示所述第一列中的所述伪值的第一数量,c表示所述相关度,则所述一个或多个处理器执行所述指令以:计算所述第一列过滤后的剩余值的数量v(x):
在一些实例中,所述一个或多个处理器还执行所述指令以:通过将所述第一列中的伪值的数量和所述第二列中的伪值的数量之积与所述相关度相除,计算所述第一列和所述第二列的组合值的数量;使用所述组合值的数量进行聚合基数估算。
在一些实例中,所述一个或多个处理器还执行所述指令以:通过将所述第一列中的伪值的数量和所述第二列中的伪值的数量之积与所述相关度相除,计算所述第一列和所述第二列的组合值的数量;使用所述组合值的数量进行连接基数估算。
在一些实例中,本文描述的主题的一个方面可以是一种应用于数据库管理系统的服务器。所述数据库管理系统包括:包含指令的非瞬时性内存存储器;与所述存储器通信的一个或多个处理器。所述一个或多个处理器执行所述指令以:计算节点级熵;根据所述节点级熵,计算节点级倾斜率;判断是否存在重分布成本;将所述重分布成本与所述节点级倾斜率相乘,以进行成本估算。
在一些实例中,本文描述的主题的一个方面可以实施为一种由应用于数据库管理系统的服务器执行的方法。所述方法包括以下步骤:根据数据库中第一列的熵,计算所述第一列的数据倾斜率,其中,所述第一列包括多个唯一值;所述服务器将所述数据倾斜率存储在所述数据库的目录中;所述服务器通过将第一选择率与所述数据倾斜率相乘,估算所述第一列的选择率;所述服务器根据所述估算出的选择率,生成查询计划。
根据熵计算所述数据倾斜率和相关度,根据所述数据倾斜率和相关度估算所述选择率,所述数据库管理系统中的基数估算性能提高。基数估算性能提高,进而完善了查询计划,从而提高了查询性能。
附图说明
图1是根据一个实施例的数据库系统的示意性架构图。
图2是根据另一个实施例的数据库系统的示意性架构图。
图3是示例性熵、联合熵和互信息的框图。
图4是根据一个实施例的数据库管理系统执行信息处理方法的示意图。
图5示出了在单列情况下进行基于样本的熵估算的示例性过程500。
图6是在X和Y两列情况下进行基于样本的相关性估算的示例性过程600的流程图。
图7是在单列存在等式条件的情况下如何利用基于熵的信息进行基数估算的示例性过程700的流程图。
图8是在两列存在等式条件的情况下如何利用基于熵的信息进行基数估算的示例性过程800的流程图。
图9是在其它列存在过滤条件的情况下如何利用基于熵的信息进行连接基数估算的示例性过程900的流程图。
图10是在按照两列进行分组的情况下如何利用基于熵的信息进行聚合基数估算的示例性过程1000的流程图。
图11是在两列存在连接条件的情况下如何利用基于熵的信息进行连接基数估算的示例性过程1100的流程图。
图12A是通过无共享架构中的散列从数据服务器中的非均匀行分布中计算“节点倾斜率”的示例性过程1200的流程图;
图12B是节点熵和节点数量的对数之间的线性关系的绘图。
图13是如何利用基于熵的信息进行成本估算的示例性过程1300的流程图。
图14是能够用于实施各种实施例的数据库服务器1400的框图。
在各种图纸中,相同的参考数字和标号指示相同的元件。
具体实施方式
下文将详细论述当前示例性实施例的制作和使用。
基数估算(cardinality estimation,CE)可以理解如下:数据库表中的一列本质上是一种概率分布。X轴表示列中的值,Y轴表示各个值的概率。在数据库中,概率可以称为选择率,是指选择出的具有特定值等满足一定条件的数据库表行的百分比。传统的基数估算方法是使用直方图来汇总数据。假如数据库表列中的一个值,搜索对应的直方图,找到包含这个值的桶,然后,使用桶的平均选择率作为这个值的选择率估算值。举例说明,如果该桶包含N个唯一值,则1/N就是估算出的选择率,是指桶内每个值的选择率相同。这种方法的准确性与直方图的粒度有关,即,与桶的数量有关。显而易见,桶越多,选择率估算越准确。但实际上需要控制直方图的内存占用率,所以,在大多数数据库中,桶的数量是固定的,例如,200个。对于非常大的列,每个桶可能会包含大量行,这些行具有自己的选择率分布。这种传统方法中的1/N选择率可能不准确。如果分布严重倾斜,准确性就特别低。
针对多个列,传统方法是分别估算每列的选择率,然后将选择率相乘。这种传统方法假设各个列之间不存在相关性,也就是说,各个列是独立的。但大多数数据之间存在一定程度的相关性,所以传统方法往往会低估联合选择率。
因此,数据倾斜率和相关度是影响CE确定的主要原因。传统方法假设数据分布不存在倾斜且各个列之间不存在相关性。通过定义基于熵的倾斜率和相关度以及开发各种算法来计算和使用倾斜率和相关度,本发明描述了一种数据库服务器和一种方法,提高了数据库管理系统中的基数估算性能。
图1示出了应用于本发明实施例的数据库系统的一种架构。数据库系统包括数据库101和数据库管理系统(database management system,DBMS)102。
数据库101是存储在数据存储器中的组织化数据集,也就是,根据特定数据模型进行组织、存储和使用的相关数据集。例如,数据库101可以包括一个或多个表数据。
DBMS 102用于建立、使用和维护数据库101,并管理和控制数据库101,从而保证数据库101的安全性和完整性。用户103可以通过DBMS 102访问数据库101中的数据,数据库管理员104也通过DBMS 102维护数据库。DBMS 102提供各种功能,使得多个应用程序和用户设备能够在同一时刻或不同时刻通过不同的方法建立、修改和查询数据库。应用程序和用户设备可以统称为客户端。DBMS 102提供了以下功能:(1)数据定义功能:DBMS 102提供数据定义语言(data definition language,DDL),以定义数据库结构,DDL用于表征数据库模式并可以存储在数据字典中;(2)数据访问功能:DBMS 102提供数据操作语言(datamanipulation language,DML),以对数据库中的数据进行检索、插入、更新、删除等基本访问操作;(3)数据库操作管理功能:DBMS 102提供数据控制功能,即对数据的安全性、完整性、并发性等进行控制,从而有效地控制和管理数据库的操作,保证数据的正确性和有效性;(4)数据库建立和维护功能:包括数据库中的初始数据加载以及数据库转储、恢复、重组、系统性能监控和分析等功能;(5)数据库传输:DBMS 102进行处理数据传输,以实现客户端与DBMS 102的通信,可以与操作系统合作完成数据库传输。
DBMS 102可以应用于单机数据库系统、无共享架构中的集群数据库系统、共享存储架构中的集群数据库系统,或者其它类型的数据库系统。DBMS 102中的数据存储器包括但不限于固态硬盘(solid-state drive,SSD)、磁盘阵列,或者其它类型的非瞬时计算机可读介质。
图2示出了应用于本发明实施例的数据库系统的另一种架构。DBMS 102可以位于数据库服务器1020中。具体地,如图2所示,数据库服务器1020可以包括解析器1021、优化器1023和执行器1025。当客户端通过SQL命令查询数据库101时,首先由解析器1021分析客户端查询,然后,客户端分析被映射到执行器1025执行的一系列操作上。优化器1023是一种规划器模块,采用不同的技术(例如,计划表示、包括定向搜索和剪枝的搜索、动态编程等)通过使响应时间、I/O、内存成本和总资源利用率等几个变量降到最小来提高查询处理性能。在以下描述的实施例中,优化器1023会考虑基于熵的倾斜率和相关度,从而提高CE性能。优化器1023生成查询计划,例如,树结构。执行器1025执行该查询计划。查询计划可以直接在数据库101中存储的数据库对象上执行。数据库101可以包括数据文件、索引等。
本发明定义了基于熵的倾斜率和相关度并开发了各种算法来计算和使用倾斜率和相关度,从而提高CE性能。一列的熵定义如下:
其中,log以2为底(为便于描述,这适用于整个发明),pi表示该列中第i个值的选择率,n表示该列中的唯一值总数。
对于X和Y两列,联合熵定义如下:
H(x,y)=–∑x,yp(x,y)×logp(x,y) 等式(2)
其中,p(x,y)为X和Y的联合选择率函数。
对于X和Y两列,互信息定义如下:
I(x,y)=H(x)+H(y)–H(x,y) 等式(3)
图3示出了H(x)、H(y)、H(x,y)和I(x,y)之间的关系。
Kullback-Leibler(KL)散度(又称为相对熵)用于测量两种分布之间的差异。如果P表示真实分布,Q表示P的估算值,则P和Q之间的Kullback-Leibler散度(相对熵)为如下:
其中,pi表示P中的唯一值,qi表示Q中的唯一值。相对熵可以看作是估算值Q的一个误差度量。相对熵越小,估算值Q越准确。
根据等式(4)和等式(1),传统单列估算选择率1/n的误差为:
令ΔH=logn–H,由于分布均匀时H=logn,所以ΔH=0。当分布不均匀时,由于logn是任何包含n个值的分布的最大熵,所以ΔH>0。倾斜率越大,熵H越小。因此,倾斜率越大,估算选择率1/n的误差越大。
对于估算选择率s,DL散度为:
s=2–H 等式(7)
以Lineitem表为例,Lineitem表中包括l_shipdate、l_commitdate和l_receiptdate三列。根据等式(1),计算出l_shipdate列的熵为11.2687,计算出l_commitdate列的熵为11.2507,计算出l_receiptdate列的熵为11.2704。
根据等式(7),计算出l_shipdate列的选择率s为如下:
s(l_shipdate)=2–H(l_shipdate)=2–11.2687=4.0531e–004
根据等式(7),计算出l_commitdate列的选择率s为如下:
s(l_commitdate)=2-H(l_commitdate)=2–11.2507=4.1039e–004
根据等式(7),计算出l_receiptdate列的选择率s为如下:
s(l_receiptdate)=2–H(l_receiptdate)=2–11.2704=4.0483e–004
伪值v可以定义如下:
等于2H的伪值v代替了传统唯一值n。从概念上讲,倾斜分布“变平”为唯一值从n个减少到v个的均匀分布。也就是说,倾斜分布可以看成是包含数量减少的v个唯一值的均匀分布。当DBMS代码假设所有列都是均匀分布时,这种分布很简便。只要使用v代替n,在估算选择率时就不需要为了考虑倾斜率而改变代码。需要说明的是,对于均匀分布,v=n。
倾斜率k可以定义如下:
k=2logn–H=2ΔH 等式(9)
因此,代替传统选择1/n的选择率s为如下:
s=2–H=(1/n)×k 等式(10)
也就是说,相对于选择率1/n而言,k是基于倾斜率的选择率修正因子。
相关度可以理解为调整联合选择率的因子,c表示相关度。根据等式(4)、等式(1)和等式(2),联合选择率估算误差为如下:
根据等式(11)和等式(3):
DKL(P(x,y)||P(x)P(y)c)=I(x,y)–logc 等式(12)
如果c=1,则DKL(P(x,y)||P(x)P(y)c)=I(x,y)。也就是说,c=1时的传统方法中的选择率估算误差为I(x,y)。如果X和Y两列是独立的,则联合选择率估算误差为0。如果X和Y两列不是独立的,则联合选择率估算误差为I(x,y),大于0。X列和Y列之间的相关性越高,互信息I(x,y)越多。因此,相关性越高,联合选择率估算误差越大。
在大多数情况下,X和Y两列不是独立的。当X和Y两列为独立时,为了保证联合选择率估算误差为0,根据等式(11)和等式(3):
logc=H(x)+H(y)–H(x,y)=I(x,y) 等式(13)
因此,X和Y两列之间的相关度c为:
c=2I(x,y) 等式(14)
因为I(x,y)≥0,所以c≥1。在传统方法中,假设c=1。
相关性在联合基数估算中至关重要。由于缺少良好的相关性模型,许多DBMS(包括华为的DBMS)就只能不考虑传统方法中的相关性,结果导致大大低估了联合基数。当各种数据库操作中都使用多个相关列时,可以使用相关性来提高基数估算性能。图8至图11解释了如何实现这点。
以为例Lineitem表,根据等式(14),l_shipdate和l_commitdate两列之间的相关度c为如下:
c(s_c)=2I(l_shipdate,l_commitdate)=2(H(x)+H(y)–H(x,y))=211.2687+11.2507-18.5245=15.94。
根据等式(14),l_shipdate和l_receiptdate两列之间的相关度c为:
c(s_r)=2I(l_shipdate,l_receiptdate)=2(H(x)+H(y)–H(x,y))=211.2687+11.2704-16.1747=82.39。
此时,根据等式(14),代替传统联合选择率s(x)×s(y)的联合选择率s(x,y)为如下:
s(x,y)=s(x)×s(y)×c等式(15)
例如,在Lineitem表中,根据等式(15),l_shipdate和l_commitdate两列之间的联合选择率s为如下:
s(s_c)=s(l_shipdate)×s(l_commitdate)×c(s_c)=(4.0531e–004)×(4.1039e–004)×15.94=2.6514e–006。
根据等式(15),l_shipdate和l_receiptdate两列之间的联合选择率为如下:
s(s_c)=s(l_shipdate)×s(l_receiptdate)×c(s_r)=(4.0531e–004)×(4.0483e–004)×82.39=1.3519e–005。
上述估算中的误差率如表1所示,其中考虑了l_shipdate和l_commitdate之间以及l_shipdate和l_receiptdate之间的相关度:
表1
传统估算中的误差率如表2所示,其中没有考虑l_shipdate和l_commitdate之间以及l_shipdate和l_receiptdate之间的相关度:
表2
比较表1和表2,传统方法中的误差率远远高于新的联合选择率估算的误差率。新的联合选择率估算通过考虑相关度还能够提高估算准确性。
相应地,联合伪值可以定义如下:
如果X通过函数决定了Y,则H(x,y)=H(x),I(x,y)=H(y)。在这种场景下,根据等式(14),c=2I(x,y)=2H(y)=1/s(y)。因此,根据等式(15),s(x,y)=s(x)。
例如,存在一个date_dim表。date_dim表包括d_date和d_year两列。d_date列通过函数决定了d_year列。根据等式(1),计算出d_date列的熵为16.157,计算出d_year列的熵为7.644。根据等式(2),计算出d_date和d_year之间的联合熵为16.157。根据等式(3),计算出d_date和d_year之间的互信息为7.644。根据等式(14),计算出d_date和d_year之间的相关度c为如下:
c(d_y)=27.644≈200
假设相关列存在一个选择条件,数据库服务器可以估算连接列过滤后的“剩余值”(即剩余值)。例如,如果X是连接列且Y列存在一个选择条件(例如,Y=2001),则等式(16)可以用于估算X列过滤后的剩余值(即剩余值):
通过相关度的概率解释,一个更通用的剩余值公式可以推导如下:1/c=Y值“看见”(即匹对到)X值的概率。当c=1时,所有X值、Y都成对出现。
Y值看不见特定X值x1的概率(p)为1–1/c。
对于j个Y值,p(y值都看不见的x1)=(1–1/c)^j,因此,p(至少一个y值看见的x1)=1–(1–1/c)^j,j个Y值看见的全部X值(剩余值)有v(x)×(1–1–1/c)^j个。对于j=1,如预期那样,X列过滤后的剩余值=v(x)/c。
以两个表格为例,解释了如何提高基于d_date和d_year之间相关度c的连接基数估算的准确性。其中一个表格名为store_sales,另一个表格名为date_dim。store_sales表包括一个ss_sold_date_sk列。date_dim包括一个d_date列和另一个d_year列。计算在d_year=2001的情况下,store_sales和date_dim之间的主键-外键(Prime Key–ForeignKey,PK-FK)连接值。例如,ss_sold_date_sk列包含1823个值,d_date列包含73000个值(近200年)。根据c(d_y)=200,d_date中的值减少到73000/c=73000/200=365个,正如d_year=2001时所预期的那样。考虑d_date和d_year之间的相关度c,进行连接基数估算时d_date中包含365个值而不是73000个值。因此,连接基数估算的准确性得到提高,例如,store_sales的选择率从0.5%增加到20%(准确性高),从而使得计划更加完善。
图4是根据一个实施例的数据库管理系统执行信息处理方法的示意图。首先,输入收集统计数据的用户命令(例如,PostgreSQL数据库分析),然后,包括优化器1023的数据库服务器在步骤410中收集统计数据。在一种方法中,服务器在步骤430中执行表扫描。服务器对列进行聚合并获取所有值的计数ci。服务器还获取全部值n和总的计数t,所有值的选择率为然后,服务器根据等式(1)计算熵,根据等式(2)、等式(3)和等式(4)计算相关度。根据等式(9)计算倾斜率,根据等式(8)计算伪值。将计算出的熵、相关度、倾斜率以及伪值的数量存储在目录表中。需要说明的是,统计数据收集既耗时又消耗大量资源,所以通常在系统相对空闲时进行。在进行时,优化器从目录中检索与熵相关信息,并使用这些信息进行基数估算。在另一种方法中,服务器在步骤420中执行采样,并使用样本估算熵和相关度等,并将熵和相关度存储在目录中。图5和图6描述了使用样本估算熵和相关度的详细过程。在执行步骤420或步骤430之后,服务器在步骤450中存储目录数据,例如,熵、相关度、倾斜率和/或伪值的数量。因此,当服务器在步骤440中执行基数估算(cardinality etimate,CE)时,服务器可以使用目录数据。CE包括但不限于单表条件、连接基数和/或按值分组。通过执行步骤440,产生了基数估算值,将基数估算值输入到所有操作对应的成本模型中,以便计算运算符成本。然后,优化器1023确定这些算子用于查询计划的顺序。图7、图8、图9、图10和图11描述了如何利用基于熵的信息进行基数估算的详细过程。服务器还在步骤460中根据目录数据计算(compute/calculate)查询计划成本。例如,服务器可以调整热节点,以增加成本。数据库中的热节点可能是过载节点,也可能是忙节点。图13描述了如何利用基于熵的信息进行成本估算的详细过程。服务器中的优化器1023可以根据步骤440中的基数估算(cardinality etimate,CE)和/或步骤460中的成本估算,生成查询计划。
图5示出了在单列情况下进行基于样本的熵估算的示例性过程500。如果进行采样,则过程500作为用户的统计数据收集命令的一部分执行。对于像PostgreSQL这样的某个数据库,在收集统计数据时默认进行采样。示例性过程500可以实现为存储在计算机可读介质(例如,计算机可读介质)中且由数据库服务器中的数据处理装置(例如,处理器)能够执行的计算机指令。在一些实现方式中,过程500可以由图2和图4中的优化器执行。示例性过程500、过程500的各个操作,或者操作组合可以迭代或同时执行(例如,使用多个线程)。在一些情况下,示例性过程500可以包括以相同或不同顺序执行的相同、附加、更少或不同的操作。图5中描述的过程500可以称为外推法或自适应法。过程500采用图4的步骤420中描述的采样方法。
步骤510:数据库服务器从总体中获取随机样本。例如,采样率大于等于2%。随机样本中存在v个值。
步骤520:根据等式(1),计算随机样本的样本熵h。
步骤530:通过刀切(jackknife)估算方法从样本值v中估算唯一值D,得到唯一值D:
其中,q是采样率,f1是单行样本中的值的数量,r是采样行数。令p=v/D为样本中存在的值与总体中估算值的比率。
步骤540:在样本中没有找到D–v个“缺失值”。在一个示例中,假设缺失值是均匀分布的,则通过log(D–v)大致估算缺失值的熵。这是一个合理的假设,给出了缺失值的最大熵。
步骤550:将全部值划分为样本中看见和看不见的v个值和D–v个值。这时,总体熵H估算如下:
在一个示例中,使用分割熵h来估算总体熵H为等式(18):
p<1时:H=p×h+(1–p)×log(D–v)–p×log(p)–(1–p)×log(1–p) 等式(18’)
p=1时:H=h 等式(18”)
log(D)也可以用于进行熵估算。实验发现,倾斜率低时,log(D)效果更好,而倾斜率高时,等式(18)效果更好。在一个示例中,根据实验,选择样本倾斜率k=1.25作为阈值。样本熵h用于估算总体熵H,如下:
k=2logv-h
如果p=1,则H=h 等式(19’)
否则,如果k<1.25,则H=log(D) 等式(19”)否则,H=p×h+(1–p)×log(D–v)–p×log(p)–(1–p)×log(1–p) 等式(19”’)
等式(19’)适用于样本中的所有值。方程(19”)适用于倾斜率低的情况时。方程(19”’)适用于倾斜率高的情况。
需要说明的是,倾斜率阈值可以是一个能够根据实验调整的系统参数。采用阈值的方法可以称为自适应法,不采用阈值的方法可以称为外推法。自适应法一定程度上优于外推法。
步骤560:将获取到的总体熵H存储在目录中。由于分布倾斜时刀切估算方法往往会低估唯一值D,因此,D实际上更接近伪值。根据这种观察,将D作为列伪值存储在目录中。因为真实的唯一值是未知的,所以列倾斜率也是未知的。
图6示出了在X和Y两列情况下进行基于样本的熵和相关性估算的示例性过程600。如果进行采样,则过程600作为用户的统计数据收集命令的一部分执行。对于像PostgreSQL这样的某个数据库,在收集统计数据时默认进行采样。示例性过程600可以实现为存储在计算机可读介质(例如,计算机可读介质)中且由数据库服务器中的数据处理装置(例如,处理器)能够执行的计算机指令。在一些实现方式中,过程600可以由图2和图4中的优化器执行。示例性过程600、过程600的各个操作,或者操作组合可以迭代或同时执行(例如,使用多个线程)。在一些情况下,示例性过程600可以包括以相同或不同顺序执行的相同、附加、更少或不同的操作。过程600采用图4的步骤420中描述的采样方法。
步骤610:数据库服务器获取X和Y两列的随机样本。例如,采样率大于等于2%。
步骤620:通过示例性过程500等计算熵H(x)、H(y)和联合熵H(x,y)。
步骤630:计算互信息I(x,y)=H(x)+H(y)–H(x,y)。
步骤640:计算相关度c=2^(I(x,y))。因此,当服务器执行基数估算(cardinalityestimation,CE)时,服务器可以考虑在步骤640中计算的相关度c。
步骤650:将获取到的相关度c存储在目录中。过程600可以扩展到估算至少两列的联合选择率。
图7描述了在单列存在等式条件的情况下如何利用基于熵的信息进行基数估算的示例性过程700。步骤710:数据库服务器判断是否存在伪值v。步骤720:如果存在伪值v,则选择率s=1/v。步骤730:如果不存在伪值v,则数据库服务器判断是否存在倾斜率k。步骤740:如果存在倾斜率k,则数据库服务器可以将现有选择率乘以k。步骤750:如果不存在倾斜率k,则数据库服务器判断是否存在熵H。步骤760:如果存在熵H,则选择率s=2-H。步骤770:如果不存在熵H,选择率下降到传统选择率
图8描述了在X和Y两列存在等式条件的情况下如何利用基于熵的信息进行基数估算的示例性过程800。步骤810:数据库服务器根据过程700等计算X列的选择率s1和Y列的选择率s2。步骤820:数据库服务器判断X和Y两列之间是否存在相关度c。步骤830:如果存在相关度c,则联合选择率为s(x,y)=s1×s2×c。步骤840:如果不存在相关度c,则联合选择率为s(x,y)=s1×s2。
图9描述了在其它列存在过滤条件的情况下如何利用基于熵的信息进行连接基数估算的示例性过程900。步骤910:数据库服务器判断X和Y两列之间是否存在相关度c。步骤920:如果不存在相关度c,则数据库服务器通过传统方法估算连接基数。步骤930:如果数据库服务器确定X和Y两列之间存在相关度c,则数据库服务器可以判断Y列是否包含单个值。步骤940:如果Y列包含单个值,则X列过滤后的剩余值步骤950:如果Y列包含j个值,则X列过滤后的剩余值步骤960:服务器在步骤940或950之后使用X列过滤后的剩余值进行连接基数估算。
图10描述了在按照X和Y两列进行分组的情况下如何利用基于熵的信息进行聚合基数估算的示例性过程1000。步骤1010:数据库服务器判断X和Y两列之间是否存在相关度c。步骤1020:如果不存在相关度c,则数据库服务器通过传统方法估算聚合基数。步骤1030:如果数据库服务器确定X和Y两列之间存在相关度c,则数据库服务器可以计算X和Y的组合值:步骤1040:在聚合基数估算中,数据库服务器使用v(x,y)而不使用v(x)×v(y)。
图11描述了在X和Y两列存在连接条件的情况下如何利用基于熵的信息进行连接基数估算的示例性过程1100。步骤1110:数据库服务器判断X和Y两列之间是否存在相关度c。步骤1120:如果不存在相关度c,则数据库服务器通过传统方法估算连接基数。步骤1130:如果数据库服务器确定X和Y两列之间存在相关度c,则数据库服务器可以计算X和Y的组合值:步骤1140:在连接基数估算中,数据库服务器使用v(x,y)而不使用v(x)×v(y)。
图12A示出了通过无共享架构中的散列从数据服务器中的非均匀行分布中计算“节点倾斜率”的示例性过程1200。
步骤1210:根据某个散列函数将每个值发送到独立节点。散列可以看成是随机的。
步骤1220:随机合并(例如,成对合并)各个节点,直到只剩下两个节点。此时,可以看到各行非常均匀地分布在两个节点之间。因此,当存在两个节点(值)时,“节点熵”为1。
步骤1230:在节点熵与节点个数的对数之间建立线性关系。由于这条线的起始是包含n个值(节点)的熵H(n),末尾是包含2个值(节点)的熵1,所以这条线的终点是(H(n),log(n))和(1,log(2))。该线性关系如图12B所示。
步骤1250:计算节点倾斜率k:k=2^(log(d)–H(d))。
过程1200是产生用于计算节点熵和节点倾斜率的公式的推导过程。实际上不需要执行。同样可以使用与过程1200相同的模型来估算哈希表桶的倾斜率。节点倾斜率模型能够使数据库服务器处理无共享系统中的瓶颈(即热服务器)。
图13描述了如何利用基于熵的信息进行成本估算的示例性过程1300。假设表中的总行数为t,列级熵为H(n),列中包含n个唯一值,系统中包含d个节点。步骤1310:数据库服务器计算节点级熵H(d),如下所示:
步骤1320:数据库服务器计算机节点级倾斜率k,如下所示:
k=2logd-H(d)
步骤1330:数据库服务器判断是否存在重分布成本c。步骤1340:如果存在重分布成本c,则数据库服务器调整成本c=c×k。步骤1350:如果不存在重分布成本c,则数据库服务器估算每个节点的行数为:
进行第一实验(实验1),以评估样本熵估算的准确性。根据伽马分布(参数为2,2)和各种缩放因子生成10万个值,得到倾斜率(根据等式(9)计算)范围从1.42到2.97的14种分布。根据等式(18)或等式(19),从2%的样本中估算熵。将估算熵与实际熵进行比较,其中,误差定义如下:
结果如表3所示。表中涵盖了倾斜率,证明了熵估算在各种倾斜率下效果很好。14个实验的平均误差为1.4%,准确性很高。
在表3中,以第5行为例,总体中一共存在1783个值。在从1783个值中取2%的样本之后,计算这2%样本的熵h。接着,计算出全部值的实际熵H为9.904826。计算出全部值的倾斜率k为1.859951。然后,根据等式(20)计算外推法中的误差。第5行的误差结果为1.502%,误差很小。
表3
除了模拟之外,过程500和过程600中的算法还在高斯MPP DBMS上实现,并根据TPC-DS基准计算425个列的熵,其中,默认随机采样固定行数(3万行)。
在这425个列之中,一些不重要的列只包含单个值。在重要的列中,173个列中的所有值在样本中看不见。总体而言,过程500获得了准确性,大约存在3%的误差,这个误差非常接近表3中的模拟结果。
223个列中的所有值在样本中看见。这些列对应的行少于3万行,或者存在大量重复值。在这种情况下,平均误差为0.13%。
根据第一实验,在上述实施例中,根据过程500进行的熵估算具有非常高的准确性。熵是电信领域中许多方案的关键概念和基础,所以当计算精确熵的成本很高时,过程500同样有益于这些应用。在第一实验(实验1)证明样本熵估算的准确性很高之后,进行第二实验(实验2)以评估单列基数估算的准确性。
对于一个列,根据两种分布(正态分布和伽马分布)和各种参数生成包含各种唯一值和倾斜率的10万行。如过程500中所述,数据库服务器对2%的行进行采样,并通过自适应法进行熵估算。这些实验还对全部值n进行计数,并在没有采样的情况下计算实际熵H。对于每个测试,随机抽取一行并获取该行的值v。接着,对包含相同值的所有行R进行计数。然后,将R与三种选择率估算得到的预测值进行比较:(1)实际列熵下的2-H,(2)估算熵下的2-h,(3)根据均匀分布假设的传统选择率估算出的行数为:
estimated rows=(total riws)×selectivity=100000×selectivity
预测误差(表4中的第3列、第4列和第5列)为实际值与预测值之间的行差的绝对值:
error=abs(estimation–actual) 等式(21)
根据等式(22)计算相对误差:
该测试重复100次,计算平均误差(其中,ei是各个误差):
误差的几何平均值(geomean)计算如下:
当每个数据都具有不同值时,几何平均值比算术平均值效果好。结果如表4(正态分布)和表5(伽马分布)所示。
表4描述了8种正态分布的结果。一般来说,倾斜率越大,误差越大。平均而言,基于样本的熵预测(第4列和第7列)与均匀预测(第5列和第8列)相比,降低了基数估算误差,从误差129行降低到82行(使用几何平均值时,从误差42行降低到27行)。从百分比来看,基于熵的估算将基数估算误差从49%降低到33%。
在表4中,以第3行为例,总体中存在1369个值,计算出全部值的倾斜率k为1.673。三种选择率估算的误差为43.6、42.6和63.6。从百分比来看,误差分别为35.23%、34.45%和53.18%。基于熵的方法与传统方法相比,误差小得多。
表4
一般来说,由于基数估算低时优化器往往选择非常激进的计划,所以基数低估比高估效果差。例如,优化器可以选择复制(即广播)小表(基于估算)以与大表连接。如果基数估算的误差太大,并且小表变成了大表,则所选的计划执行效果很差。然而,基于熵的基数估算方法与传统均匀估算方法相比,始终是一种高估方法,所以是一种更为安全且更为准确的方法。
表5描述了8种倾斜率更高的伽马分布的结果。平均基数估算误差降低,从误差134行降到91行(使用几何平均值时,从误差59行降到38行)。在表5中,以第4行为例,总体中一共存在1782个值。计算出全部值的倾斜率k为1.861。三种选择率估算值的误差为41.1、41.1和67.1。从百分比来看,误差分别为35.29%、35.33%和57.71%。基于熵的方法与传统方法相比,误差小得多。
表5
进行第三实验(实验3),验证样本相关性估算是准确的,并且由此产生的联合基数估算性能通过相关性得到极大提高。实验结果如表6和表7所示。表6示出了每列(X和Y)中的唯一值和两列(X和Y)的联合值。还示出了对应的倾斜率。将各行划分为两组:第一组用于“模相关性”,第二组用于“噪声相关性”。从表6中可以看出,样本相关性估算的准确性很高:模相关性的平均误差小于1%,噪声相关性的平均误差为5%,最大误差约为7%。
表6
基数估算误差如表7所示。常规方法(即假设不存在相关性的均匀分布)中的误差非常大,所有都超过90%。传统方法存在两个问题:不考虑倾斜率和相关性。以表6中的第1行为例。相关度为30,联合倾斜率为1.75,所以传统方法会低估30×1.75=52.5%。预测的行数(见表7第1行)为242.1和4.6,比率为52.6,接近52.5。总体而言,基于熵的基数估算方法能够极大提高基数估算性能,平均误差在模相关性情况下从96%降低到35%,在噪声相关性情况下从95%降低到53%。
模相关性并不常见。例如,TPC-DS基准中的日期维度表有一个包含7万3千个值的日期列和一个包含200个值的年份列。根据相关性的定义,日期列和年份列之间的相关度为200。根据剩余值算法,每年的日期数是也就是说,一年有365天,如预期的一样。相关性模型的优点在于,不需要人类了解日期和年份。该模型自动掌握这种关系。从理论上讲,日期列函数确定年份列,如表6中的前5行,X列确定Y所示。需要说明的是,X和XY包含相同的唯一值。由于需要完全忽略其中一个条件,所以函数依赖是联合基数估算中的最坏情况。也就是说,如果X列和Y列存在条件,则需要忽略Y列上的条件。过程600中描述的相关性模型自动掌握这种关系。
表7
样本预测行数 | 均匀预测行数 | 样本误差 | 均匀误差 | 样本误差 | 均匀误差 |
242.1 | 4.6 | 109.7 | 278.4 | 0.3649 | 0.9720 |
121.8 | 2.5 | 58.3 | 153.2 | 0.3473 | 0.9729 |
80.9 | 1.7 | 36.0 | 97.4 | 0.3355 | 0.9690 |
61.0 | 1.3 | 28.2 | 73.7 | 0.3457 | 0.9573 |
49.1 | 1.1 | 21.6 | 55.8 | 0.3324 | 0.9412 |
平均值= | 50.8 | 131.7 | 0.3452 | 0.9625 | |
几何平均值= | 42.6 | 111.3 | 0.3550 | 0.9624 | |
301.9 | 14.0 | 226.5 | 418.5 | 0.5495 | 0.9442 |
152.5 | 3.7 | 103.8 | 210.8 | 0.4124 | 0.9693 |
105.2 | 1.8 | 67.1 | 127.2 | 0.5193 | 0.9285 |
71.4 | 1.1 | 56.7 | 92.6 | 0.6743 | 0.9340 |
56.5 | 1.0 | 40.6 | 75.5 | 0.4934 | 0.9675 |
平均值= | 98.9 | 184.9 | 0.5298 | 0.9487 | |
几何平均值= | 81.7 | 151.0 | 0.5230 | 0.9485 | |
本发明示出了与事物处理委员会(Transaction Processing Council,TPC)基准决策支持(Decision Support,DS)(TPC-DS)相关的一些示例。第一示例针对TPC-DS倾斜率。项目表包括i_manufact_id列。例如,当i_manufact_id=649时,实际存在340行。在不考虑倾斜率的情况下,i_manufact_id列的估算行数是262。误差率为:(340–262)/340=23%。在考虑倾斜率的情况下,i_manufact_id列的估算行数是324。误差率为:(340–324)/340=4.7%。因此,在考虑倾斜率的情况下,误差率从23%降到4.7%。
第二示例针对TPC-DS相关性。项目表包括i_class列和另一i_category列。例如,当i_class='consignment'且i_category='jewelry'时,实际行数是1884。在不考虑i_class和i_category两列之间相关度的情况下,两列中的估算行数是186。误差率为:(1884–186)/1884=90%。在考虑两列之间相关度的情况下,两列中的估算行数是1835。误差率为:(1884–1835)/1884=2.6%。因此,在考虑两列之间相关度的情况下,错误率从90%降低到2.6%。
第三示例针对TPC-DS两个连接条件。例如,两个连接条件分别为ss_ticket_number=sr_ticket_number和ss_item_sk=sr_item_sk。这两个连接条件下的实际行数是287999764。不考虑两个连接条件的相关度的情况下,估算行数是11998。误差率为:(287999764–11998)/287999764=99%。在考虑两个连接条件的相关度的情况下,两列中的估算行数是287948808。误差率为:(287999764–287948808)/287999764=0.02%。因此,在考虑两列之间相关度的情况下,误差率从99%降低到0.02%。
第四示例针对TPC-DS组密钥。例如,按照ca_county和ca_state对表进行分组。两组中的实际行数是5006。在不考虑两组之间相关度的情况下,估算行数是94140。误差率为:(94140–5006)/5006=1780%。在考虑两个连接条件的相关度的情况下,两列中的估算行数是6714。误差率为:(6714–5006)/5006=34%。因此,在考虑两列之间相关度的情况下,误差率从1780%降低到34%。
第五示例是TPC-DS中的查询24(Q24):
select*from store_sales,store_returns,store
其中,ss_ticket_number=sr_ticket_number
且ss_item_sk=sr_item_sk
且ss_store_sk=store.s_store_sk。
在不考虑相关性的情况下,大大低估了连接基数。将大表错误地估算为小表,使用大表来构建用于哈希连接的哈希表。这个错误决定生成并执行一个不好的计划。在考虑相关性的情况下,估算能够得到很大提高,错误决定得到纠正,从而产生了一个好的计划,相比于不好的计划,速度快了5倍。
第六示例是:在TPC-DS 1000x的数据模型下,利用3台机器和18个数据节点,分别在行存和列存的例子。结果表明,通过倾斜率和相关性调整基数估算值,Q64和Q85的性能提升20%以上。
图14是能够用于实施各种实施例的数据库服务器1400的框图。另外,数据库服务器1400可以包括一个或多个所描述的元件。在一些实施例中,数据库服务器1400配备有一个或多个输入/输出设备,例如,扬声器、麦克风、鼠标、触摸屏、小键盘、键盘、打印机、显示器等。数据库服务器1400可以包括连接到总线的一个或多个中央处理器(centralprocessing unit,CPU)1410、存储器1420、大容量存储器1430、视频适配器1440和I/O接口1460。该总线是任何类型的若干总线架构中的一种或多种,包括存储总线或存储控制器、外设总线、视频总线等。
CPU 1410可以包括任何类型的电子数据处理器。存储器1420可以包括或者可以是任何类型的系统存储器,例如,静态随机存取存储器(static random access memory,SRAM)、动态随机存取存储器(dynamic random access memory,DRAM)、同步DRAM(synchronous DRAM,SDRAM)、只读存储器(read-only memory,称ROM)或其组合等。在一个实施例中,存储器1420可以包括在开机时使用的ROM以及在执行程序时使用的存储程序和数据的DRAM。在实施例中,存储器1420是非瞬时性存储器。大容量存储器1430包括任何类型的存储数据、程序和其它信息,以及通过总线访问数据、程序和其它信息的存储设备,。例如,大容量存储器1430包括固态硬盘、硬盘驱动器、磁盘驱动器、或光盘驱动器等中的一种或多种。
视频适配器1440和I/O接口1460提供接口以将外部输入和输出设备耦合到数据库服务器1400。例如,数据库服务器1400可以向客户端提供SQL命令接口。如图所示,输入和输出设备包括耦合到视频适配器1440的显示器1490和耦合到I/O接口1460的鼠标/键盘/打印机1470的任何组合,等等。其它设备可以耦合到数据库服务器1400,并且可以使用其它或少量接口卡。例如,串行接口卡(未图示)可以用于为打印机提供串行接口。
数据库服务器1400还包括一个或多个网络接口1450,包括以太网线等有线链路和/或连接到接入节点或一个或多个网络1480的无线链路。网络接口1450能够使数据库服务器1400通过网络1480与远程单元通信。例如,网络接口1450可以与数据库进行通信。在一个实施例中,数据库服务器1400耦合到局域网或广域网,以便与其它处理单元、互联网、或远程存储设施等远程设备进行数据处理和通信。
因此,本发明提供了上述数据库服务器和方法,定义基于熵的倾斜率和相关性,开发各种算法来计算和利用倾斜率和相关性,从而提高数据库管理系统的查询优化中的CE性能。另外,CE是基于成本的查询优化器中最关键的部分,对于倾斜率或相关度高的数据,能够显著提高性能。基于熵的倾斜率和相关性和开发的算法可以应用于CE的所有方面,包括单表选择率、有无过滤条件的连接选择率以及聚合中的按值分组。根据数据库中一列的熵,计算所述列的数据倾斜率;将所述数据倾斜率存储在所述数据库的目录中;通过将第一选择率与所述数据倾斜率相乘,估算所述列的选择率,所述数据库管理系统中的基数估算性能提高。计算数据库中两列之间的相关度,将所述相关度存储在所述数据库的目录中,根据所述相关度估算选择率,从而提高了所述数据库管理系统中的基数估算性能。基数估算性能提高,进而完善了优化器生成的查询计划,从而提高了查询性能。
本发明所描述的主题和操作的实现方式可以在数字电子电路中实施,也可以在计算机软件、固件或硬件中实施,包括在本发明中公开的结构及其结构等同物中实施,或在其一个或多个的组合中实施。本发明所描述的主题的实现方式可以实施为一个或多个计算机程序,即计算机程序指令的一个或多个模块,上述计算机程序被编码在计算机存储介质上,以由数据处理装置执行或控制数据处理装置的操作。可选地或另外,这些程序指令可以编码为机器生成的电信号、光信号或电磁信号等人工生成的传播信号,生成的电信号、光信号或电磁信号用于编码信息以传输到合适的接收器装置,供数据处理装置执行。计算机可读介质等计算机存储介质可以是计算机可读存储设备、计算机可读存储基板、随机或串行访问存储阵列或设备,或其中一个或多个的组合或包含在计算机可读存储设备、计算机可读存储基板、随机或串行访问存储阵列或设备,或其中一个或多个的组合中。此外,虽然计算机存储介质不是传播信号,但计算机存储介质可以是编码为人工生成的传播信号的计算机程序指令的源或目的地。计算机存储介质也可以是一个或多个单独的物理和/或非瞬时性组件或介质(例如,多个CD、磁盘或其它存储设备)或包含在一个或多个单独的物理和/或非瞬时性组件或介质(例如,多个CD、磁盘或其它存储设备)中。
在一些实现方式中,本发明所描述的操作可以实施为云计算网络中的服务器上提供的托管服务。例如,可以在云计算网络内对计算机可读存储介质进行逻辑分组和访问。云计算网络中的服务器可以包括云计算平台,用于提供云服务。在不脱离本发明的范围的情况下,“云”、“云计算”和“基于云”这些词可酌情互换使用。云服务可以是由服务器提供的,并通过网络传送到客户端平台,以增强、补充或替换在客户端计算机上本地执行的应用程序的托管服务。上述电路可一使用云服务来快速接收软件升级、应用程序和其他资源,否则,这些资源需要很长的时间才能传送到电路。
本发明中描述的操作可以实施为数据处理装置对存储在一个或多个计算机可读存储设备上或从其它来源接收的数据进行的操作。术语“数据处理装置”包括用于处理数据的各种装置、设备和机器,例如包括可编程处理器、计算机、芯片上的系统、或上述的多个或组合。装置可以包括专用逻辑电路,例如,现场可编程门阵列(field programmable gatearray,FPGA)或专用集成电路((application-specific integrated circuit,ASIC)。除硬件以外,装置还可以包括产生用于所关注计算机程序的执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行环境、虚拟机或其中一个或多个的组合的代码。装置和执行环境可以实现各种不同的计算模型基础设施,例如,web服务、分布式计算和网格计算基础设施。
计算机程序(也称为程序、软件、软件应用程序、脚本或代码)可以通过任何形式的编程语言编写,包括编译或直译语言、声明性语言或程序语言,并且可以通过任何形式进行部署,例如,作为独立程序或作为模块、组件、子例程、对象或其它适合在计算环境中使用的单元进行部署。计算机程序可以(但不必)对应于文件系统中的文件。程序可以存储在包含其它程序或数据的文件的一部分中(例如,存储在标记语言文档中的一个或多个脚本)、专用于所述程序的单个文件中,或多个协调文件中(例如,存储一个或多个模块、子程序或部分代码的文件)。可将计算机程序部署在一台计算机上执行,或部署在位于一个站点或分布于多个站点并通过通信网络互连的多台计算机上执行。
本发明中描述的过程和逻辑流可由执行一个或多个计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作和生成输出来执行动作。上述过程和逻辑流也可以由现场可编程门阵列(field programmable gate array,FPGA)或专用集成电路(application-specific integrated circuit,ASIC)等专用逻辑电路设备执行,上述装置也可以实施为专用逻辑电路。
例如,适合执行计算机程序的处理器包括通用和专用微处理器,以及任何类型的数字计算机中的任何一个或多个处理器。通常,处理器从只读存储器或随机存取存储器或两者中接收指令和数据。计算机的基本元件为用于根据指令执行动作的处理器和用于存储指令和数据的一个或多个存储设备。通常,计算机还包括一个或多个用于存储数据的大容量存储设备,例如磁盘、磁光盘或光盘,或可操作地耦合到一个或多个用于存储数据的大容量存储设备以从大容量存储设备接收数据和/或将数据传送给大容量存储设备。然而,计算机不必具有这些设备。此外,计算机可以嵌入到其它设备中,例如,移动电话、个人数字助理(personal digital assistant,PDA)、移动音频或视频播放器、游戏机、全球定位系统(Global Positioning System,GPS)接收器或便携式存储设备(例如,通用串行总线(universal serial bus,USB)闪存驱动器)等。适合存储计算机程序指令和数据的设备包括各种形式的非易失性存储器、介质和存储设备,例如,包括EPROM、EEPROM和闪存设备等半导体存储设备;内置硬盘或可移动硬盘等磁盘;磁光盘;CD-ROM和DVD-ROM磁盘。处理器和存储器可由专用逻辑电路进行补充或并入专用逻辑电路。
为了提供与用户交互,本发明中描述的主题的实现方式可以在计算机中实施,该计算机包括向用户显示信息的显示设备,例如,阴极射线管(cathode ray tube,CRT)、液晶显示器(liquid crystal display,LCD),以及包括用户可以向计算机提供输入的键盘和指向设备,例如,鼠标、跟踪球、麦克风和扬声器(或其组合)。其它类型的设备也可以用于提供与用户交互,例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、听觉反馈或触觉反馈;用户的输入可以通过任何形式接收,包括声音、语音或触觉输入。另外,计算机可以通过向用户使用的设备发送和从用户使用的设备接收文件来与用户交互,例如,通过向用户客户端设备上的网络浏览器发送网页来响应从网络浏览器接收的请求。
虽然本发明包括许多具体实现方式的细节,但这些不应对任何实施方式的范围或所要求的范围造成限制,而应作为针对特定实现方式的特定实现方式的特征的描述。在单独实现方式的上下文中,本发明中所描述的某些特征也可以在单个实现方式中组合实现。反之,在单个实现方式的上下文中描述的各种特征也可以在多个实现方式中单独实现或在任何合适的子组合中实现。此外,尽管上文可将特征描述为以某些组合来行动,甚至最初要求保护,但是在某些情况下,可从该组合中去除所要求保护的组合中的一个或多个特征,且所要求保护的组合可针对子组合或子组合的变体。
同样,虽然附图以特定顺序描述操作,但这不应理解为要求这些操作按照所示的特定顺序或按顺序执行,或者要求执行所示的所有操作,以达到期望的结果。在某些情况下,可进行多任务处理和并行处理。此外,上述实现方式中的各种系统组件的分离不应理解为所有实现方式都要求这种分离。应理解,所描述的程序组件和系统通常可以一起集成到单个软件产品中或打包到多个软件产品中。
因此,本主题的特定实现方式已做描述。其他实现方式在以下权利要求的保护范围之内。在一些情况下,可以不同的顺序执行权利要求中所述的动作,并且仍然达到期望的结果。此外,附图中描绘的过程不一定要求按所示的特定顺序或按顺序执行才能达到期望的结果。在某些实现方式中,可进行多任务处理和并行处理。
Claims (20)
1.一种应用于数据库管理系统的服务器,其特征在于,所述服务器包括:
包含指令的非瞬时性存储器;
与所述存储器通信的一个或多个处理器,其中,所述一个或多个处理器执行所述指令以:
根据数据库中第一列的熵,计算所述第一列的数据倾斜率,其中,所述第一列包括多个唯一值;
将所述数据倾斜率存储在所述数据库的目录中;
通过将第一选择率与所述数据倾斜率相乘,估算所述第一列的选择率;
根据所述估算出的选择率,生成查询计划。
2.根据权利要求1所述的服务器,其特征在于,所述一个或多个处理器还执行所述指令以:
计算所述数据库中的所述第一列和第二列的联合熵;
根据所述第一列的熵、所述第二列的熵和所述联合熵,计算互信息I;
根据所述互信息,计算所述第一列和所述第二列之间的相关度c,其中,c=2I;
将所述相关度存储在所述目录中。
3.根据权利要求2所述的服务器,其特征在于,所述一个或多个处理器还执行所述指令以:
通过将所述第一列的选择率、所述第二列的选择率和所述相关度相乘,估算所述第一列和所述第二列之间的联合选择率;
根据所述估算出的联合选择率,生成所述查询计划。
4.根据权利要求2所述的服务器,其特征在于,所述一个或多个处理器还执行所述指令以:
根据所述相关度和所述第二列中的唯一值的数量以及根据所述第二列上的条件,计算所述第一列过滤后的剩余值的数量;
使用所述第一列过滤后的剩余值的数量进行连接基数估算。
5.根据权利要求4所述的服务器,其特征在于,所述第二列中的唯一值的数量为1;所述一个或多个处理器执行所述指令以:
通过将所述第一列中的伪值的第一数量与所述相关度相除,计算所述第一列过滤后的剩余值的数量,其中,所述第一列具有熵H,所述第一列中的所述伪值的第一数量是2H。
7.根据权利要求2所述的服务器,其特征在于,所述一个或多个处理器还执行所述指令以:
通过将所述第一列中的伪值的数量和所述第二列中的伪值的数量之积与所述相关度相除,计算所述第一列和所述第二列的组合值的数量;
使用所述组合值的数量进行聚合基数估算。
8.根据权利要求2所述的服务器,其特征在于,所述一个或多个处理器还执行所述指令以:
通过将所述第一列中的伪值的数量和所述第二列中的伪值的数量之积与所述相关度相除,计算所述第一列和所述第二列的组合值的数量;
使用所述组合值的数量进行连接基数估算。
9.根据权利要求1所述的服务器,其特征在于,所述一个或多个处理器执行所述指令以:
从所述第一列中获取样本;
计算所述样本的样本熵;
根据所述样本熵,计算所述第一列的熵H;
将所述熵H存储在所述目录中。
10.根据权利要求9所述的服务器,其特征在于,v表示所述样本中的唯一值的数量,D表示所述第一列中的唯一值的数量,p表示在所述样本中发现的值与所述第一列估算值的比率,h表示所述样本熵,所述熵H可以通过以下方式估算:
如果p=1,则H=h;
否则,H=p×h+(1–p)×log2(D–v)–p×log2(p)–(1–p)×log2(1–p),其中,p=v/D。
11.根据权利要求9所述的服务器,其特征在于,v表示所述样本中的唯一值的数量,D表示所述第一列中的唯一值的数量,p表示在所述样本中发现的值与所述第一列估算值的比率,h表示所述样本熵,k表示样本倾斜率,其中,所述熵H通过以下方式估算:
如果p=1,则H=h;
否则,如果k<1.25,则H=log(D);
否则,H=p×h+(1–p)×log(D–v)–p×log(p)–(1–p)×log(1–p)。
12.根据权利要求9所述的服务器,其特征在于,所述一个或多个处理器执行所述指令以:
计算所述第一列的样本倾斜率k:k=2logv–h,
其中,v表示所述样本中的唯一值。
13.一种应用于包括多个节点的数据库管理系统的服务器,其特征在于,所述服务器包括:
包含指令的非瞬时性存储器;
与所述存储器通信的一个或多个处理器,其中,所述一个或多个处理器执行所述指令以:
计算节点级熵;
根据所述节点级熵,计算节点级倾斜率;
判断是否存在重分布成本;
将所述重分布成本与所述节点级倾斜率相乘,以进行成本估算。
15.根据权利要求14所述的服务器,其特征在于,所述一个或多个处理器执行所述指令以:
计算所述节点级倾斜率k:k=2logd–H(d)。
16.一种应用于数据库管理系统的方法,其特征在于,所述方法包括:
所述数据库管理系统中的服务器根据数据库中第一列的熵,计算所述第一列的数据倾斜率,其中,所述第一列包括多个唯一值;
所述服务器将所述数据倾斜率存储在所述数据库的目录中;
所述服务器通过将第一选择率与所述数据倾斜率相乘,估算所述第一列的选择率;
所述服务器根据所述估算出的选择率,生成查询计划。
17.根据权利要求16所述的方法,其特征在于,所述方法还包括:
所述服务器计算所述数据库中的所述第一列和第二列的联合熵;
所述服务器根据所述第一列的熵、所述第二列的熵和所述联合熵,计算互信息I;
所述服务器根据所述交付信息,计算所述第一列和所述第二列之间的相关度c,其中,c=2I;
所述服务器将所述相关度存储在所述目录中。
18.根据权利要求16所述的方法,其特征在于,所述方法还包括:
所述服务器通过将所述第一列的所述选择率、所述第二列的选择率和所述相关度相乘,估算所述第一列和所述第二列之间的联合选择率;
所述服务器根据所述估算出的联合选择率,生成所述查询计划。
19.根据权利要求16所述的方法,其特征在于,所述方法还包括:
所述服务器从所述第一列中获取样本;
所述服务器计算所述样本的样本熵;
所述服务器根据所述样本熵,计算所述第一列的熵H;
所述服务器将所述熵H存储在所述目录中。
20.根据权利要求19所述的方法,其特征在于,所述方法包括:
计算所述第一列的样本倾斜率k:k=2logv–h,
其中,v表示所述样本中的唯一值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/850,361 | 2017-12-21 | ||
US15/850,361 US10664477B2 (en) | 2017-12-21 | 2017-12-21 | Cardinality estimation in databases |
PCT/CN2018/120086 WO2019120093A1 (en) | 2017-12-21 | 2018-12-10 | Cardinality estimation in databases |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111512283A true CN111512283A (zh) | 2020-08-07 |
CN111512283B CN111512283B (zh) | 2023-09-08 |
Family
ID=66950439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880082871.9A Active CN111512283B (zh) | 2017-12-21 | 2018-12-10 | 数据库中的基数估算 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10664477B2 (zh) |
EP (1) | EP3717997A4 (zh) |
CN (1) | CN111512283B (zh) |
WO (1) | WO2019120093A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114328614A (zh) * | 2022-03-03 | 2022-04-12 | 阿里巴巴(中国)有限公司 | 查询计划选择系统、方法、电子设备及介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10853368B2 (en) | 2018-04-02 | 2020-12-01 | Cloudera, Inc. | Distinct value estimation for query planning |
US11379476B2 (en) * | 2019-10-15 | 2022-07-05 | Oracle International Corporation | Bitmap-based count distinct query rewrite in a relational SQL algebra |
US11429606B2 (en) | 2019-12-24 | 2022-08-30 | Oracle International Corporation | Densification of expression value domain for efficient bitmap-based count(distinct) in SQL |
US11301471B2 (en) | 2020-05-21 | 2022-04-12 | International Business Machines Corporation | Database join prefetcher |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040128287A1 (en) * | 2002-12-20 | 2004-07-01 | International Business Machines Corporation | Self tuning database retrieval optimization using regression functions |
US20050131914A1 (en) * | 2003-12-11 | 2005-06-16 | International Business Machines Corporation | Apparatus and method for estimating cardinality when data skew is present |
US20070233634A1 (en) * | 2006-04-03 | 2007-10-04 | Vincent Corvinelli | Method and system for estimating cardinality in a database system |
US20080086444A1 (en) * | 2006-10-09 | 2008-04-10 | International Business Machines Corporation | System and method for improving cardinality estimation in a relational database management system |
US20090006399A1 (en) * | 2007-06-29 | 2009-01-01 | International Business Machines Corporation | Compression method for relational tables based on combined column and row coding |
US20090254521A1 (en) * | 2008-04-04 | 2009-10-08 | International Business Machines Corporation | Frequency partitioning: entropy compression with fixed size fields |
CN102165772A (zh) * | 2008-09-16 | 2011-08-24 | 杜比实验室特许公司 | 自适应视频编码器控制 |
US8176016B1 (en) * | 2006-11-17 | 2012-05-08 | At&T Intellectual Property Ii, L.P. | Method and apparatus for rapid identification of column heterogeneity |
CN102460470A (zh) * | 2009-06-11 | 2012-05-16 | 杜比实验室特许公司 | 基于指纹的内容识别趋势分析 |
US8229917B1 (en) * | 2011-02-24 | 2012-07-24 | International Business Machines Corporation | Database query optimization using clustering data mining |
CN103797793A (zh) * | 2011-07-15 | 2014-05-14 | 弗兰霍菲尔运输应用研究公司 | 低延迟的样本阵列编码 |
CN104620239A (zh) * | 2012-09-28 | 2015-05-13 | 甲骨文国际公司 | 自适应查询优化 |
US20160179889A1 (en) * | 2014-12-23 | 2016-06-23 | Teradata Us, Inc. | Caching methods and a system for entropy-based cardinality estimation |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6732085B1 (en) * | 2001-05-31 | 2004-05-04 | Oracle International Corporation | Method and system for sample size determination for database optimizers |
-
2017
- 2017-12-21 US US15/850,361 patent/US10664477B2/en active Active
-
2018
- 2018-12-10 WO PCT/CN2018/120086 patent/WO2019120093A1/en unknown
- 2018-12-10 EP EP18892475.7A patent/EP3717997A4/en active Pending
- 2018-12-10 CN CN201880082871.9A patent/CN111512283B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040128287A1 (en) * | 2002-12-20 | 2004-07-01 | International Business Machines Corporation | Self tuning database retrieval optimization using regression functions |
US20050131914A1 (en) * | 2003-12-11 | 2005-06-16 | International Business Machines Corporation | Apparatus and method for estimating cardinality when data skew is present |
US20070233634A1 (en) * | 2006-04-03 | 2007-10-04 | Vincent Corvinelli | Method and system for estimating cardinality in a database system |
US20080086444A1 (en) * | 2006-10-09 | 2008-04-10 | International Business Machines Corporation | System and method for improving cardinality estimation in a relational database management system |
US8176016B1 (en) * | 2006-11-17 | 2012-05-08 | At&T Intellectual Property Ii, L.P. | Method and apparatus for rapid identification of column heterogeneity |
US20090006399A1 (en) * | 2007-06-29 | 2009-01-01 | International Business Machines Corporation | Compression method for relational tables based on combined column and row coding |
US20090254521A1 (en) * | 2008-04-04 | 2009-10-08 | International Business Machines Corporation | Frequency partitioning: entropy compression with fixed size fields |
CN102165772A (zh) * | 2008-09-16 | 2011-08-24 | 杜比实验室特许公司 | 自适应视频编码器控制 |
CN102460470A (zh) * | 2009-06-11 | 2012-05-16 | 杜比实验室特许公司 | 基于指纹的内容识别趋势分析 |
US8229917B1 (en) * | 2011-02-24 | 2012-07-24 | International Business Machines Corporation | Database query optimization using clustering data mining |
CN103797793A (zh) * | 2011-07-15 | 2014-05-14 | 弗兰霍菲尔运输应用研究公司 | 低延迟的样本阵列编码 |
CN104620239A (zh) * | 2012-09-28 | 2015-05-13 | 甲骨文国际公司 | 自适应查询优化 |
US20160179889A1 (en) * | 2014-12-23 | 2016-06-23 | Teradata Us, Inc. | Caching methods and a system for entropy-based cardinality estimation |
Non-Patent Citations (4)
Title |
---|
HIEN等: "Entropy-based Histograms for Selectivity Estimation", 《PROCEEDINGS OF THE 22ND ACM INTERNATIONAL CONFERENCE ON CONFERENCE ON INFORMATION & KNOWLEDGE MANAGEMENT》, pages 1939 - 1948 * |
MARKL等: "Consistently Estimating the Selectivity of Conjuncts of Predicates", 《PROCEEDINGS OF THE 31ST VLDB CONFERENCE》 * |
孙莉;李静;刘国华;: "列存储数据查询中的连接策略优化方法", 计算机研究与发展, no. 08, pages 1647 - 1656 * |
孙莉等: "列存储数据查询中的连接策略优化方法", 《计算机研究与发展》, no. 08 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114328614A (zh) * | 2022-03-03 | 2022-04-12 | 阿里巴巴(中国)有限公司 | 查询计划选择系统、方法、电子设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
US20190197162A1 (en) | 2019-06-27 |
US10664477B2 (en) | 2020-05-26 |
EP3717997A1 (en) | 2020-10-07 |
EP3717997A4 (en) | 2020-12-02 |
WO2019120093A1 (en) | 2019-06-27 |
CN111512283B (zh) | 2023-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11888702B2 (en) | Intelligent analytic cloud provisioning | |
CN111512283A (zh) | 数据库中的基数估算 | |
US9524310B2 (en) | Processing of categorized product information | |
US9940357B2 (en) | Optimizing queries using global statistics for distributed databases | |
US10223437B2 (en) | Adaptive data repartitioning and adaptive data replication | |
JP6434154B2 (ja) | トランザクションアクセスパターンに基づいた結合関係の識別 | |
US7472108B2 (en) | Statistics collection using path-value pairs for relational databases | |
US8051058B2 (en) | System for estimating cardinality in a database system | |
JP2018190450A (ja) | 基数推定を介した結合パスの効率的な判定 | |
WO2016134580A1 (zh) | 一种数据查询方法及装置 | |
WO2018036549A1 (zh) | 分布式数据库查询方法、装置及管理系统 | |
US9244950B2 (en) | Method for synthetic data generation for query workloads | |
US10191947B2 (en) | Partitioning advisor for online transaction processing workloads | |
US10466936B2 (en) | Scalable, multi-dimensional search for optimal configuration | |
CN101916281B (zh) | 并行计算系统及去重计数方法 | |
US11625399B2 (en) | Methods and devices for dynamic filter pushdown for massive parallel processing databases on cloud | |
US10565286B2 (en) | Constructing join histograms from histograms with Q-error guarantees | |
CN113806353A (zh) | 实现时序特征抽取的方法及装置 | |
US20160092595A1 (en) | Systems And Methods For Processing Graphs | |
JP7275392B2 (ja) | ルール違反検出 | |
CN113806354B (zh) | 实现时序特征抽取的方法及装置 | |
CN110751161A (zh) | 基于Spark的节点相似度计算方法、装置及终端 | |
US11762831B2 (en) | Adaptive sparse indexing in cloud-based data warehouses | |
CN110737679B (zh) | 数据资源的查询方法、装置、设备及存储介质 | |
CN116894229A (zh) | 一种同类多数据源融合方法、装置、设备及存储介质 |
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 |