CN104620239B - 自适应查询优化 - Google Patents

自适应查询优化 Download PDF

Info

Publication number
CN104620239B
CN104620239B CN201380047214.8A CN201380047214A CN104620239B CN 104620239 B CN104620239 B CN 104620239B CN 201380047214 A CN201380047214 A CN 201380047214A CN 104620239 B CN104620239 B CN 104620239B
Authority
CN
China
Prior art keywords
plan
data
executive plan
inquiry
value
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
Application number
CN201380047214.8A
Other languages
English (en)
Other versions
CN104620239A (zh
Inventor
A·W·李
M·在特
H·S·斯瓦拉玛萨伯拉曼亚姆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Publication of CN104620239A publication Critical patent/CN104620239A/zh
Application granted granted Critical
Publication of CN104620239B publication Critical patent/CN104620239B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • G06F16/24544Join order optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Operations Research (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

提供了用于处理查询的技术。在一种方法中,用于查询的执行计划包括多个子计划,其中一个或多个子计划在运行时被选择,而一个或多个其它子计划在执行计划的执行期间未被执行。在另一种方法中,生成关于错误估计的数据并且为后续的查询永久地保存该数据。在另一种方法中,在创建数据库对象或向其添加数据项时,自动并高效地生成用于该数据库对象的统计数据。在另一种方法中,创建包括频率直方图的特征和高度平衡的直方图的特征的混合直方图。在另一种方法中,以避免死锁的方式执行计算机作业。在另一种方法中,即使已经存在用于查询的执行计划,对数据库对象的改变也触发该查询的硬解析。

Description

自适应查询优化
技术领域
实施例涉及查询处理,并且更具体而言,涉及在查询的执行计划被执行时如何改变查询被处理的方式。
实施例涉及查询处理,并且更具体而言,涉及为优化查询生成统计数据。
背景技术
处理查询通常涉及至少两个阶段:编译和执行。在编译期间,一个或多个数据库服务器过程执行多个功能,诸如解析查询、确定涉及哪个(些)表,列、数据类型等、确定是否可以使用索引以及生成执行计划。编译的这个过程通常被称为“硬解析”。在编译阶段期间使用的执行计划和许多信息被保存在称为指示器(cursor)的结构中。在执行期间,一个或多个数据库服务器过程使用指示器来执行查询。
查询编译器可以生成多个有效的执行计划,其中每个都可被用来生成有效的查询结果。(可以与查询编译器相同或不同的)查询优化器选择其中一个执行计划来执行。执行计划的选择通常是基于执行该执行计划相对于其它候选执行计划的估计成本。查询优化器可以考虑若干因素来生成估计成本,诸如,在执行期间可被处理的行的数量、可被执行的操作(例如,连接,表扫描)的数量、以及可能需要的磁盘访问的数量。
尽管对估计执行计划的成本进行了复杂的尝试,但是仍然可能存在其中执行计划花费太长时间以至于用户(例如,数据库管理员(DBA))终止(或“取消”)执行的情形。这种执行计划被称为“灾难性计划”。一旦灾难性计划被终止,用户就必须提供输入来确保该执行计划不会再次被选择用于相同或相似的查询。例如,用户可以手动地改变执行计划的内容,诸如改变操作的类型和/或其中操作被执行的次序。
在本节中描述的方法是可以实行的方法,但不一定是先前已被构想或实行的方法。因此,除非另外指出,否则不应当假设本节中描述的任何方法仅仅因为它们被包括在本节中就有资格作为现有技术。
附图说明
在附图中:
图1是描绘实施例中用于处理查询的过程的流程图;
图2是描绘实施例中的自适应计划以及由执行自适应计划生成的最终计划的框图;
图3是描绘实施例中涉及位图修剪(pruning)的自适应计划的框图;
图4是描绘实施例中用于自动重优化过程的流程图;
图5是描绘实施例中分配计算机作业以用于收集统计数据的过程的流程图;
图6A是描绘基于数据集的示例高度平衡直方图的框图;
图6B是描绘实施例中基于相同数据集的示例混合直方图的框图;
图7是实施例中用于确定生成哪种类型直方图的流程图;
图8是描述实施例中能共享相同指示器的多个查询何时被提交的示例时间轴800的框图;
图9是描述实施例中用于共享指示器的过程的流程图;
图10是说明本发明实施例可在其上实现的计算机系统的框图。
具体实施方式
在以下描述中,为了解释的目的,阐述了众多具体的细节,以便提供对本发明的透彻理解。但是,很显然,本发明没有这些具体细节也可以实践。在其它情况下,众所周知的结构和设备以框图形式示出,以避免不必要地混淆本发明。
总体概述
本文提供的技术用于利用在查询执行期间收集的信息来或者确定要执行用于查询的执行计划的哪部分或者提高查询的后续执行。后者的用例(即,其中在查询执行期间收集的信息被用来提供查询的后续执行)被称为“自动再优化”。换句话说,该信息在编译期间被使用。
在前者的用例中,信息在运行时被使用。因此,关于应该如何执行查询的一个或多个决定是在执行用于该查询的执行计划时做出的。执行计划可以包括多个子计划。包括多个子计划的执行计划在本文被称为“自适应计划”。特定的子计划是基于关于已经或正在被执行的(执行计划的)一个或多个操作的信息来选择的。因此,在执行特定的子计划时,执行计划中其它的子计划可能不被执行。
作为替代,在另一执行计划的执行期间,选择特定的执行计划来执行,而不是多个子计划。以这种方式,另一个执行计划没有被完全执行。
还提供了在运行时生成统计数据并且如果执行一个或多个操作的实际成本与执行这一个或多个操作的估计成本明显不同则存储该统计数据的技术。
还提供了当数据被加载到数据库对象中时自动生成统计数据的技术。
还提供了关于全局临时表(GTT)限制统计数据的共享的技术。识别统计数据在其中生成的会话的会话识别数据可以连同统计数据一起被存储在指示器中。
还提供了避免潜在死锁场景的高效并发统计数据生成的技术。
还提供了生成新类型直方图的技术。
还提供了在确定是否共享一个或多个指示器时使用动态统计数据的技术。
自适应计划执行概述
图1是描绘实施例中处理查询的过程100的流程图。在方框110,接收到查询。查询可以遵守标准查询语言,诸如SQL或XQuery。查询可以是由用户最初构成的原始查询。作为替代,查询可以是从查询处理器基于一个或多个规则修改原始查询所生成的重写的查询。
在方框120,确定自适应计划。自适应计划包括多个子计划。每个子计划包括一个或多个操作。自适应计划可以响应于接收到查询而生成。例如,查询编译器(或者查询优化器)编译查询以生成自适应计划。作为替换,自适应计划可以响应于与当前查询相同或相似的之前查询而已经被生成。以这种方式,自适应计划(或者它所属的指示器)被多个查询“共享”。如果查询在语法上或语义上等效,则对多个查询共享指示器是可能的。指示器共享的示例方法在美国专利申请序列No.11/831,951中描述,其内容通过引用被结合于此,就像在本文完全阐述了一样。
在方框130,执行自适应计划的一部分。该部分包括自适应计划的严格子集,例如一个或多个操作。该部分可以对应于表扫描操作。该部分可以是或者不是自适应执行计划的子计划之一的一部分。
在方框140,确定是否满足一个或多个子计划标准。“一个或多个子计划标准”是用来从自适应计划的多个子计划中选择子计划的一个或多个标准。一个或多个子计划标准的例子包括作为执行自适应计划的被执行过部分中的操作之一的结果而已被处理的数据的数量。一个或多个子计划标准的另一个例子是作为执行自适应计划的被执行过部分中的操作之一的结果而被检索的不同的或唯一的值的数量。
统计数据收集器
在实施例中,自适应计划引用(reference)或包括统计数据收集器,该统计数据收集器收集关于在执行自适应计划中的一个或多个操作时被读取、生成或产生的数据的统计数据。例如,统计数据收集器可以确定表中满足谓词(predicate)的行数。行数可以只基于已被读取的表的严格子集。作为另一个例子,统计数据收集器可以确定由于执行散列连接操作而产生的行数。
在自适应计划的一部分执行期间确定的统计数据被用来确定一个或多个子计划标准是否被满足。
在实施例中,统计数据收集器是执行计划中的对象。统计数据收集器可以实现为行源(rowsource)或者可以被构建到现有行源中。行源是负责从诸如表或连接操作的“源”检索行的对象。统计数据收集器可以充当直通分析器,其输入是来自行源的行并且基于该输入生成信息,例如行数、不同值(distinct value)的数量、最大值和最小值。
执行计划可以包括多个统计数据收集器,每个统计数据收集器位于执行计划中的不同位置。执行计划中的每个统计数据收集器被配置为生成相同或不同类型的信息。
为了防止计划的后续部分处理数据,使用缓冲区来存储临时结果。例如,期望在查询执行引擎“确定”它将执行散列连接操作之前都防止查询执行引擎构建散列表。作为另一个例子,查询执行引擎在查询执行引擎“知道”它将使用嵌套循环连接(NLJ)操作的结果之前都不应当开始执行NLJ操作。另一个使用缓冲区的理由是收集某些类型的统计数据。一旦足够的行被插入缓冲区中,被缓冲的行就可以被采样以产生统计数据。
因此,在实施例中,统计数据收集器与特定的缓冲区大小相关联。如果统计数据收集器处理的数据量超过缓冲区的大小,则该信息被用来触发方框140,即,确定是否满足一个或多个子计划标准。例如,如果缓冲区大小相当于来自表T1的100行数据并且统计数据收集器确定已从表T1中读取了一百行,则该信息可以被用来触发选择哪个子计划的决定。已经读取一百行的事实可以被用来确定选择哪个子计划。作为替代,然后可以分析这一百行以确定这一百行的特性,诸如在这一百行中某一列的不同值的数量。然后,所述不同值的数量被用来确定选择哪个子计划。
如果一个或多个子计划标准被满足,则过程100前进到方框150,在该方框中,选择自适应计划的第一子计划。如果一个或多个子计划标准没有被满足,则过程100前进到方框160,在该方框中,在不执行第一子计划的情况下执行自适应计划的另一部分。例如,选择自适应计划的第二子计划而不是第一子计划。
例如,如果表扫描操作的执行导致读取少于二百行,则选择第一子计划。否则,选择与第一子计划不同的第二子计划并且在执行期间第一子计划被有效地忽略。
在实施例中,响应于在自适应计划的执行期间选择特定的子计划,子计划指示数据被存储在存储自适应计划的指示器中。子计划指示数据指示(a)在自适应计划的执行期间被选择的一个或多个子计划和/或(b)在自适应计划的执行期间被忽略或未被选择的一个或多个子计划。子计划指示数据用在自适应计划的后续执行上,其可用于相同或类似的查询,诸如在语义上等效但是具有与触发自适应计划生成的原始查询不同的一个或多个不同的绑定值的查询。子计划指示数据被使用,使得在方框140的确定可以被跳过并且使得之前执行的相同子计划将被再次执行。因此,自适应计划在自适应计划的后续执行期间可能不包括统计数据收集器的执行。
在自适应计划的执行期间,统计数据收集器可能由于例如缺乏资源可用性而失败,诸如缺乏用于缓冲行的存储器。在实施例中,自适应计划包括指示要被执行的一个或多个子计划以及可选地要被跳过的一个或多个子计划的“缺省”计划。
自适应连接
自适应计划可以用在多种环境中。一种可能的环境是确定哪种访问方法更好。一种访问方法是扫描表,而另一种访问方法是利用索引来查找对应的值。如果被检索数据的范围相对大,则为某些数据扫描表比利用索引更高效。如果相对少量的数据要基于操作被检索,则索引通常优于表扫描。
另一个其中可以使用自适应计划的环境是连接环境。可以使用多种类型的连接操作来为查询产生有效的结果。示例连接类型包括嵌套循环连接(NLJ)和散列连接(HJ)。依赖于数据分布,不同的连接是有用的。例如,当首先被访问的表包含相对较少的行数时或者当过滤条件相对有选择性使得少量行满足该条件时,嵌套循环连接优于散列连接。谓词的选择性(例如,sal>50000)指满足该谓词的表(包括视图)的行的百分比。“高”选择性谓词是其中相对较少的行(诸如.01%)满足谓词的谓词。相反,“低”选择性谓词是其中相对较多的行(比如45%)满足谓词的谓词。
图2是描绘实施例中自适应计划200以及由于执行自适应计划200而产生的计划250的框图。自适应计划200包括表扫描运算符210、统计数据收集器220和动态部分230。表扫描运算符210引用表T1。
动态部分230包括两个子计划。一个子计划包括索引范围扫描运算符232和嵌套循环连接(NLJ)234。其它子计划包括表扫描运算符236和散列连接238。索引范围扫描运算符232引用表T2的索引并且表扫描运算符236引用表T2。
由统计数据收集器220收集的统计数据被用来确定当执行自适应计划200时使用哪个子计划。在这个例子中,统计数据收集器220确定由于执行表扫描运算符210而从表T1中检索到的行数。例如,如果在表扫描运算符210的执行期间检索到的行数小于十,则选择“左侧”子计划(即,包括索引范围扫描运算符232的子计划)。否则,选择“右侧”子计划(即,包括表扫描运算符236的子计划)。
尽管自适应计划200只包括两个子计划,但是,依赖于自适应计划所基于的查询的复杂性,自适应计划可以包括多于两个子计划。因此,自适应计划可以在自适应计划中包括在其执行统计数据收集和评估的多个统计数据收集器或多个点。例如,散列连接234的结果可以进一步与来自表T3(未示出)的数据连接。该附加的连接可以是嵌套循环连接或散列连接并且,因此,可以由两个附加的子计划表示。因此,统计数据收集器可以收集基于散列连接234识别出的行。那些行的数量(或那些行的某个其它特性)可被用来确定选择这两个附加子计划中的哪一个来执行。
在实施例中,虽然自适应计划200包括在其选择两个子计划之一的二元决策点,但是自适应计划可以包括可在其选择三个或更多个子计划之一的决策点。换句话说,代替是两元的,决策点还可以是三元的、四元的或五元的。例如,代替如图2确定使用两个连接方法中的哪一个,该确定可以是使用三个连接方法中的哪一个。
此外,决策点可以保留在该决策点所属的执行计划或者切换到完全不同的执行计划。不同的执行计划可以使用由原始执行计划生成的结果的至少一部分或者可以“从头(from scratch)”开始执行。
在图2的例子中,选择了“右侧”子计划,这使得自适应计划200变为执行计划250。在执行计划250中,表T1的表扫描操作结果(210)与表T2的表扫描操作结果(238)进行散列连接(234)。两个表或关系的散列连接涉及基于“较小的”表生成散列表(即,“建造阶段”),然后利用来自“较大的”表的行在该散列表中查找值(即,“探索阶段”)。
自适应位图修剪
另一个可以使用自适应计划的环境是处理位图索引。位图索引提供从数据库中检索数据的高效且快速的方法。位图索引是包括一组可用于访问数据的位图的索引。在位图索引的环境中,位图是指示哪些存储在数据主体中的记录满足特定标准的一系列位。数据主体中的每条记录在位图中具有对应的位。位图中的每个位充当标志,以指示对应于该位的记录是否满足与该位图相关联的标准。
通常,与位图相关联的一个或多个标准是对应的记录是否包含特定的关键字值。在对于给定关键字值的位图中,包含该关键字值的所有记录将把它们对应的位设为1,而所有其它的位设为0。用于在数据记录中出现的关键字值的位图的集合可以用于给数据记录编索引。为了利用给定的关键字值检索数据记录,用于那个关键字值的位图从索引检索,并且对于位图中每个设为1的位,检索对应的数据记录。对应于位的记录是基于位的位置与数据记录之间的映射函数定位的。
当利用位图索引检索数据时,可以利用在适当的位图上的布尔操作组合若干个逻辑检索条件。例如,如果要检索的数据受以下条件约束:key1=<val1>and key2=<val2>and key3=<val3>,则可以对用于关键字值<val1>和<val2>以及<val3>的位图执行按位与(AND),以生成指示匹配所有三个条件的数据项的位图。
考虑以下示例查询:
它可以被如下重写:
在这个例子中,对于销售表(sales表)(这是事实表并且可能相当大)的多个列存在位图索引,诸如时间ID(time ID)、顾客ID(customer ID)和产品ID(product ID)。利用位图索引的执行计划可以涉及:(1)利用其中应用时间谓词(即,year=2012)的时间维度表连接用于时间ID的位图索引;(2)利用其中应用顾客谓词(即,cust.state=‘CA’)的顾客维度表连接顾客ID的位图索引;及(3)利用其中应用任何产品谓词的产品维度表连接产品ID的位图索引。这三个连接当中每一个都被称为“位图连接”。然后,每个位图连接的结果AND到一起,以产生,对于销售表中的每个条目,指示该条目是否满足原始查询的所有谓词的最终位图索引。
许多包括位图索引的执行计划还包括连接(a)事实表的满足所有谓词的条目或行和(b)一个或多个对应于位图连接的维度表。这种连接在本文被称作“后向连接(joinback)”。如果原始查询在FROM语句中指示的连接被执行之后从维度表中选择列,则需要joinback。在以上的示例查询中,选择了铲平名称(从产品维度表)和季度(从时间维度表)。因此,需要产品维度表和时间维度表的joinback。
但是,在实施例中,一个或多个位图连接在执行计划的执行期间被修剪或从执行计划中删除。就像之前描述的散列连接或嵌套循环连接,位图连接可以被认为是一种类型的子计划。因此,包括一个或多个可选位图连接的执行计划是一类自适应计划。
是否修剪或跳过位图连接的决定可以基于一个或多个标准。一个示例标准是对应于位图索引的维度表是否随后要在自适应计划中连接。如果是,则利用位图索引的位图连接是用于修剪的候选。在之前的例子中,由于顾客维度没有在随后进行连接,因此涉及关于顾客ID的位图索引的位图连接不是用于修剪的候选。
在实施例中,在组合所有结果产生的位图的与操作被执行之后,添加涉及作为可被修剪的位图连接的一部分的维度表的连接操作。在上面的例子中,在涉及顾客表的位图连接在运行时被修剪的情况下,涉及(a)满足时间和产品谓词的销售表的行和(b)顾客表的连接被添加到自适应计划。
位图扫描或连接的成本应该尽量减少数据,以便使之后的事实表查找就被处理的行数而言“更便宜”。如果不是这种情况,则位图扫描或连接应当被修剪。因此,另一个示例标准是位图连接是否具有高选择性或者,更确切地说,位图连接的执行结果是否导致确定来自事实表的相对较少的行满足对应的谓词。例如,如果大多数来自销售表的行与年份2012相关联,则包括将一个或多个位图索引与时间维度表连接的位图连接可以被修剪。作为另一个例子,如果销售表中少于20%的行与原始查询的谓词中指示的产品名称相关联,则涉及关于销售表的产品ID列的位图索引的位图连接不应当被修剪。
因此,如果位图连接不是高选择性的(即,事实表中少量的行满足对应的谓词)并且自适应计划中随后的连接涉及对应的维度表,则该位图连接是用于修剪的候选。而且,如以上所指出的,即使原始查询不选择对应维度表的列,“随后的连接”也可以被添加到自适应计划。
图3是描绘实施例中涉及位图修剪的自适应计划300的框图。自适应计划300是基于具有三个谓词的查询:一个关于日期表、一个关于供应商表和一个关于顾客表,每个表都是维度表。事实表是线性顺序表。查询还从供应商表中选择列。因此,自适应计划300包括:(1)日期表310和关于线性顺序表的日期列的位图索引312之间的位图连接322;(2)供应商表314和关于线性顺序表的供应商列的位图索引316之间的位图连接324;及(3)顾客表318和关于线性顺序表的顾客列的位图索引320之间的位图连接326。自适应计划300还包括将来自每个位图连接的结果与的与运算328。自适应计划300还包括将与运算328的结果与线性顺序表330连接的嵌套循环连接运算332。运算332的结果表示线性顺序表330中满足这三个谓词的所有线性项目。
自适应计划300所基于的查询涉及选择操作,该操作选择满足这三个谓词的线性项目的供应商的名称。因此,自适应计划300包括与供应商表334的散列连接操作336(作为替代,这可以是另一种类型的连接,诸如嵌套循环连接)。
在查询的编译(也称为查询优化)期间,确定关于线性顺序表的顾客列的谓词(反映在位图连接326的结果中)会具有高选择性。换句话说,会有很多行满足那个谓词。这种确定会由于关于线性顺序表的顾客列的统计数据不足而做出。例如,关于谓词对顾客列多有选择性,统计数据可以是无记载的(silent)。因此,位图连接326可以被识别为用于修剪的候选。随后,在自适应计划执行期间,谓词的选择性被确定(或至少被近似)。这个确定被用来确定是否修剪位图连接326。
如果自适应计划300所基于的查询不包括选择线性顺序表的顾客列并且位图连接326被识别为用于修剪的候选,则顾客表的连接操作被添加到自适应计划300。在这个例子中,散列连接340和顾客表338被添加到自适应计划300。因此,在自适应计划300执行期间,如果确定要执行位图连接326,则散列连接340被修剪。相反,如果确定位图连接326要被修剪,则散列连接340将不被修剪。作为替代,可以存储指示散列连接340不能被修剪的数据。
此外,如果确定对应的谓词具有高选择性,则查询优化器可以确定位图连接324是否是可选的。因为原始查询包括对来自供应商表中的列的选择(反映在散列连接336和供应商表334中),所以位图连接324是用于修剪的候选。
因此,自适应计划可以具有可选的多个位图连接。而且,如果使位图连接(例如,位图连接326)成为可选的,则多个附加的连接(例如,散列连接340)可以被添加到自适应计划。
成本估计器和决策点
如前面所指出的,在其优先选择一个子计划而不是另一个子计划或者位图连接是否应当被修剪的点在本文被称为“决策点”。在实施例中,成本估计器为决策点确定将要被查询执行器用来确定选择哪个子计划或者是否修剪位图连接的一个或多个值。成本估计器是查询编译器或优化器中负责生成一个或多个执行计划的部分。
成本估计器可以采用多种技术中的一种来确定将在决策点使用什么值。例如,在自适应连接的环境中,成本估计器可以使用试探来确定使用哪种连接方法。试探可以是左侧表中满足谓词的行的阈值数量。如果在执行期间确定满足谓词的行的实际数量大于该阈值,则将选择涉及散列连接的子计划;否则,将选择嵌套循环连接。不考虑表的已知或估计大小,试探都可以是具体的行数。作为替代,试探可以是所涉及的表的行的特定百分比,诸如20%。因此,决策点可以是在从表中检索出特定数量的行之后并且确定满足谓词的行的百分比是否大于阈值百分比。因此,在决策点的值可以是表示实际出现的值(例如,由统计数据收集器读取的十行)或者是表示估计出现的值(例如,统计数据收集器正在读取二百行的过程中,尽管到目前为止只读取了三十行)。
在自适应位图修剪的环境中,成本估计器可以应用一个或多个试探来确定是否要基于对应谓词的选择性修剪位图连接。用于谓词的示例试探可以是35%的选择性,其中任何高于35%的选择性都指示对应于该谓词的位图连接要被修剪。
另一种为决策点确定值的技术涉及成本估计器利用在决策点的不同的值为自适应计划生成多个估计成本。例如,在自适应计划200中,成本估计器生成(1)在其中“左侧”子计划被选择并且来自表扫描运算符210的行数是一百的情况下执行自适应计划200的成本,以及(2)在其中“右侧”子计划被选择并且来自表扫描运算符210的行数是一百的情况下执行自适应计划200的成本。成本估计器重复(1)和(2)一次或多次,但是对来自表扫描运算符210的行数具有不同的“测试值”。
拐点
成本估计器可以重复(1)和(2),直到“拐点”被确定。拐点是统计数据或优化器估计的边界值,其中,低于该值时,选择一个子计划,高于该值时,选择不同的子计划。为决策点确定的拐点可以是对于那个决策点的多个可能拐点之一。当两个估计都指示一个子计划比另一个子计划“更便宜”时,成本估计器可以重复(1)和(2),直到其中一个估计指示一个子计划更便宜而另一个估计指示另一个子计划更便宜。
因此,可以为相同的自适应计划生成多个估计的执行成本。作为对照,成本估计器为执行整个执行计划只计算了单个估计成本。
作为另一个例子,在自适应计划300中,成本估计器生成(1)在其中位图连接326被执行,满足对应谓词的行的百分比是10%,并且没有执行散列连接340的情况下执行自适应计划300的成本,及(2)在其中位图连接326未被执行,满足对应谓词的行的百分比是10%,并且散列连接340被执行的情况下执行自适应计划300的成本。成本估计器重复(1)和(2)一次或多次,但是对满足对应谓词的行的百分比具有不同的值。
自动重新优化
在实施例中,在查询的执行计划的执行期间,信息被收集,并且该信息被用来改善相同或等效(不论是语法上还是语义上)查询的将来执行。收集信息并在相同或等效查询的后续执行中利用该信息的过程在本文被称为“自动重新优化”。因此,自适应计划执行针对查询的当前执行,而自动重新优化针对查询(或等效查询)的一个或多个后续执行。查询的第一执行可能已被完全执行或部分执行。
存在可以在运行时被收集并在重新优化中被使用的多种类型的信息。例子包括表的基数、连接的基数、分组(group by)的基数、索引的基数、不同值的数量、最大值、最小值等。每个这些类型的信息都可以被本文所述的统计数据收集器收集。
图4是描绘实施例中用于自动重新优化的过程400的流程图。过程400的部分可以由查询优化器(或查询编译器)执行,而过程400的其它部分可以由查询执行器执行。
在方框410,关于已为特定查询生成的第一执行计划确定估计的成本。估计的成本可以关于被处理的行数、被执行的磁盘访问的次数、被执行的比较的次数,执行查询所需的机器周期数、执行查询所花的时间,其组合,或者未列出的其它因素。
估计的成本可以是执行整个执行计划的估计或者执行该执行计划的一部分,诸如执行计划的一个操作,的估计。因此,统计数据收集器可以包括在执行计划中的许多地方,诸如在每个运算符之后,以便收集尽可能多的信息。这种收集到的信息的所有(至少一部分)可以在下一次接收到类似查询时被反馈到查询优化器。
在方框420,执行第一执行计划(或者其一部分)。在执行期间,可以触发一个或多个统计数据收集器来计数第一执行计划中一个或多个运算符导致的行数。
在方框430,确定执行第一执行计划(或者其一部分)的实际成本。例如,确定在第一执行计划的执行期间被处理的行的总数。作为另一个例子,确定在每个操作期间被处理的行数。因此,可以确定在执行计划中多个级别或阶段的统计数据信息。
第一执行计划的一个或多个部分可以并行地执行。例如,八个从属过程可以参与扫描特定表的不同部分。在实施例中,确定执行查询的实际成本涉及聚合(aggregating)关于由多个从属过程执行的工作的信息。例如,如果第一从属过程从表中读取一百行,第二从属过程从该表中读取二百行,并且第三从属过程从该表中读取一百八十行,则读取该表的实际成本可以反映为四百八十行。
在方框440中,确定实际成本是否与估计成本明显不同。例如,执行整个第一执行计划的实际成本可以与执行整个第一执行计划的估计成本进行比较。作为另一个例子,执行第一执行计划的特定子部分的实际成本与执行第一执行计划的该特定子部分的估计成本进行比较。作为另一个例子,进行多个比较,其中(1)执行第一执行计划的第一部分的实际成本与执行该第一部分的估计成本进行比较并且(2)执行第一执行计划的第二部分的实际成本与执行该第二部分的估计成本进行比较。
如果实际成本与估计成本明显不同,则过程400前进到方框450。可以使用一个或多个试探来确定实际成本是否与对应的估计成本明显不同。例如,如果实际成本大于估计成本的两倍,则过程400前进到方框450。例如,如果多个实际成本中只有一个与对应的估计成本明显不同或者如果特定数量的实际成本与对应的估计成本明显不同,则过程400可以前进到方框450。
在方框450,用于特定查询的指示器标记为“重新优化”。这种“标记”可以包括将数据与该指示器相关联,其中数据指示与(在方框410接收到的)特定查询相同或等效的后续查询要被(或者被推荐)重新优化或重新编译以生成与第一执行计划不同的执行计划。进入方框450表明为了对于与该特定查询相同或等效的后续查询减少重新执行第一执行计划的成本而生成另一执行计划的增加成本可能是值得的。
随后,当接收到可能使用该指示器的第二查询时,该数据可以被读取并且,作为响应,查询优化器确定解析或编译第二查询以生成第二执行计划。第二执行计划可以与第一执行计划非常不同,诸如包括不同类型的连接和/或不同的连接顺序。
在实施例中,在第一执行计划的执行期间确定的执行信息可以存储在指示器中(或者与其相关联存储)。这种执行信息的例子是执行在第一执行计划中指示的一个或多个操作的实际成本。然后,在为与特定查询相同或等效的后续查询生成第二执行计划之后,为执行第二执行计划(或者其一部分)估计成本。估计的成本可以基于在第一执行计划的执行期间确定的执行信息。例如,如果第一执行计划涉及在表扫描期间应用特定的谓词并且该操作在第二执行计划中被指示,则在第一执行计划期间执行该操作的实际成本可用来估计执行第二执行计划的总成本。
当第二执行计划被生成时,查询优化器可以确定第二执行计划是否与第一执行计划相同。如果第二执行计划与第一执行计划相同,则查询优化器可以生成不同的执行计划,并且为其生成一个或多个估计成本。
如果在重新优化期间生成多个执行计划,则查询优化器可以仍然选择相同的执行计划。因为不能保证任何其它的执行计划比第一执行计划更优,所以,甚至在查询优化器利用更新后的统计数据为每个执行计划生成估计成本之后,这种场景也是可能的。
在实施例中,如果特定查询包括与第二查询的对应绑定值不同的绑定值,则方框450涉及确定这些绑定值是否“足够相似”。如果是,则在第一执行计划的执行期间收集的统计数据可被用来生成执行第二执行计划的成本。例如,查询优化器可以确定绑定值的选择性是否相对类似。例如,如果存在大致相同数量的软件工程师和销售代表,则包括对软件工程师的谓词的第一查询和包括对销售代表的查询的第二查询可以产生大致相似的结果。否则,如果绑定值不足够相似,则在第一执行计划的执行期间所收集的和在特定查询中涉及该绑定值的一个或多个统计数据将不在重新优化过程中使用。这表明,因为绑定值足够不同,所以用第一执行期间所收集的统计数据对于估计执行第二查询的成本是不可靠的。
如果没有进入方框450,则如果接收到与特定查询相同(或等效)的另一个查询就重用第一执行计划。响应于方框440中的否定决定(即,实际成本不与估计成本明显不同),可以将数据存储在用于特定查询的指示器中。该数据表明,当接收到可以使用该指示器的后续查询时,不需要重新优化。
自动DOP和时间反馈
在实施例中,基于执行查询或用于该查询的执行计划的一部分所需的估计时间,查询优化器为查询计算并行化程度(degree of parallelism,DOP)。例如,如果查询优化器确定将花费四十秒执行查询,则查询优化器使得(40秒/每个从过程10秒)四个从过程(slave)执行对应的执行计划(或者其不同部分)。
在实施例中,基于从执行查询(即,在运行时)确定的执行统计数据,时间信息可以被反馈到查询优化器中,这会导致查询优化器重新解析该查询。有两种类型的时间反馈。根据一种类型的时间反馈,如果查询在第一次运行的总执行时间超过并行化阈值(例如,10秒),则查询的指示器被标记为重新解析,并且还迫使相同查询的后续运行使用并行模式。并行化阈值用来确保对于特定的快速执行查询为了时间节省并行化查询的开销得不偿失。因此,在第一执行时串行运行的与指示器相关联的执行计划可以在该执行计划的一个或多个后续执行中并行运行。
根据另一种类型的时间反馈,在查询执行结束时,用于每个操作的执行时间可以从计划中的统计数据收集器(或者每个统计数据收集器)得到。操作的执行时间可以基于一个或多个因素来反映,诸如执行该操作所需的CPU量、在该操作期间执行的缓冲区获取(get)的数量,以及执行该操作所经过的时间。
基于操作的实际执行时间,得出可用于该操作的理想的并行化程度(DOP)。可以基于对查询应该运行多长时间的估计而得出DOP。例如,如果目标是使每个查询都在十秒钟之内完成,则串行地花费六十秒的查询将需要DOP至少为六。但是,如果查询中的一些操作不能被并行化,则对于查询的其余部分需要更高的DOP以使整个查询用十秒种执行。因此,每个操作的执行时间在导出DOP时是有用的。因此,来自一个执行的执行统计数据被反馈到查询优化器,以便改善DOP计算。
然后,将理想的DOP与估计的DOP进行比较。如果存在不匹配(例如,估计的DOP位于0.5*理想的DOP和2*理想的DOP的窗口之外),则利用可以被查询优化器用来生成估计的“暗示”,将操作的实际执行时间“反馈”到指示器中。在指示器的第二执行过程中,在该暗示中指示的实际执行时间用来计算DOP。这种方法解决了低估和高估运算符的DOP的问题。
飞行中(IN-FLIGHT)重新优化
在实施例中,基于在运行时收集到的统计数据,对查询的执行计划的执行在执行计划被完全执行之前终止。然后,查询被重新优化,或者重新编译,以生成不同的执行计划。这种终止和重新优化在本文中称为“飞行中重新优化”。例如,在运行时收集的统计数据信息在运行时与在编译期间确定的估计的统计数据相比较。如果这两组统计数据明显不同,则停止执行计划的执行并生成新的执行计划。例如,如果在运行时确定对表扫描应用谓词导致了10,000行,而在编译时只估计了100行,则执行计划被终止。
是否终止查询执行的决定可以基于一个或多个其它因素,诸如执行计划中仍然要执行的操作数量、执行这些操作的估计成本等等。
附加地或作为替代,在运行时,查询优化器可以利用在运行时生成的统计数据重新计算执行一执行计划的估计。因此,如果对执行计划中“早期”操作的估计与所述早期操作的实际成本明显不同,则重新计算执行该执行计划总成本估计会产生比用于执行不同的执行计划的重新计算的总成本估计小的估计成本。如果估计另一个执行计划相对于该执行计划的更新后的总成本估计具有较低的总成本(基于在该执行计划运行时收集的统计数据)(或差异“足够明显”),则可以终止该执行计划而启动另一个执行计划。
统计数据
可以对数据库对象,诸如表、视图和索引,收集多种类型的统计数据。示例统计数据包括指示列中所存储的各个值的分布、列中的不同的值的数量、各种查询中的绑定值,以及各种谓词的选择性的直方图,这些可以涉及一个或多个多列。
可以以许多不同的方式收集统计数据。一些统计数据可以在查询处理的编译阶段收集(称为“动态采样”)。一些统计数据可以在查询的执行期间收集(称为“动态统计数据”)。一些统计数据可以在没有查询(至少没有包括对应于该统计数据中的任何一个的操作的查询)被处理时收集(称为“静态采样”)。
一种用于存储统计数据的方法涉及在指示器中(或与指示器相关联地)存储统计数据,其中指示器包括统计数据适用的执行计划。例如,执行动态采样来为特定的查询生成一组统计数据。这组统计数据被用来估计执行用于该特定查询的一个或多个执行计划的成本。这组统计数据可以存储在存储所述一个或多个执行计划(或与其相关联的)的指示器中。作为另一个例子,动态统计数据在查询的执行期间收集。如果启用了指示器共享,则指示器被保持一段时间。但是,随着时间的推移,如果指示器没有被足够频繁地使用,则该指示器会从指示器缓存中“老化排除”。因此,所有存储在该指示器中(或与其相关联)的统计数据将丢失。
在另一种方法中,统计数据被永久地储存并且可以由查询优化器访问并且,因此,对所有将来的查询执行可用。但是,这种方法需要大量的存储和复杂的存储技术,以便相关的统计数据在后续的查询中能被识别和使用。另一个缺点是一些统计数据只对于短时间段相关。利用无关的或“陈旧的”统计数据会使查询付出甚至更不准确的代价。此外,确定哪些统计数据“陈旧”可能很难。因此,自动老化排除不相关的统计数据可以被证明很难。
在实施例中,只有一些在执行期间收集的统计数据被永久地存储并且被其它查询赖以确定执行查询的成本,甚至那些与为其生成统计数据的查询非常不同的查询。换句话说,即使不存在能用于第一查询和第二查询两者并将产生有效结果的执行计划,在第一查询的执行期间所收集的统计数据也可被用来估计执行第二查询的成本。
计划指令(directive)
在实施例中,只有操作的实际成本(例如,与操作相关联的基数)与该操作的估计成本明显不同时,才存储在执行计划的执行期间收集到的统计数据。这种发生情况在本文被称为“错误估计”。例如,如果第一查询包括关于表扫描的过滤操作并且过滤操作产生超过一千行,而只估计了作为执行过滤操作的结果要产生五十行,则可以创建并存储识别过滤操作中所涉及的表和一个或多个列的“计划指令”。
“计划指令”是指示关于错误估计的信息的数据。由于错误估计涉及一个或多个数据库对象和操作,因此计划指令识别数据库对象(例如,索引或表)以及,可选地,与错误估计相关联的操作。例如,计划指令可以识别表的两列。这种计划指令指示操作涉及两列的错误估计,诸如关于两列的谓词。作为另一个例子,计划指令可以指示连接(以及,可选地,连接的类型)并且识别该连接中涉及的两个表。这种计划指令指示存在涉及两个表的连接的错误估计。
在实施例中,计划指令不包括其执行触发该计划指令的创建的那些查询的任何绑定值或谓词。例如,如果为销售表和顾客表的连接创建了计划指令并且谓词是“customer.location='CA'”,则计划指令不包括该谓词。相反,该计划指令只识别一个或多个数据库对象以及,可选地,对这一个或多个数据库对象执行的操作(例如,扫描、过滤、连接)。以这种方式,计划指令可以跨具有相似构造的多个查询语句使用。例如,利用“customer.location=‘CA’”的查询和利用“customer.location='NY'”的另一个查询可以使用相同的计划指令。
计划指令可以存储在查询优化器可以访问的储存库中。具体而言,计划指令可以存储在该储存库的字典表中。储存库相对于查询优化器而言可以是本地的或远程的。计划指令可以基于该计划指令中所反映的信息来存储。例如,识别第一个表的所有计划指令都存储在第一文件(或第一个表)中,而识别第二个表的所有计划指令都存储在第二文件(或第二个表)中。因此,计划指令可以存储在多个文件(或位置)中。由于以这种方式组织计划指令,因此查询优化器可以在查询优化期间只访问一个或两个文件(或表)。
随后,响应于接收到第二查询,查询优化器检查储存库,以确定是否任何计划指令与查询中指示的操作相关。计划指令可以在查询编译之前或期间被加载到本地(即,相对于查询优化器)的高速缓存中。如果是,则可以基于计划指令的状态执行不同的动作。
计划指令状态
在实施例中,计划指令与多种可能状态之一相关联。计划指令的状态指示响应于由该计划指令指示的错误估计已经执行了什么动作和/或什么动作可以由查询优化器来执行。
示例状态包括“NEW”,“MISSING STATS”,“HAS STATS”和“PERMANENT”。其它实施例可以包括更少或更多的状态。
当创建计划指令时,计划指令的状态可以设为“NEW”,指示该计划指令是新的。因此,触发计划指令创建的错误估计可能在之前或至少在一定的时间段内还未被确定。
随后,当查询被分析并且生成一个或多个候选执行计划时,查询优化器识别候选执行计划中的一个或多个数据库对象(例如,索引、表等等),并确定是否存在相关的计划指令。查询优化器可以为在候选执行计划中识别出的每个操作执行这种分析。当其被执行时,每个操作对一个或多个数据库对象操作。这一个或多个数据库对象的身份被用来识别一个或多个相关的计划指令。
如果计划指令的状态是“NEW”,则查询优化器确定是否存在用于由该计划指令识别的数据库对象的统计数据。统计数据可以存储在多个位置中的一个,诸如在定义由该计划指令识别的表的属性的表定义中。如果统计数据可用,则查询优化器使用该统计数据来生成执行候选执行计划(或者其一部分)的成本估计,并且将计划指令的状态从“NEW”变为“HAS STATS”。否则,查询优化器将计划指令的状态从“NEW”变为“MISSING STATS”并且可以执行动态采样,以便生成用于执行候选执行计划(或者其一部分)的成本估计。
如果查询优化器确定计划指令的状态是“MISSING STATS”,则查询优化器可以执行动态采样,以便生成用于执行候选执行计划(或者其一部分)的成本估计。
在实施例中,计划指令可以被分析,以识别与“MISSING STATS”状态相关联的计划指令。这种分析可以定期执行(例如,每24小时),或者响应于某些事件而执行,诸如检测到数据库服务器或数据库系统上相对低的工作量。当与“MISSING STATS”状态相关联的计划指令被定位时,数据库进程为在计划指令中识别出的数据库对象生成统计数据。例如,如果计划指令识别表的两列,则数据库进程分析这两列并为这两列的组生成统计数据,诸如每列中不同的值的数量和/或每列中不同的值的直方图。一旦为在计划指令中识别出的数据库对象生成了统计数据,计划指令的状态就从“MISSING STATS”变为“HAS STATS”。
如果查询优化器确定计划指令的状态为“HAS STATS”,则查询优化器检索关于在计划指令中识别出的数据库对象的预先计算的统计数据。例如,列组统计数据可以被检索并用来生成执行候选执行计划的估计成本。因此,代替执行动态采样,查询优化器利用用于数据库对象的统计数据。
在实施例中,如果(1)计划指令的状态是“HAS STATS”,(2)查询优化器使用预先计算的统计数据生成估计,及(3)在执行期间,为在计划指令中识别出的相同数据库对象确定错误估计,则状态从“HAS STATS”变为“PERMANENT”。作为替代,在为与“HAS STATS”相关联的计划指令确定两个或更多个连续的错误估计之后,可以发生从“HAS STATS”到“PERMANENT”的转变。如果没有为在计划指令中识别出的数据库对象确定错误估计,则由于预先计算的统计数据被认为是“准确的”或足够准确,因此计划指令的状态可以保持“HASSTATS”。
如果查询优化器确定计划指令的状态是“PERMANENT”,则,即使可能存在用于在计划指令中识别出的数据库对象的预先计算的统计数据,查询优化器也执行动态采样。“PERMANENT”状态通知查询优化器不应当使用相关的预先计算的统计数据(诸如列组统计数据)。换句话说,忽略关于计划指令中识别出的数据库对象的任何预先计算的统计数据。
执行计划中的多个错误估计
在实施例中,如果作为执行计划的执行结果确定了多个错误估计,则用于错误估计的计划指令只在如果该错误估计对应于不依赖于对其存在错误估计的另一个操作的操作时才创建。例如,可以为关于表的一组一个或多个列确定第一错误估计并且可以为需要这组一个或多个列的连接操作确定第二错误估计。有可能第二错误估计可以由于第一错误估计。因此,为第一错误估计但不为第二错误估计创建计划指令。
删除计划指令
由于许多错误估计会随着时间的推移在许多不同的列或表上发生,因此会创建大量的计划指令。在实施例中,检查计划指令,以便删除。这种检查可以定期执行(例如,每24小时),或者响应于某些事件而执行,诸如系统重启或软件更新。
可以使用一个或多个删除标准来确定是否要删除计划指令。一个示例标准可以是计划指令是否是相关的。例如,在指示连接并识别两个表的计划指令被创建之后,这两个表之一被删除。因此,该计划指令不再相关并且可以被删除。作为另一个例子,在识别表的两列的计划指令被创建之后,其中一列被丢弃(drop)。因此,该计划指令不再相关并且可以被删除。
另一个示例标准是计划指令是否已与同一状态相关联特定的时间段而没有变化或者在优化阶段中被查询优化器检查多次之后状态一次都没有改变。例如,如果计划指令已经与“HAS STATS”相关联超过两个星期,则该计划指令可以被删除。
另一个示例标准是从计划指令的最近使用开始是否已过去特定的时间段。例如,如果计划指令在最近24小时或一年内未被使用,则该计划指令可以被删除。为了做出这种确定,计划指令可以与指示当编译查询时使用计划指令的最近时间的时间戳相关联。如果当前时间与计划指令的时间戳之差大于特定的阈值,则删除该计划指令。该特定的时间段可以基于用户输入被修改。
统计数据加载
关于数据库对象的统计数据可以在不同的时间生成。例如,在创建表之后,数据库进程可以定期地(诸如每24小时)扫描表的每一列,并且为每一列生成统计数据。作为另一个例子,诸如数据库管理员(DBA)的用户可以提交指定或至少指示数据库对象并且,在被执行时,使得为该数据库对象生成统计数据的数据库语句(statements)或脚本。
统计数据可以处于不同级别的粒度,诸如基于表或基于列。示例统计数据包括表中的行数、列中不同值的数量、列中的最大值、列中的最小值、直方图、空(null)值的数量,以及平均列长度。
在实施例中,当数据被加载到数据库对象中时,关于该数据库对象自动地收集统计数据。例如,数据库语句可以是以下之一:
第一个示例语句是DDL(数据定义语言)语句。第二个示例语句是DML(数据操作语言)语句。这两个示例语句在被执行时导致执行批量加载操作。在这两个示例语句的执行期间,当数据从表T2加载到表T1中时,为T1收集统计数据。例如,指示T1中的行数的行计数可以对每个从T2插入到T1中的行递增。作为另一个例子,对T1的每一列可以存在列最大值变量并且将其与每个从T2插入到T1的对应列值进行比较,以确定用于该列的列最大值变量是否应当被更新。
这种方法的好处是,在表创建或插入之后,不需要对新创建的或更新的表进行单独的表扫描以生成用于该表的一个或多个统计数据。这种方法的另一个好处是,不需要指定收集指令的明确用户输入来启动统计数据收集。
在实施例中,如果明确的收集统计数据指令跟在创建表(create table)语句或插入(insert into)语句之后,则做出关于哪些统计数据缺失的决定,并且,如果有任何统计数据缺失(或陈旧),则收集那些统计数据。例如,如果确定索引统计数据和直方图缺失,则收集那些统计数据。但是,不收集在批量加载操作过程中已收集的表统计数据和基本列统计数据,因为那些统计数据并没有丢失(或陈旧)。
分区的表
也可以利用与上述相似的数据库语句填充表分区,诸如:
在实施例中,在这种数据库语句执行期间对分区T1_P1自动地收集统计数据,而无需数据库语句中的明确指令来执行收集统计数据操作。
增量
在实施例中,表分区用增量模式进行维护。在增量模式下,表分区与本文中被称为“提要(synopsis)”的辅助数据结构相关联。提要是表分区中不同值的统一样本。提要可被用来在全局(或表)的级别得到多个不同的值。
在增量模式下,如果收集统计数据操作针对表并且关于表的一个分区统计数据已经可用,则不再为那个表分区收集统计数据。还有,关于表的统计数据可以基于用于每个表分区的统计数据得出。例如,表被分成TP1、TP2和TP3并且已为TP1和TP2生成了统计数据。如果收集统计数据操作针对该表,则TP3被读取,以生成统计数据,但是不读取TP1和TP2。此外,可以通过组合来自TP1、TP2和TP3中每一个的统计数据为该表生成统计数据。
在实施例中,未分区的表可以以增量模式进行维护。例如,表包括一千行并且已关于该一千行收集到了统计数据。响应于接收将另一千行插入到该表中的DML语句,对插入的这一千行收集统计数据。然后,基于(1)用于第一个一千行的统计数据和(2)用于第二个一千行的统计数据来确定关于整个表的统计数据。以这种方式,不需要再次读取第一个一千行以生成用于整个表的更新的统计数据。
全局临时表
数据库系统可以并发地支持多个会话。会话是客户端和数据库服务器实例之间的特定连接。一个或多个服务器实例可以在数据库系统的单个节点上执行。每个节点都连接到一个或多个非易失性存储设备。
全局临时表(global temporary table,GTT)是可以被多个会话查看但是可以对每个会话包含不同数据集的表。因此,GTT是会话私有的。而且,尽管GTT具有持久的定义,但是GTT中的数据不是持久的。当会话被关闭时,GTT中用于那个会话的数据被删除或丢失。GTT的另一个特征是没有为GTT中的数据生成重做(redo)信息。
私有统计数据
维持关于GTT的统计数据的一种方法是跨会话共享统计数据。但是,在一个会话中收集到的统计数据会导致另一个会话中的次优计划。例如,第一会话中的GTT可以具有一百行,而第二会话中的GTT可以具有一千行。如果GTT的在第一会话中的统计数据与通过第二会话接收查询的查询优化器共享,则基于指示该GTT只有一百行的统计数据,查询优化器会使用该统计数据来生成次优的执行计划。为了避免这个问题,用户(例如,DBA)可以或者为用户查询强制动态采样或者为用户会话中的表设置统计数据。但是,这两种变通方法(workaround)是手动并繁琐的。
在实施例中,GTT支持会话私有的统计数据。换句话说,全局临时表对每个会话具有一个版本的统计数据。因此,查询优化器依赖于在其中发出或提交查询的会话中已经生成的GTT统计数据。这种方法减轻了用户对涉及GTT的查询的任何特殊处理。私有会话统计数据可以存储在易失性存储器中。
私有指示器
如前面所指出的,指示器可以被多个查询“共享”。如果与指示器相关联的(或存储在其中的)执行计划可被用来为查询生成有效的结果,则多个查询可以共享同一指示器。
在实施例中,指示器与会话识别数据相关联,并且该数据随后被用来确定指示器是否可以被共享。例如,第一查询被分析(例如,被查询优化器)并且,如果确定第一查询针对GTT,则创建会话识别数据并存储在第一查询的指示器中。会话识别数据唯一地识别其中发出第一查询的会话(至少相对于并发执行或者可能在GTT的存在期间执行的其它会话)。随后,当接收到第二查询时,确定第二查询属于哪个会话。所确定的会话与和指示器相关联的会话数据(并且可选地,与彼此“可共享的”指示器的会话数据)进行比较。如果第二查询的会话不同于第一查询的会话,则该指示器不能与第二查询共享。
如果查询不针对GTT,则不与为该查询生成的指示器相关联地存储会话识别数据。因此,该指示器可以在任何会话中被共享。
无需提交的(commit free)统计数据收集
用于收集统计数据的一种方法涉及在诸如硬盘的持久性储存器中存储统计数据。统计数据可以被持久地存储在字典表中。将统计数据存储到永久性储存器是通过提交(commit)语句触发的。
在实施例中,当为GTT收集统计数据时,不使用提交语句。如果用于GTT的统计数据只存储在存储器中,则使用这种方法。提交语句将使得统计数据被存储在持久性储存器中。由于用于GTT的统计数据关于特定会话是私有的,因此统计数据与任何其它会话都不相关。因此,用于GTT的统计数据不需要存储在持久性储存器中。
统计数据收集
如前面所指出的,可以为诸如表和索引的不同数据库对象生成或收集统计数据。统计数据收集可以自动地或响应于用户输入,诸如来自DBA的输入,而执行。例如,统计数据收集可以每24小时或响应于一个或多个事件的发生而执行,其中事件诸如检测到对某些资源(例如,CPU、易失性存储器、网络I/O)的资源利用率低于某个阈值。虽然统计数据可以为除表之外的其它数据库对象(例如,索引或分区)收集,但是下面的描述是在表的环境中。
在一些情况下,确定要为多个表收集统计数据。这多个表可以在用户输入中或自动地识别。响应于确定要为多个表收集统计数据,数据库服务器使得为列表中的每个表执行统计数据收集操作。用于执行统计数据收集操作的一种方法是顺次扫描并为列表中的每个表生成统计数据。这种串行方法可能花费相当大量的时间并且没有利用强大系统中的大多数系统资源。此外,如果“前面的(earlier)”的表相对较大并且,因此,关于该表的统计数据收集花费相当大的时间量,则对每个“后续”表的统计数据收集基本上不得不一直等到为前面的表完成收集统计数据。
并发统计数据收集
在实施例中,创建了多个计算机作业或任务(例如,过程)并且为每个计算机作业指派多个表中的不同表。计算机作业负责执行指派给它的任务,该任务就是为一个或多个表收集统计数据。每个表都可以在用户提供的单个列表中识别。作为替代,每个表都可以已经被自动地识别为用于统计数据收集的候选表。
因此,如果有三个表要扫描,则可以创建三个计算机作业。然后,可以安排每个计算机作业并行地执行,诸如在多核计算机系统中,其中每个计算机作业由不同的CPU执行。因此,可以并行地为每个表收集统计数据。计算机作业可以在不同的会话中执行。
这种并行方法的一个优点是用户不必为用户期望并行收集统计数据的每个表指定不同的收集统计数据指令或脚本。
在实施例中,如果表被分成多个分区,则创建多个计算机作业,每个计算机作业被指派表的一个或多个分区。这多个计算机作业可以并行地执行。如果启用了增量统计数据收集,则在每个计算机作业完成时作出确定。在确定多个计算机作业中的每一个完成之后,另一个计算机作业(或者多个计算机作业之一)被指派任务,以便基于作为每个执行的计算机作业的结果而收集的分区统计数据收集“全局”统计数据,或者说用于整个表的统计数据。因此,收集用于表的统计数据可以涉及聚合或组合来自表的每个分区的统计数据,而无需从表中读取任何数据。
批处理
用于为多个数据库对象(例如,表和/或分区)收集统计数据的一种方法涉及为每个数据库对象创建计算机作业,而不考虑对象的大小或者花多长时间为数据库对象收集统计数据。但是,这种方法可能是低效的,因为分配计算机作业并将其指派给数据库对象所需的资源与关于分区收集统计数据所需的资源相比而言可能高,尤其是如果该分区相对小的话。例如,如果表具有一千个分区并且为每个分区创建计算机作业,则可能浪费许多计算机资源(诸如每个计算机作业所需的存储器和CPU)。
在实施例中,用于收集统计数据的单个计算机作业被指派有多个数据库对象。换句话说,单个计算机作业负责为多个数据库对象收集统计数据。这种方法被称为“批处理”。例如,一个计算机作业被指派给表的多个分区,而另一个计算机作业被指派给表的另一分区。
基于关于数据库对象的信息,为单个批次或计算机作业选择数据库对象。例如,确定多个数据库对象中每一个的大小并且基于数据库对象的子集中每个数据库对象的大小将数据库对象的子集指派给单个作业。批处理的一般原则可以是将相对小的一些数据库对象指派给同一计算机作业,而相对大的数据库对象可以指派给其自己的计算机作业。例如,三个表分区P1、P2和P3分别具有以下尺寸:7MB、11MB和20MB。尺寸可以基于存储分区(或表)的数据所需的块的数量来估计。例如,一种试探可以是一千块花费大约一秒钟执行统计数据收集。分区P1和P2被指派给同一计算机作业,而分区P3被指派给另一个计算机作业。以这种方式,如果并发地执行,则计算机作业可以在大致相同的时间完成处理。否则,如果每个分区被指派给不同的计算机作业,则用于P1的计算机作业将很可能比用于P3的计算机作业明显更快地完成。
作为可用于批处理数据库对象的信息的另一个例子,确定与每个数据库对象相关联的预期或估计处理时间。用于数据库对象的预期或估计处理时间可以基于之前为数据库对象收集统计数据花费了多长时间。例如,如果上次为P1收集统计数据时为P1收集统计数据花费了两分钟,则可以确定将花费大约两分钟为P1再次收集统计数据。此外,当为数据库对象估计处理时间时,可以考虑自从上次为该数据库对象收集统计数据开始对该数据库对象所做改变的数量和类型(例如,插入、删除)。例如,如果在一个时间点花了三分钟为分区收集统计数据并且该分区从那时开始大小增加了一倍,则可以估计将需要大约六分钟为该分区收集统计数据。
在实施例中,基于为数据库对象收集统计数据的估计成本相对于与计算机作业相关联的开销的估计成本(例如,估计时间),将数据库对象指派给计算机作业。计算机作业的开销可以包括创建计算机作业和/或维护该计算机作业的成本。负责创建计算机作业的进程可以维护指示阈值百分比的变量,其中阈值百分比指示创建多个计算机作业所需的工作量相对于执行该计算机作业所需的工作量。工作量可以用时间、机器周期、存储器和/或磁盘I/O等表示。变量可以被标记为“job_overhead_percentage”。计算机作业可以特定于单个表的分区。作为替代,计算机作业可以用于不同的表和/或用于不同表的不同分区。例如,如果“job_overhead_percentage”是1%,则计算机作业开销应当占用不超过整体统计数据收集的1%。该变量可以具有缺省值并且可由诸如DBA的用户配置。
例如,如果估计为分区P1收集统计数据将花费大约两分钟并且为分区P2收集统计数据将花费大约一分钟,则作业创建和维护应当花费不超过(3分钟x 60秒/分钟*1%=)1.8秒。但是,如果估计作业创建和维护要花费大约2.5秒,则应当向该计算机作业指派另一个数据库对象或分区。估计要花费至少大约1.17分钟的第三分区可以被指派给该计算机作业,以便达到1%的阈值。创建和维护计算机作业的估计时间依赖于系统资源并且独立于指派给计算机作业的表和/或分区的数量。估计的时间可以在安装之后第一次运行期间为每个服务器计算指定。
死锁预防
创建用于收集统计数据的计算机作业的一种方法是为请求其统计数据(无论基于用户输入还是自动识别)的每个数据库对象创建计算机作业。但是,这样的方法会导致死锁。
例如,系统只有足够的资源同时支持两个计算机作业(J1和J2)。如果为两个表(T1和T2)创建了计算机作业并且每个表包括多个分区,则可以相对同时地创建两个表协调器(C1和C2),每个协调器用于这两个表之一。主协调器进程可以负责创建每个表协调器。在实施例中,作业调度程序与资源管理器程序一起工作,以确定何时创建计算机作业以及每次创建多少个计算机作业。这些程序与(程序在其上执行的服务器节点的)操作系统交互,以分配系统级的进程或线程。主协调器能够与每个表协调器通信。例如,主协调器可以向表协调器发送使该表协调器开始的开始消息。表协调器又可以向主协调器发送指示已发生问题、由该表协调器管理的所有计算机作业都已完成等等的消息。
每个表协调器负责为向其指派了该表协调器的表的每个分区(或分区组)创建计算机作业。在每个表协调器被指派计算机作业之后,每个表协调器将为其每个分区请求计算机作业并且一直等到它的请求被满足。表协调器还可以配置为与每个计算机作业通信,类似于主协调器和表协调器之间的通信。例如,表协调器也可以向分区计算机作业发送指示作业应当继续或者作业应当立即停止的消息,即使该作业尚未完成。作为另一个例子,指派给一个或多个分区的计算机作业可以向其表协调器发送指示该计算机作业已完成或者在计算机作业的执行期间发生了错误的消息。
返回到本例,在每个表协调器被指派计算机作业(例如,C1给J1并且C2给J2)之后,每个表协调器将为其每个分区请求计算机作业并且一直等到它的请求被满足。但是,因为已经存在两个正在运行的计算机作业(J1和J2),每一个用于表协调器之一并且系统只支持两个计算机作业,所以每个表协调器都将无限期地等待,并且将不执行统计数据收集。这是死锁场景的一个例子。
在实施例中,直到计算机作业已被分配或指派给与另一个协调器相关联的所有分区,用于诸如表的分区的数据库对象的协调器才启动。例如,直到T1的每个分区的计算机作业已分配或已开始,才为C2指派计算机作业。J2到C2的分配不必等到用于T1的分区的任何计算机作业完成。如果系统只支持两个计算机作业,则C2将不得不一直等到已经为T1的分区收集了所有的统计数据。如果系统支持超过两个计算机作业,则在已为T1的分区收集所有的统计数据之前,可以给C2分配计算机作业。例如,如果系统支持五个计算机作业并且T1具有两个分区(T1_P1和T1_P2),则在一个时间点,计算机作业可以指派给C1、T1_P1、T1_P2、C2和T2_P1(表T2的分区)中的每一个。
图5是描绘实施例中用于分配计算机作业以用于收集统计数据的过程500的流程图。在方框510,接收为两个或更多个分区的数据库对象执行统计数据收集操作的指令。
在方框520,为这两个或更多个分区的数据库对象之一分配计算机作业。
在方框530,为数据库对象的分区分配一个或多个计算机作业。例如,可以为数据库对象的所有分区分配一个计算机作业。作为替代,可以为数据库对象的不同分区分配多个计算机作业。例如,可以为表T1的分区P1-P3分配第一计算机作业,并且为表T1的分区P4分配第二计算机作业。
在方框540,确定是否存在作为统计数据收集操作的一部分要为其收集统计数据的任何更多的数据库对象。如果存在,则过程500前进到方框550。否则,过程500可以结束。
在方框550,确定是否(1)已为数据库对象的所有分区分配了计算机作业以及(2)有可用的计算机作业可分配给两个或更多个分区的数据库对象中的第二数据库对象。方框550可以连续地、定期地或者响应于某些事件而执行,其中事件诸如检测到一个或多个计算机作业已经或可以被解除分配。如果两个确定都为真,则处理500前进到方框520。
在可替代的实施例中,方框540在方框550之后执行。例如,如果方框530只对特定的统计数据收集操作执行了一次,则对于该特定操作的方框550的第一次执行,方框550可以在方框540之前执行。否则,对于该特定操作的方框540的每次后续执行,方框540在方框550之前执行。
如前面所指出的,分区的表可以增量模式维护。在实施例中,如果表以增量模式进行维护,则收集“全局”统计数据(即,为整个表)的计算机作业直到已经为该表中的每个分区收集了统计数据才启动。如果表不是以增量模式进行维护,则收集“全局”统计数据(即,为整个表)的计算机作业可以与为表的一个或多个分区收集统计数据的一个或多个计算机作业并发地运行。
直方图
直方图是可以为数据库对象或者其一部分,诸如表或者表的列,收集的一类统计数据。直方图指示数据库对象中值的分布。值的分布可以是均匀的,这意味着多个值中的每个不同值有大约相同的数量。例如,如果列只包含值1,1,2,2,3,3,4和4,则分布是均匀的。这个集合中不同值的数量是四并且每个不同值的频率是二。
直方图的准确性对选择性估计很重要。如果查询优化器检查直方图来确定查询中特定值的选择性并且该直方图关于特定值的频率是不准确的,则查询优化器可能选择次优的执行计划。
频率直方图
直方图可以以多种方式之一来实现。一种类型的直方图是“频率”直方图,它为集合中每个不同的值指示该不同值的频率。每个不同的值-频率对被称为桶(bucket)。因此,频率直方图具有与不同值的数量相同数量的桶。频率直方图中的桶或不同的值可以基于它们各自的桶值来排序。
高度平衡的直方图
另一种类型的直方图被称为“高度平衡的”直方图。高度平衡的直方图是包括少于不同值数量的桶数量的直方图。例如,如果有十个桶和一百个不同的值,则创建高度平衡的直方图。高度平衡的直方图中的每个桶对应于相同数量的(或大致相同数量)的值。例如,如果有七个值和三个桶,则两个桶将对应于两个值并且另一个桶将对应于三个值。
高度平衡的直方图为桶的每个端点指示对应于或属于该桶的特定值。桶具有两个端点。每个桶可以与另一个桶共享至少一个端点。例如,如果列中的值是1,2,2,2,2和3,并且有两个桶,则值1,2,和2属于第一个桶并且值2,2,和3属于第二个桶。第一个桶的左端点指示“1”,第一个桶的右端点和第二个桶的左端点指示“2”,并且第二个桶的右端点指示“3”。因此,三个值可被用来表示列中的六个值。当列中不同值的数量明显大于直方图中桶的数量时,则直方图将包含相对于列中所有不同值较少数量的不同值。
高度平衡的直方图的一个方面是“频繁”值与多个桶相关联。例如,如果数据集中的值是1,2,2,2,2,2,2,2,3,3和4,并且有三个桶,则第一个桶将具有端点“1”和“2”,第二个桶将具有端点“2”和“2”,并且第三个桶将具有端点“2”和“4”。换句话说,在高度平衡的直方图中,频繁的值“溢出”到多个桶中。
图6A是描绘基于数据集600的示例高度平衡的直方图610的框图,其中桶的数量为三。图6A还包括对应于桶端点的值612。值612包括1,2,2和4。高度平衡的直方图610不是完全准确的,因为,虽然存在是“1”和“4”的两倍的“3”,但值“3”没有被反映出来。而且,当值“2”的频率程度是值“1”和“4”的六倍时,高度平衡的直方图610暗示值“2”的频率程度只是值“1”和“4”的两倍。附近地或作为替代,因为“2”是全部三个桶中两个桶的端点,所以推测整个数据集的2/3由2组成。因此,在全部11个值中,2的个数是11*2/3~7。另一方面,“1”和“4”可以被标记为非流行的(因为它们没有作为两个或更多个桶中的端点出现);因此,可以为它们使用另一种度量(例如,“密度”),诸如(11-7)*1/3~1。
混合直方图
在实施例中,生成混合直方图并且是基于频率直方图的特征和高度平衡的直方图的特征。具体而言,混合直方图结合了高度平衡的直方图的空间节约特征和频率直方图的准确性,至少对于较流行的值是如此。
混合直方图包括多个桶,一个或多个(或每个)桶与频率信息相关联。桶的频率信息可以是对于桶的一个或两个端点的频率数。例如,如果一个值跨多个桶,则该值“折叠(collapsed)”,使得单个桶指示该值的频率。以这种方式,频繁的值就不会像在高度平衡的直方图的情况下那样“溢出”到其它桶中。
在相关的实施例中,桶的频率信息可以是累积的频率数,它指示先于该桶或包含在该桶中的值的总数。因此,如果数据集包括值1,2,2,2,2,2,2,3,3,3和3,并且有两个桶,则(1)第一个桶的第二个端点可以指示(a)表明有六个“2”的“6”和(b)表明第一个桶中有七个值的“7”,并且(2)第二个桶的第二个端点可以指示(a)表明有四个“3”的“4”和(b)表明在第一个和第二个桶中一共有11个值的“11”。
在相关的实施例中,桶包括这两种类型的频率信息:关于“落入”该桶中的特定值的实例个数的不同频率信息和关于在该桶中或之前桶中的值的总数的累积频率信息。
图6B是描绘实施例中基于数据集600的示例混合直方图620的框图。混合直方图620以至少三种方式包含比高度平衡的直方图610更多的信息:混合直方图620包含用于每个不同值的频率信息(即,“1”,“7”,“2”和“1”),混合直方图620指示值“3”作为端点以及混合直方图620包含用于多个端点的累积频率信息(即,“8”,“10”和“11”)。
在实施例中,只对高度平衡的方法中以其它方式将“溢出”到其它桶中的值(例如,混合直方图620中的“2”)维护频率信息。而且,在实施例中,如果没有为桶端点维护频率信息,则频率信息的缺少指示用于该桶端点的不同值的频率是一个或一些其它值或值范围,诸如“小于3”。
在实施例中,混合直方图中最终使用的桶数可以小于用于该混合直方图的原始桶数。这是由于混合直方图的“折叠”特征,其中不同值的所有实例都被指派给单个桶。在混合直方图620的情况下,值“4”可以已经指派给第二桶(连同两个“3”值一起)并且最后一个桶被除去。
在实施例中,代替减少桶的数量,要指派给桶的剩余的值可以“散开”。例如,在图6B中,在把“2”值指派给第一个桶之后,剩余的值的数量(即,三)用剩余桶的数量(即,二)去除,以获得不同的分布。最初,有十个值和三个桶,这意味着每个桶可以具有至少三个值。然而,由于所有的“2”值都指派给了第一个桶,因此剩余的桶将具有至多两个值。图6B是这种实施例的一个例子。
顶部-频率直方图
在实施例中,如果直方图中的桶的数量小于不同值的数量,则代替自动使用混合直方图方法,执行进一步的确定。该确定是关于数据集中顶部N个(N是桶的数量)最频繁的不同值相对于该数据集中的所有值多具有代表性。例如,如果顶部N个最频繁的不同值代表数据集中值的特定百分比(例如,99%),则创建频率直方图并且其它“不频繁的”不同值对于在频率直方图表示不够重要。其它“不频繁的”不同值的各自频率可以被假设为相对小,依赖于数据集的大小,诸如一个或十个。因此,所创建的频率直方图可以排除关于未被认为“足够频繁”的任何不同值的信息(例如,桶)。因此,如果N是50并且不同值的数量是75并且顶部50个最频繁的不同值代表数据集中所有值的至少特定百分比(例如,99%),则顶部频率直方图包括50个桶,每个桶用于顶部(依据频率)50个不同值中的一个。
该百分比代表性值(即,上例中的99%)可以是缺省值。此外或者作为替代,百分比代表性值可以由诸如DBA的用户设置。此外或者作为替代,百分比代表性值可以基于式子来确定,该式子把桶的数量作为输入并且把“百分数代表性值”作为输出。这种式子的一个例子是:百分比代表性值=[1-(1/N)]*100。
如果确定数据集中顶部N个不同值表示低于该数据集中所有不同值的百分比代表性值,则选择混合直方图,以便存储频率信息。
图7是实施例中用于确定要生成哪种类型的直方图的流程图700。在方框710,确定桶的数量并且确定数据集中不同值的数量。
在方框720,确定不同值的数量是否大于桶的数量。如果不是,则过程700前进到方框730,在那里,基于数据集生成频率直方图。如果是,则过程700前进到方框740。
在方框740,确定顶部N个不同值是否代表数据集中所有值的某个百分比。N可以等于桶的数量或者是某个其它数字,无论是缺省还是由用户选择的。如果在方框730中的确定是肯定的,则过程700前进到方框750,在那里,生成顶部频率直方图。否则,过程700前进到方框760,在那里,生成混合直方图。
不基于采样的直方图
用于从数据集建立直方图的一种方法是通过采样数据集。数据集,诸如表的列,可以被动态地(即,该直方图将用于其的查询的编译期间)或者当没有查询优化器在请求关于那个数据集的直方图时静态地采样。采样涉及读取数据集的一部分(例如,10%)并且把读出的部分插入临时表。然后,该临时表被分析,以收集统计信息,包括直方图。但是,这种方法可能导致不准确的直方图,尤其是如果采样的数据不代表为其生成直方图的值的整个群体时。
在实施例中,执行数据集的完全(或几乎完全)扫描。散列表被创建,其中该散列表的大小是有限的大小。散列表中条目的数量可以是用于直方图的桶的数量或者是某个其它值,这可以是缺省值或者基于用户输入设定的值。散列表中的每个条目对应于不同的不同值。对于数据集中每个被扫描的数据元素或值,散列值是基于被扫描的值生成的并且该散列值被用来查找散列表中的位置。
散列表中的每个条目指示频率值,该频率值指示映射到那个条目的不同值被读取并用来查找那个条目的次数。最初,散列表中的每个条目为空或者包含“0”值,这指示映射到那个条目的不同值尚未处理。如果基于散列值识别出条目,则该频率值递增。
在一些情况下,两个或更多个不同值可能被散列到散列表中的同一条目。为了考虑这种可能性,一个条目可以包括多个不同值-频率值对。
数据集(诸如表的一列中的所有值)被分为多个窗口,其中每个窗口对应于一定数目的值或行,诸如10,000。在扫描对应于窗口的数据之后,作出确定。该确定涉及确定散列表中是否存在任何“不频繁的”项或不同值。不频繁的不同值是频率小于M的不同值。M可以是缺省值或者由用户建立的值。不频繁的不同值是可能不值得为其保存直方图的不同值。散列表中对于每个不频繁的不同值的数据被删除或除去。
扫描数据集的第二个窗口。在第二扫描期间,如果在散列表中找到被扫描的值,则对应的频率值递增。如果在散列表中没有找到被扫描的值,则那个值的频率值设为M+1。把M添加到每个“新”值的频率的一个原因是假设该值在之前的窗口中已被认为是不频繁的并且可以具有频率M。在第二窗口被扫描之后,执行对不频繁的不同值的扫描和删除。在这个阶段,不频繁的不同值可以是其频率小于P的不同值,其中P可以大于M,诸如2*M。
这个过程对一个或多个附加的窗口重复。但是,代替把M添加到用于为空的散列条目的频率值,可以添加更大的值(例如,用于第三个窗口的3*M或者用于第四个窗口的4*M)。
在实施例中,非采样方法被用来生成频率或顶部频率直方图,而采样方法被用来生成混合直方图。
动态统计数据
对查询中的谓词具有准确的统计数据对于选择最优的执行计划很重要。用于为谓词计算统计数据的典型方法是使用统计模型,其准确性依赖于谓词的复杂性而广泛变化,即,错误率对于复杂谓词是无界限的。如本文中所提到的,用于收集这种统计数据的备选方法是利用表数据的样本在查询优化期间执行用户查询的片段,由此称为“动态采样”。动态采样是为了生成可以用来估计查询的执行计划的成本而从数据库对象采样数据的过程。动态采样查询是计算诸如COUNT(*)的简单聚合的简单SQL语句,诸如:
SELECT count(*)
FROM emp sample(%)
WHERE(sal>100K and bonus>10K)
“%”指被分析的表“emp”的百分比,该百分比可以是例如1、5或10。如果被查询优化器优化的查询包括多个谓词,则查询优化器可以对谓词的子集发出动态采样查询。
动态采样的缺点是DBA不得不明确地设置配置参数来对查询启用其并指定样本大小。
动态采样的另一个缺点是动态采样只对单表谓词工作。但是,许多谓词涉及连接并且估计连接的基数会很困难。另一个限制是动态采样不能被用来估计由GROUP BY操作返回的行数。
动态采样的另一个缺点是它在某些情形下可能非常低效和浪费。例如,查询可以在查询优化阶段被变换多次。在每个变换阶段,查询优化器可以发出多个动态采样查询,每个动态采样查询用于被变换的查询中的一个单表谓词。但是,因为后续的变换阶段看不到来自之前变换阶段的动态采样的结果,所以许多动态采样查询被重复。
动态采样的另一个缺点是它在应用查询共享许多处理或者除细小细节之外都相似的情况下是非常浪费的。例如,利用今天的数据代替昨天的日期,相同的查询可以通过谓词重复。
用于昂贵查询的动态统计数据
动态采样是动态统计数据的一个来源。动态统计数据的其它来源包括前一查询(例如,被统计数据收集器)执行期间所收集的统计数据以及关于查询中所涉及的数据库对象的信息,诸如自上次统计数据对数据库对象收集之后对该数据库对象所作的改变的量或次数和/或自上次统计数据收集时间之后该数据库对象大小的变化。
关于对数据库对象(例如,表)的变化的信息的例子是插入该数据库对象的数据项(例如,行)的数量、该数据库对象中被修改的数据项的数目,以及从该数据库对象中被删除或除去的数据项的数目。可以对被提交并处理的每个DML(数据操纵语言)语句维护这种信息。
在实施例中,为基于执行计划的过去执行被认为“昂贵”的某些查询生成并维护动态统计数据。“昂贵的”查询可以基于一个或多个因素来确定。示例因素包括执行该执行计划所经过的时间以及执行该执行计划所需的计算机资源的数目或量(例如,被处理的行数、CPU利用率、存储器利用率、盘I/O利用率)。
因此,动态统计数据可以在查询的编译和执行期间收集,并且随后在查询执行之后,确定该动态统计数据的一些或全部是否将被存储供之后使用。如果确定查询(或者其一部分)是“昂贵的”,则所生成的动态统计数据(或者其一部分)可以存储在用于该查询的指示器中(或者与其关联存储)和/或与该查询的执行中所涉及的一个或多个数据库对象关联存储。
在实施例中,为昂贵的查询确定预算。预算可以表示为例如查询的最近执行时间的百分比、查询的过去执行时间的平均值,或者过去执行时间的中值。例如,缺省预算可以是2%,意味着过去(或者最近)执行时间的2%专注于处理动态统计数据,这可以包括收集动态统计数据。如果过去的执行时间是两百秒,则预算可以是四秒。
存储动态统计数据
在实施例中,动态统计数据持久地存储在可用于不同数据库会话的共享存储器结构中。以这种方式,许多不同的查询可以充分利用动态统计数据,以使查询优化决定尽可能智能。用于在执行计划的执行期间执行的操作的动态统计数据可以指示以下一个或多个:操作的类型(例如,过滤、扫描、连接、分组)、操作中所涉及的一个或多个数据库对象(例如,表T1和T2)、所应用的任何谓词(例如,c1>20和c3=4)、一个或多个值的选择性、从每个数据库对象读出的数据项的数目(例如,1034行)、从该操作得出的数据项的数目(例如,89行),以及由不同操作返回的关于列或表达式的其它统计数据(例如,最小值、最大值,以及列的不同值的数量)。
共享的动态统计数据可以以多种方式存储。以一种方式,动态统计数据以涉及散列表的数据结构的形式存储在存储器中,或者存储在诸如闪存或盘的持久性储存器中。已为其收集动态统计数据的数据库对象与标识符关联。数据库对象标识符可以用作散列函数的输入。散列函数的输出是共享的数据结构(例如,数组或散列表)中的位置。处于该位置的条目可以识别数据库对象并且包含用于该数据库对象的统计数据,包括关于统计数据何时被收集和/或上次被使用的信息(例如,时间)。如果动态统计数据是基于多个数据库对象,诸如两个表的连接,则这多个数据库对象的标识符可以组合并输入到散列函数中,以识别共享的数据结构中的位置。处于该位置的条目可以识别这多个数据库对象并且包含用于这多个数据库对象的统计数据。作为替代,动态统计数据可以存储在多个条目中:每个条目用于多个(例如,两个)数据库对象当中的一个对象。
因此,第一查询的优化可以启动第一组动态统计数据的创建,这组动态统计数据存储在共享的存储器中。随后,接收第二查询,该查询可以在与第一查询相同或不同的会话中发出。第二查询可以与第一查询非常不同。查询优化器确定第二查询中是否有任何构造、谓词等在共享存储器中被找到。例如,如果第一查询包括两个表的连接,其中一个表具有应用到其的谓词,则可以存储关于该连接的基数的动态统计数据。如果第二查询也包括具有相同连接及适当表上相同谓词,则查询优化器识别关于该连接的基数的统计数据,以便确定执行涉及该连接的执行计划的估计成本。动态统计数据以使得查找或匹配关于FROM语句中的大小写、表的别名、列的别名、表的次序、WHERE语句中谓词的次序等等对用户不敏感的方式存储。
动态统计数据和指示器共享
在实施例中,动态统计数据被用来确定是共享指示器(执行计划)还是创建新指示器。当接收到查询时,查询可以与和多个指示器关联的查询进行比较。多个指示器可以基于相同的查询或等效的查询,诸如除绑定值之外完全相同的查询。
可以执行许多测试来确定指示器是否可以与后续的查询共享。在实施例中,一个测试是确定查询所需的数据库对象是否随着时间的推移而明显变化,诸如自指示器的最近使用之后或者自上次对数据库对象收集统计数据之后。如果是这样,则指示器不被共享或用于执行查询。
确定数据库对象是否明显改变可以基于一个或多个因素。示例因素包括在一段时间内(数据库对象中)被修改、添加和/或删除的数据项的数目,以及数据库对象的大小。例如,如果上次使用指示器时表的大小是200MB并且现在表的大小是900MB,则指示器不被共享。作为另一个例子,如果表中被修改的行数超过表的40%,则指示器不被共享。
试探可以被用来确定数据库对象是否改变足够多。示例试探是10%;因此,如果表的大小增加或减小至少10%,则指示器不被共享。试探可以是硬编码的或者可被诸如DBA的用户调整。
为了确定数据库对象是否明显改变,可以存储“快照数据”。快照数据可以指示在特定时间的大小(例如,表中的行数或者存储表所需的存储块的个数),诸如在指示器被用来对在生成快照数据时的数据库对象执行查询时的时间。快照数据可以存储在例如指示器中、可由在多个会话中的查询检索的数据库对象的(例如,表)定义中,或者诸如散列表或数组的另一共享的数据结构中。
而且,“当前数据”可以被存储,以便确定数据库对象是否明显改变。当前数据可以是与快照数据相同类型的数据,使得当前数据可以与快照数据进行比较。
图8是描绘查询的多个实例(或者可以共享相同指示器的等效查询的实例)被提交时的示例时间线800的框图。在时间t1,查询Q1被提交并且从其生成指示器(“指示器A”)。
在时间t2,可以使用指示器A的查询Q2被提交。自时间t2之后,该指示器针对的特定表增加了1%,这可能低于变化阈值(该阈值可以只适用于那个特定的表、适用于多个数据库对象,或者适用于所有数据库对象)。因为大小的变化小于变化阈值,所以指示器A被用于Q2。
在时间t3,可以使用指示器A的查询Q3被提交。自时间t1之后,该特定表增加了5%,这可能也低于变化阈值。因为大小的变化小于变化阈值,所以指示器A被用于Q3。
在时间t4,可以使用指示器A的查询Q4被提交。自时间t1之后,该特定表增加了35%,这可能高于变化阈值。因为大小的变化大于变化阈值,所以指示器A不被用于Q4。作为替代,生成新的执行计划以及,因此,新的指示器(“指示器B”)。
在实施例中,如果(1)在基于对指示器所针对的一个或多个数据库对象的变化量确定指示器不应当被使用之后查询被编译(或者“硬解析”)以及(2)从硬解析得出的执行计划是与和该指示器相关联的执行计划完全相同的执行计划,则与该指示器(或者与该数据库对象)相关联的变化阈值增加。例如,如果变化阈值是20%、表的大小减小25%并且生成完全相同的执行计划,则变化阈值可以变成30%。变化阈值可以与表和/或与指示器相关联。初始变化阈值可以是适用于所有指示器或数据库对象的缺省值或用户指定的值。随着时间的推移,用于一些指示器或数据库对象的变化阈值可以增加。
在实施例中,处理“共享”指示器的查询所需的时间(或者一个或多个计算机资源)与用于处理使用该指示器的前一查询的时间进行比较。如果差别明显,则用于该指示器(或者用于该查询所针对的数据库对象)的变化阈值减小。例如,如果花一分钟执行特定指示器的执行计划,并且随后花三分钟(或者3倍的前一执行)来执行该执行计划,则用于该指示器的变化阈值从10%减小到5%。这种减小反映了用于某些指示器或数据库对象的变化阈值可能太大并且指示器共享太随意(liberally)的事实。对用于指示器或数据库对象的变化阈值的这种减小将更有可能关于针对那个数据库对象的那一个或多个指示器导致指示器共享的更少实例。
图9是描绘实施例中用于共享指示器的过程900的流程图。在方框910,接收查询。该查询可以符合数据库语言,诸如SQL。
在方框920,确定是否存在任何可被共享以便执行查询的候选指示器。如果存在,则过程900前进到方框930。否则,过程900前进到方框940。方框920可以涉及比较在方框910中接收到的查询与和每个指示器关联的查询,以确定是否存在与所接收到的查询相同或等效的任何查询。在方框920,可以识别可被共享的多个候选指示器。对等效查询可能存在不同指示器的一个原因是因为不同的等效查询可能具有使非常不同的执行计划成为必需的不同的绑定值。例如,第一查询可以具有导致许多行的等式谓词(equality predicate),而等效的第二查询可以具有导致很少行的等式谓词。因此,依赖于绑定值,用于第一查询的执行计划可以涉及扫描操作,而用于第二查询的执行计划可以涉及访问索引。
在方框930,确定是否有一个或多个数据库对象(作为该查询的目标)已充分改变,有必要(warrant)硬解析。如果有,则过程900前进到方框940。否则,过程900前进到方框970。方框930可以包括与数据库对象已改变或被修改多少无关的一个或多个其它检查或确定。那些其它检查在这里不描述。
在方框940,对查询执行硬解析,这导致执行计划。在方框950,确定该执行计划是否与方框920中识别出的候选指示器的执行计划相同。如果是,则过程900前进到方框970。否则,过程900前进到方框960。
在方框960,为在方框940生成的执行计划创建指示器,并且执行该执行计划。
在方框970,从方框920中识别出的候选指示器中选择候选指示器用于指示器共享,并且执行该候选指示器的执行计划。
在实施例中,可以在各种粒度级别对动态统计数据(例如,关于对数据库对象的变化的信息)进行维护或跟踪。例如,变化信息可以在表级别和/或在列级别。如果表的列已明显改变(或者列中的值已明显改变),但是该列与查询无关,则关于该列的信息不被用来确定是否可以对那个查询共享指示器。因此,如果表的特定列没有明显改变,则针对该特定列的指示器比如果该特定列已明显改变时更可能是指示器共享的候选。
在实施例中,动态统计数据变化信息可以只对被查询处理器“频繁”(例如,至少每天一次)访问的数据库对象或数据库对象的部分(例如,列)维护。例如,如果表的列的访问不超过每天一次,则不为那个列维护变化信息。
硬件概述
根据一种实施例,本文所描述的技术由一个或多个专用计算设备实现。专用计算设备可以是硬连线的以执行所述技术,或者可以包括诸如持久性地编程为执行所述技术的一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)的数字电子设备,或者可以包括编程为按照固件、存储器、其它储存器或者其组合中的程序指令执行所述技术的一个或多个通用硬件处理器。这种专用计算设备还可以组合定制的硬连线逻辑、ASIC或FPGA与定制的编程来实现所述技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者结合硬连线和/或程序逻辑来实现所述技术的任何其它设备。
例如,图10是说明本发明的实施例可以在其上实现的计算机系统1000的框图。计算机系统1000包括总线1002或者用于传送信息的其它通信机制,以及与总线1002耦合用于处理信息的硬件处理器1004。硬件处理器1004可以是例如通用微处理器。
计算机系统1000还包括耦合到总线1002的用于存储信息和要由处理器1004执行的指令的主存储器1006,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器1006还可以用于在要由处理器1004执行的指令执行期间存储临时变量或其它中间信息。当存储在处理器1004可访问的非暂时性存储介质中时,这种指令使计算机系统1000变成为执行指令中所规定的操作而定制的专用机器。
计算机系统1000还包括耦合到总线1002的只读存储器(ROM)1008或者其它静态存储设备,用于为处理器1004存储静态信息和指令。提供诸如磁盘或光盘的存储设备1010并且将其耦合到总线1002,以用于存储信息和指令。
计算机系统1000可以经总线1002耦合到诸如阴极射线管(CRT)的显示器1012,以用于向计算机用户显示信息。包括字母数字和其它键的输入设备1014耦合到总线1002,以用于向处理器1004传送信息和命令选择。另一种类型的用户输入设备是光标控制1016(诸如鼠标、轨迹球或者光标方向键),用于向处理器1004传送方向信息和命令选择,并且用于控制显示器1012上的光标运动。这种输入设备通常具有在两个轴,第一个轴(例如,x)和第二个轴(例如,y),中的两个自由度,以允许设备在平面内规定位置。
计算机系统1000可以利用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术,这些与计算机系统相结合,使计算机系统1000成为或者把计算机系统1000编程为专用机器。根据一种实施例,本文的技术由计算机系统1000响应于执行包含在主存储器1006中的一条或多条指令的一个或多个序列而执行。这种指令可以从另一存储介质,诸如存储设备1010,读到主存储器1006中。包含在主存储器1006中的指令序列的执行使处理器1004执行本文所述的过程步骤。在备选实施例中,硬连线的电路系统可以代替软件指令或者与其结合使用。
如在本文所使用的,术语“存储介质”指存储数据和/或使机器以特定方式操作的指令的任何非暂时性介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光或磁盘,诸如存储设备1010。易失性介质包括动态存储器,诸如主存储器1006。存储介质的常见形式包括,例如,软盘、柔性盘、硬盘、固态驱动器、磁带,或者任何其它磁性数据存储介质,CD-ROM,任何其它光学数据存储介质,任何具有孔模式的物理介质,RAM、PROM和EPROM、FLASH-EPROM、NVRAM,任何其它存储器芯片或盒式磁带。
存储介质与传输介质截然不同但是可以与其结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线1002的配线。传输介质还可以采取声或光波的形式,诸如在无线电波和红外线数据通信中产生的那些。
各种形式的介质可以参与把一条或多条指令的一个或多个序列携带到处理器1004供执行。例如,指令最初可以在远端计算机的磁盘或固态驱动器上携带。远端计算机可以把指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。位于计算机系统1000本地的调制解调器可以在电话线上接收数据并且使用红外线发送器把数据转换成红外线信号。红外线检测器可以接收在红外线信号中携带的数据并且适当的电路系统可以把数据放在总线1002上。总线1002把数据携带到主存储器1006,处理器1004从该主存储器1006检索并执行指令。由主存储器1006接收的指令可以可选地在被处理器1004执行之前或之后存储在存储设备1010上。
计算机系统1000还包括耦合到总线1002的通信接口1018。通信接口1018提供与网络链路1020的双向数据通信耦合,其中网络链路1020连接到本地网络1022。例如,通信接口1018可以是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器,或者提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个例子,通信接口1018可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。也可以实现无线链路。在任何此类实现中,通信接口1018都发送和接收携带表示各种类型信息的数字数据流的电、电磁或光信号。
网络链路1020通常通过一个或多个网络向其它数据设备提供数据通信。例如。网络链路1020可以通过本地网络1022提供到主计算机1024或者到由因特网服务提供商(ISP)1026操作的数据设备的连接。ISP 1026又通过现在通常称为“因特网”1028的全球分组数据通信网络提供数据通信服务。本地网络1022和因特网1028都使用携带数字数据流的电、电磁或光信号。通过各种网络的信号以及在网络链路1020上并通过通信接口1018的信号是传输介质的示例形式,其中信号把数字数据带到计算机系统1000或者携带来自计算机系统1000的数字数据。
计算机系统1000可以通过网络、网络链路1020和通信接口1018发送消息和接收数据,包括程序代码。在因特网例子中,服务器1030可以通过因特网1028、ISP 1026、本地网络1022和通信接口1018发送对应用程序的所请求的代码。
所接收的代码可以在其被接收时由处理器1004执行,和/或存储在存储设备1010或其它非易失性储存器中,供随后执行。
在前面的说明书中,已经参考众多的具体细节描述本发明的实施例,这些细节可以从一种实现到另一种实现变化。因而,应当在说明性而不是限制性的意义上考虑说明书和附图。本发明范围的唯一且排他指示,以及申请人预期作为本发明范围的内容,是由本申请公布的权利要求集合的字面和等效范围,以这种权利要求公布的具体形式,包括任何后续的校正。

Claims (20)

1.一种计算机实现的方法,包括:
响应于接收到查询,确定包括多个子计划的执行计划;
在确定所述执行计划之后,执行所述执行计划的一部分,其中执行所述执行计划的一部分包括将执行所述一部分的临时结果存储在缓冲区中;
执行以下各项之一:
分析所述临时结果以确定不同值的数量、最小值或最大值,其中所述不同值的数量少于所述缓冲区中的行的数量,或者
确定所述缓冲区中的数据的量是否已经达到特定的大小;
响应于确定所述缓冲区中的数据的量已经达到所述特定的大小,或者基于所述不同值的数量、所述最小值或所述最大值,来确定是否满足一个或多个标准;
如果满足所述一个或多个标准,则执行所述多个子计划中的第一子计划;
如果没有满足所述一个或多个标准,则为所述查询执行所述执行计划的另一部分而从不执行所述第一子计划。
2.如权利要求1所述的方法,其中当指令被一个或多个处理器执行时,还使得,如果没有满足所述一个或多个标准,则执行第二子计划而不执行所述第一子计划。
3.如权利要求2所述的方法,其中第一子计划对应于散列连接或嵌套循环连接之一,并且第二子计划包括散列连接和嵌套循环连接中的另一个。
4.如权利要求1所述的方法,其中所述一个或多个标准与在所述执行计划的所述一部分中包括的操作的执行期间被处理的数据的特性相关联。
5.如权利要求4所述的方法,其中所述数据的特性是数据的量或数据中唯一值的个数。
6.如权利要求1所述的方法,其中所述第一子计划对应于位图连接。
7.如权利要求1所述的方法,其中确定所述执行计划包括响应于接收到所述查询而生成所述执行计划。
8.一种方法,包括:
响应于接收到查询,确定包括多个子计划的执行计划;
在确定所述执行计划之后,执行所述执行计划的一部分,其中执行所述执行计划的一部分包括确定是否满足一个或多个标准;
如果满足所述一个或多个标准,则执行所述多个子计划中的第一子计划;
如果没有满足所述一个或多个标准,则为所述查询执行所述执行计划的另一部分而从不执行所述第一子计划;
其中所述执行计划包括组合多个位图索引的第一操作和将所述第一操作的结果与事实表组合的事实连接操作,
在执行所述执行计划的所述一部分之前:
确定所述执行计划在事实连接操作之后是否包括对应于位图连接的维度表的连接操作;
响应于确定所述执行计划在事实连接操作之后不包括对应于位图连接的维度表的连接操作,在事实连接操作之后添加维度表的连接操作;
在所述执行计划的执行期间,只有在没有执行位图连接时才执行所述连接操作。
9.如权利要求8所述的方法,其中当指令被一个或多个处理器执行时,还使得,如果没有满足所述一个或多个标准,则执行第二子计划而不执行所述第一子计划。
10.如权利要求9所述的方法,其中第一子计划对应于散列连接或嵌套循环连接之一,并且第二子计划包括散列连接和嵌套循环连接中的另一个。
11.如权利要求8所述的方法,其中所述一个或多个标准与在所述执行计划的所述一部分中包括的操作的执行期间被处理的数据的特性相关联。
12.如权利要求11所述的方法,其中所述数据的特性是数据的量或数据中唯一值的个数。
13.如权利要求8所述的方法,其中确定所述执行计划包括响应于接收到所述查询而生成所述执行计划。
14.一种方法,包括:
响应于接收到查询,确定包括多个子计划的执行计划;
在确定所述执行计划之后,执行所述执行计划的一部分,其中执行所述执行计划的一部分包括确定是否满足一个或多个标准;
如果满足所述一个或多个标准,则执行所述多个子计划中的第一子计划;
如果没有满足所述一个或多个标准,则为所述查询执行所述执行计划的另一部分而从不执行所述第一子计划;
在执行所述执行计划的所述一部分之前:
如果所述一个或多个标准包括第一值,则生成执行所述执行计划的第一多个估计成本;
在生成所述第一多个估计成本之后,如果所述一个或多个标准包括不同于所述第一值的第二值,则生成执行所述执行计划的第二多个估计成本;
基于所述第二多个估计成本,确定所述一个或多个标准要包括所述第二值。
15.如权利要求14所述的方法,其中当指令被一个或多个处理器执行时,还使得,如果没有满足所述一个或多个标准,则执行第二子计划而不执行所述第一子计划。
16.如权利要求15所述的方法,其中第一子计划对应于散列连接或嵌套循环连接之一,并且第二子计划包括散列连接和嵌套循环连接中的另一个。
17.如权利要求14所述的方法,其中所述一个或多个标准与在所述执行计划的所述一部分中包括的操作的执行期间被处理的数据的特性相关联。
18.如权利要求17所述的方法,其中所述数据的特性是数据的量或数据中唯一值的个数。
19.如权利要求14所述的方法,其中确定所述执行计划包括响应于接收到所述查询而生成所述执行计划。
20.一种或多种存储指令的存储介质,当指令被一个或多个处理器执行时,使得执行如权利要求1-19中任何一项所述的方法。
CN201380047214.8A 2012-09-28 2013-09-30 自适应查询优化 Active CN104620239B (zh)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201261707849P 2012-09-28 2012-09-28
US61/707,849 2012-09-28
US201361786443P 2013-03-15 2013-03-15
US61/786,443 2013-03-15
US14/041,750 US9720967B2 (en) 2012-09-28 2013-09-30 Adaptive query optimization
PCT/US2013/062735 WO2014052977A1 (en) 2012-09-28 2013-09-30 Adaptive query optimization
US14/041,750 2013-09-30

Publications (2)

Publication Number Publication Date
CN104620239A CN104620239A (zh) 2015-05-13
CN104620239B true CN104620239B (zh) 2018-11-16

Family

ID=50386193

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380047214.8A Active CN104620239B (zh) 2012-09-28 2013-09-30 自适应查询优化

Country Status (4)

Country Link
US (6) US9727609B2 (zh)
EP (1) EP2901324B1 (zh)
CN (1) CN104620239B (zh)
WO (1) WO2014052977A1 (zh)

Families Citing this family (107)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8949224B2 (en) 2013-01-15 2015-02-03 Amazon Technologies, Inc. Efficient query processing using histograms in a columnar database
US10331686B2 (en) * 2013-03-14 2019-06-25 Microsoft Corporation Conducting search sessions utilizing navigation patterns
US10740329B2 (en) * 2013-03-15 2020-08-11 Teradata Us, Inc. Optimization of database queries for database systems and environments
US10515231B2 (en) * 2013-11-08 2019-12-24 Symcor Inc. Method of obfuscating relationships between data in database tables
US10795868B2 (en) * 2013-11-22 2020-10-06 Teradata Us, Inc. Summarizing statistical data for database systems and/or environments
US10824622B2 (en) * 2013-11-25 2020-11-03 Sap Se Data statistics in data management systems
US9946750B2 (en) * 2013-12-01 2018-04-17 Actian Corporation Estimating statistics for generating execution plans for database queries
US10311054B2 (en) * 2014-01-08 2019-06-04 Red Hat, Inc. Query data splitting
US20150261860A1 (en) * 2014-03-12 2015-09-17 Kaushal MITTAL Predicate execution in shared distributed computing environment
US9836506B2 (en) * 2014-06-11 2017-12-05 International Business Machines Corporation Dynamic query optimization with pilot runs
US10860237B2 (en) 2014-06-24 2020-12-08 Oracle International Corporation Storage integrated snapshot cloning for database
US10691663B2 (en) * 2014-09-16 2020-06-23 Sap Se Database table copy
US10162860B2 (en) 2014-10-20 2018-12-25 International Business Machines Corporation Selectivity estimation for query execution planning in a database
US9798775B2 (en) 2015-01-16 2017-10-24 International Business Machines Corporation Database statistical histogram forecasting
US9990396B2 (en) 2015-02-03 2018-06-05 International Business Machines Corporation Forecasting query access plan obsolescence
US10108664B2 (en) * 2015-04-01 2018-10-23 International Business Machines Corporation Generating multiple query access plans for multiple computing environments
US9916353B2 (en) * 2015-04-01 2018-03-13 International Business Machines Corporation Generating multiple query access plans for multiple computing environments
US20160342646A1 (en) * 2015-05-20 2016-11-24 International Business Machines Corporation Database query cursor management
US10007700B2 (en) * 2015-06-29 2018-06-26 Oracle International Corporation Query optimization for group-by extensions and distinct aggregate functions
US10459916B2 (en) 2015-07-31 2019-10-29 International Business Machines Corporation Updating database statistics during query execution
US10970295B2 (en) * 2015-09-03 2021-04-06 Teradata Us, Inc. Collecting statistics in unconventional database environments
US10216792B2 (en) * 2015-10-14 2019-02-26 Paxata, Inc. Automated join detection
US10642831B2 (en) 2015-10-23 2020-05-05 Oracle International Corporation Static data caching for queries with a clause that requires multiple iterations to execute
US9442694B1 (en) 2015-11-18 2016-09-13 International Business Machines Corporation Method for storing a dataset
US10133778B2 (en) * 2015-11-20 2018-11-20 Sap Se Query optimization using join cardinality
US10262033B2 (en) * 2016-03-18 2019-04-16 International Business Machines Corporation Method for query execution planning
US10621207B2 (en) 2016-04-26 2020-04-14 Salesforce.Com, Inc. Execution of queries in relational databases
CN107402926B (zh) 2016-05-18 2021-02-23 华为技术有限公司 一种查询方法以及查询设备
US10452539B2 (en) 2016-07-19 2019-10-22 Sap Se Simulator for enterprise-scale simulations on hybrid main memory systems
US10474557B2 (en) 2016-07-19 2019-11-12 Sap Se Source code profiling for line-level latency and energy consumption estimation
US10437798B2 (en) 2016-07-19 2019-10-08 Sap Se Full system simulator and memory-aware splay tree for in-memory databases in hybrid memory systems
US10387127B2 (en) 2016-07-19 2019-08-20 Sap Se Detecting sequential access data and random access data for placement on hybrid main memory for in-memory databases
US11977484B2 (en) 2016-07-19 2024-05-07 Sap Se Adapting in-memory database in hybrid memory systems and operating system interface
US10783146B2 (en) * 2016-07-19 2020-09-22 Sap Se Join operations in hybrid main memory systems
US10540098B2 (en) 2016-07-19 2020-01-21 Sap Se Workload-aware page management for in-memory databases in hybrid main memory systems
US10698732B2 (en) 2016-07-19 2020-06-30 Sap Se Page ranking in operating system virtual pages in hybrid memory systems
US11157498B1 (en) * 2016-09-26 2021-10-26 Splunk Inc. Query generation using a dataset association record of a metadata catalog
US11093564B1 (en) 2016-09-26 2021-08-17 Splunk Inc. Identifying configuration parameters for a query using a metadata catalog
US20180096031A1 (en) * 2016-09-30 2018-04-05 International Business Machines Corporation Database-agnostic parallel reads
US10248706B2 (en) * 2016-09-30 2019-04-02 International Business Machines Corporation Replicating database updates with batching
US10929400B2 (en) * 2016-10-26 2021-02-23 International Business Machines Corporation Self-optimizing value range synopsis in analytical databases
US10769134B2 (en) * 2016-10-28 2020-09-08 Microsoft Technology Licensing, Llc Resumable and online schema transformations
US9846599B1 (en) 2016-10-31 2017-12-19 International Business Machines Corporation Adaptive query cursor management
US10521430B1 (en) * 2016-11-06 2019-12-31 Tableau Software, Inc. Dynamic selection of query execution operators
US10795887B1 (en) 2016-11-06 2020-10-06 Tableau Software, Inc. Dynamic rebuilding of query execution trees and reselection of query execution operators
US10496401B2 (en) * 2016-11-08 2019-12-03 Sap Se Managing rename of tables and table fields
US11036736B2 (en) * 2017-03-22 2021-06-15 International Business Machines Corporation Optimizing access plan for queries with a nested loop join
US10599652B2 (en) * 2017-05-16 2020-03-24 Dell Products, L.P. Database query time estimator
WO2018223010A1 (en) * 2017-06-01 2018-12-06 Brandeis University Systems, methods, and media for improving the effectiveness and efficiency of database query optimizers
US10901990B1 (en) 2017-06-30 2021-01-26 Tableau Software, Inc. Elimination of common subexpressions in complex database queries
US10726006B2 (en) 2017-06-30 2020-07-28 Microsoft Technology Licensing, Llc Query optimization using propagated data distinctness
US11055284B1 (en) 2017-06-30 2021-07-06 Tableau Software, Inc. Optimizing domain queries for relational databases
US10579827B2 (en) * 2017-07-24 2020-03-03 Meltwater News International Holdings Gmbh Event processing system to estimate unique user count
US11010379B2 (en) 2017-08-15 2021-05-18 Sap Se Increasing performance of in-memory databases using re-ordered query execution plans
US11561973B2 (en) * 2017-09-29 2023-01-24 Oracle International Corporation Statistics based query transformation
CN107729496B (zh) * 2017-10-19 2018-08-28 珠海图思科软件有限公司 基于甲骨文In-Memory的SQL语句调优方法
CN107885865B (zh) * 2017-11-22 2019-12-10 星环信息科技(上海)有限公司 一种代价优化器与代价估计的方法及其设备
US10664477B2 (en) * 2017-12-21 2020-05-26 Futurewei Technologies, Inc. Cardinality estimation in databases
US11593366B2 (en) * 2017-12-22 2023-02-28 Teradata Us, Inc. Techniques for pushing joins into union all views
US20190205448A1 (en) * 2018-01-04 2019-07-04 Microsoft Technology Licensing, Llc Relational database system that uses real-time statistics for selection of physical operators
US20190236188A1 (en) * 2018-01-31 2019-08-01 Salesforce.Com, Inc. Query optimizer constraints
US11080276B2 (en) * 2018-02-23 2021-08-03 Sap Se Optimal ranges for relational query execution plans
US10831752B2 (en) * 2018-04-25 2020-11-10 International Business Machines Corporation Semantic relational database operations
US11392578B1 (en) 2018-04-30 2022-07-19 Splunk Inc. Automatically generating metadata for a metadata catalog based on detected changes to the metadata catalog
US11238049B1 (en) 2018-04-30 2022-02-01 Splunk Inc. Revising catalog metadata based on parsing queries
US11573955B1 (en) 2018-04-30 2023-02-07 Splunk Inc. Data-determinant query terms
US11288270B2 (en) * 2018-05-11 2022-03-29 Qatar Foundation For Education, Science And Community Development Apparatus, system, and method for cross-platform data processing
US11354310B2 (en) 2018-05-23 2022-06-07 Oracle International Corporation Dual purpose zone maps
CN108763536B (zh) 2018-05-31 2020-04-14 阿里巴巴集团控股有限公司 数据库访问方法及装置
CN108763563A (zh) * 2018-06-04 2018-11-06 深圳市华傲数据技术有限公司 一种数据库查询方法、介质及设备
US11016977B2 (en) * 2018-07-25 2021-05-25 Technion Research & Development Foundation Limited System and method for detecting a pattern of events
WO2020033446A1 (en) * 2018-08-06 2020-02-13 Oracle International Corporation Techniques for maintaining statistics in a database system
US11068460B2 (en) 2018-08-06 2021-07-20 Oracle International Corporation Automated real-time index management
CN110968594B (zh) * 2018-09-30 2023-04-07 阿里巴巴集团控股有限公司 数据库查询优化方法、引擎及存储介质
US11176129B2 (en) * 2018-09-30 2021-11-16 Microsoft Technology Licensing, Llc Methods for automatic selection of degrees of parallelism for efficient execution of queries in a database system
US11010376B2 (en) * 2018-10-20 2021-05-18 Verizon Patent And Licensing Inc. Methods and systems for determining search parameters from a search query
CN109408539B (zh) * 2018-10-22 2021-03-30 上海达梦数据库有限公司 数据操作方法、装置、服务器和存储介质
US11341133B2 (en) * 2018-10-26 2022-05-24 International Business Machines Corporation Method and system for collaborative and dynamic query optimization in a DBMS network
US10795888B2 (en) 2018-12-21 2020-10-06 Tableau Software, Inc. Elimination of query fragment duplication in complex database queries
US11321392B2 (en) * 2019-02-19 2022-05-03 International Business Machines Corporation Light weight index for querying low-frequency data in a big data environment
US11650982B2 (en) * 2019-04-01 2023-05-16 Sap Se Automatic selection of precompiled or code-generated operator variants
US11360977B2 (en) * 2019-04-01 2022-06-14 Sap Se Selectively allowing query optimization in query processing
US11715051B1 (en) 2019-04-30 2023-08-01 Splunk Inc. Service provider instance recommendations using machine-learned classifications and reconciliation
US11301418B2 (en) * 2019-05-02 2022-04-12 EMC IP Holding Company LLC Method and system for provenance-based data backups
CN110134721B (zh) * 2019-05-17 2021-05-28 智慧足迹数据科技有限公司 基于位图的数据统计方法、装置及电子设备
US11334538B2 (en) 2019-05-31 2022-05-17 Microsoft Technology Licensing, Llc System and method for cardinality estimation feedback loops in query processing
US20210034616A1 (en) * 2019-08-01 2021-02-04 Instant Labs, Inc. Query optimization
US11200230B2 (en) * 2019-08-09 2021-12-14 Couchbase, Inc. Cost-based optimization for document-oriented database queries
US11182368B2 (en) 2019-09-24 2021-11-23 International Business Machines Corporation Indexing data in a table based on data usage statistics
CN110704675B (zh) * 2019-10-17 2022-07-29 北京旷视科技有限公司 对象管理方法、装置、计算机设备和存储介质
US11514066B2 (en) * 2019-11-08 2022-11-29 Servicenow, Inc. System and methods for querying and updating databases
US11481364B2 (en) * 2019-12-16 2022-10-25 Alibaba Group Holding Limited Row-column formatting for relational databases
US11567939B2 (en) 2019-12-26 2023-01-31 Snowflake Inc. Lazy reassembling of semi-structured data
US11372860B2 (en) * 2019-12-26 2022-06-28 Snowflake Inc. Processing techniques for queries where predicate values are unknown until runtime
US10769150B1 (en) 2019-12-26 2020-09-08 Snowflake Inc. Pruning indexes to enhance database query processing
US11308090B2 (en) 2019-12-26 2022-04-19 Snowflake Inc. Pruning index to support semi-structured data types
CN111427920B (zh) * 2020-03-16 2023-08-11 深圳市腾讯计算机系统有限公司 数据采集方法、装置、系统、计算机设备及存储介质
US11620547B2 (en) * 2020-05-19 2023-04-04 Oracle International Corporation Estimating number of distinct values in a data set using machine learning
US11681687B2 (en) 2020-08-31 2023-06-20 Couchbase, Inc. Executing transactions on distributed databases
US11615095B2 (en) * 2020-10-30 2023-03-28 Snowflake Inc. Automatic pruning cutoff in a database system
US11314740B1 (en) * 2021-01-29 2022-04-26 Snowflake Inc. Responsive plan stability
US20220284023A1 (en) * 2021-03-05 2022-09-08 International Business Machines Corporation Estimating computational cost for database queries
US11520834B1 (en) 2021-07-28 2022-12-06 Oracle International Corporation Chaining bloom filters to estimate the number of keys with low frequencies in a dataset
US11893015B2 (en) * 2021-11-18 2024-02-06 International Business Machines Corporation Optimizing query performance in virtual database
CN114238395A (zh) * 2022-01-06 2022-03-25 税友软件集团股份有限公司 一种数据库优化方法、装置、电子设备及存储介质
US20230273925A1 (en) * 2022-02-25 2023-08-31 Huawei Cloud Computing Technologies Co., Ltd. Method and apparatus for database management system query planning
US11880369B1 (en) 2022-11-21 2024-01-23 Snowflake Inc. Pruning data based on state of top K operator

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6366901B1 (en) * 1998-12-16 2002-04-02 Microsoft Corporation Automatic database statistics maintenance and plan regeneration

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5301317A (en) * 1992-04-27 1994-04-05 International Business Machines Corporation System for adapting query optimization effort to expected execution time
US5758338A (en) * 1996-08-28 1998-05-26 Lucent Technologies Inc. Method for characterizing information in data sets using multifractals
US6353826B1 (en) 1997-10-23 2002-03-05 Sybase, Inc. Database system with methodology providing improved cost estimates for query strategies
US6434545B1 (en) * 1998-12-16 2002-08-13 Microsoft Corporation Graphical query analyzer
KR100512139B1 (ko) * 1999-07-03 2005-09-02 엘지전자 주식회사 비디오 영역 대표칼라 설정방법과 데이타 구조 및 신뢰도 추출방법
US6850925B2 (en) 2001-05-15 2005-02-01 Microsoft Corporation Query optimization by sub-plan memoization
US6732085B1 (en) * 2001-05-31 2004-05-04 Oracle International Corporation Method and system for sample size determination for database optimizers
US6691099B1 (en) 2001-05-31 2004-02-10 Oracle International Corporation Method and system for histogram determination in a database
US7092977B2 (en) 2001-08-31 2006-08-15 Arkivio, Inc. Techniques for storing data based upon storage policies
US6615206B1 (en) 2001-09-28 2003-09-02 Oracle International Corporation Techniques for eliminating database table joins based on a join index
US6745076B2 (en) * 2001-11-16 2004-06-01 Medtronic, Inc. Implantable medical device with autosensitivity algorithm for controlling sensing of cardiac signals
GB0130210D0 (en) * 2001-12-18 2002-02-06 Caladrius Ltd Segmentation of images using the watershed method
US7849032B1 (en) 2002-05-24 2010-12-07 Oracle International Corporation Intelligent sampling for neural network data mining models
US7447676B2 (en) * 2003-04-21 2008-11-04 Oracle International Corporation Method and system of collecting execution statistics of query statements
US7213012B2 (en) 2003-05-09 2007-05-01 Oracle International Corporation Optimizer dynamic sampling
US20040243555A1 (en) 2003-05-30 2004-12-02 Oracle International Corp. Methods and systems for optimizing queries through dynamic and autonomous database schema analysis
US7805411B2 (en) 2003-09-06 2010-09-28 Oracle International Corporation Auto-tuning SQL statements
US7383246B2 (en) * 2003-10-31 2008-06-03 International Business Machines Corporation System, method, and computer program product for progressive query processing
US7340452B2 (en) * 2003-12-16 2008-03-04 Oracle International Corporation Parallel single cursor model on multiple-server configurations
US7299220B2 (en) * 2004-03-31 2007-11-20 Microsoft Corporation Constructing database object workload summaries
US7353219B2 (en) 2004-05-28 2008-04-01 International Business Machines Corporation Determining validity ranges of query plans based on suboptimality
US8161037B2 (en) * 2004-06-03 2012-04-17 International Business Machines Corporation Method for autonomically generating a query implementation that meets a defined performance specification
US8346761B2 (en) 2004-08-05 2013-01-01 International Business Machines Corporation Method and system for data mining for automatic query optimization
US8046354B2 (en) 2004-09-30 2011-10-25 International Business Machines Corporation Method and apparatus for re-evaluating execution strategy for a database query
US9886492B2 (en) 2004-12-22 2018-02-06 Teradata Us, Inc. Self-adjusting database-query optimizer
WO2007023522A1 (ja) * 2005-08-22 2007-03-01 National Center Of Neurology And Psychiatry 脳疾患の診断支援方法及び装置
US7600063B2 (en) 2006-09-15 2009-10-06 Oracle International Corporation Techniques for improved read-write concurrency
US7826663B2 (en) * 2006-12-12 2010-11-02 International Business Machines Corporation Real time analytics using hybrid histograms
US20090037402A1 (en) 2007-07-31 2009-02-05 Rosie Jones System and method for predicting clickthrough rates and relevance
US7689550B2 (en) * 2007-07-31 2010-03-30 Oracle International Corporation Adaptive cursor sharing
US7702623B2 (en) 2007-07-31 2010-04-20 Oracle International Corporation Extended cursor sharing
US9189522B2 (en) 2007-10-17 2015-11-17 Oracle International Corporation SQL execution plan baselines
US20100153431A1 (en) * 2008-12-11 2010-06-17 Louis Burger Alert triggered statistics collections
US8434075B1 (en) 2009-04-15 2013-04-30 Teradata Us, Inc. Branching optimization in a multi-database system
US20100306188A1 (en) * 2009-06-01 2010-12-02 Microsoft Corporation Persistent query plans
US8525847B2 (en) * 2009-06-01 2013-09-03 Apple Inc. Enhancing images using known characteristics of image subjects
US8229917B1 (en) * 2011-02-24 2012-07-24 International Business Machines Corporation Database query optimization using clustering data mining
US8645356B2 (en) 2012-03-28 2014-02-04 International Business Machines Corporation Adaptive query execution plan enhancement
US9703500B2 (en) 2012-04-25 2017-07-11 International Business Machines Corporation Reducing power consumption by migration of data within a tiered storage system
US9262477B1 (en) * 2012-06-21 2016-02-16 Pivotal Software, Inc. Accuracy testing of query optimizers
US9628499B1 (en) * 2012-08-08 2017-04-18 Google Inc. Statistics-based anomaly detection
US8924373B2 (en) * 2012-08-09 2014-12-30 International Business Machines Corporation Query plans with parameter markers in place of object identifiers
US9292564B2 (en) 2013-09-21 2016-03-22 Oracle International Corporation Mirroring, in memory, data from disk to improve query performance
US9990308B2 (en) 2015-08-31 2018-06-05 Oracle International Corporation Selective data compression for in-memory databases
US11061902B2 (en) 2018-10-18 2021-07-13 Oracle International Corporation Automated configuration parameter tuning for database performance

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6366901B1 (en) * 1998-12-16 2002-04-02 Microsoft Corporation Automatic database statistics maintenance and plan regeneration

Also Published As

Publication number Publication date
US9727609B2 (en) 2017-08-08
EP2901324B1 (en) 2019-11-06
WO2014052977A1 (en) 2014-04-03
US20170031990A1 (en) 2017-02-02
US20140095475A1 (en) 2014-04-03
US9471631B2 (en) 2016-10-18
US20140095474A1 (en) 2014-04-03
US20220215026A1 (en) 2022-07-07
EP2901324A1 (en) 2015-08-05
US11403295B2 (en) 2022-08-02
CN104620239A (zh) 2015-05-13
US11321317B2 (en) 2022-05-03
US20140095472A1 (en) 2014-04-03
US9720967B2 (en) 2017-08-01
US20170357692A1 (en) 2017-12-14

Similar Documents

Publication Publication Date Title
CN104620239B (zh) 自适应查询优化
AU2018253523B2 (en) Profiling data with source tracking
US10678810B2 (en) System for data management in a large scale data repository
US6801903B2 (en) Collecting statistics in a database system
CN103970902B (zh) 一种大量数据情况下的可靠即时检索方法及系统
US7499907B2 (en) Index selection in a database system
US20140082013A1 (en) Query templates for queries in data stream management systems
US20060212264A1 (en) Apparatus and method for monitoring usage of components in a database index
EP1302886A1 (en) Collecting and/or presenting demographics information in a database system
US20070250517A1 (en) Method and Apparatus for Autonomically Maintaining Latent Auxiliary Database Structures for Use in Executing Database Queries
CN112988782B (zh) Hive支持交互式查询的方法、装置及存储介质
CN110637292B (zh) 用于查询资源高速缓存的系统和方法
Damasio et al. Guided automated learning for query workload re-optimization
US20200320070A1 (en) Iterative Multi-Attribute Index Selection for Large Database Systems
CN115391424A (zh) 数据库查询的处理方法、存储介质与计算机设备
Mihaylov et al. Scalable learning to troubleshoot query performance problems
Özsu et al. Distributed query processing
Mihaylov DistGALO: Distributed system for query problem determination
CN115391363A (zh) 数据库索引的更新方法、存储介质与计算机设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant