一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

自主分区数据库表的制作方法

2022-06-16 12:54:03 来源:中国专利 TAG:
1.本公开涉及用于在数据处理系统中实现分区的方法、计算机程序产品和计算机系统。
背景技术
::2.数据处理系统,诸如数据库管理系统(dbms)和关系数据库管理系统(rdbms),允许在客户端(例如,工作站、个人计算机或远程计算终端)上运行的应用访问存储在位于一个或多个数据库服务器处的数据库中的数据。数据库服务器可以通过网络互连。该网络还可以将一个或多个客户端连接到数据库服务器,允许客户端经由网络提交查询和请求以对存储在数据库服务器处的数据执行操作。3.存储在数据库中的表可以被划分或“分区”成更小的部分或“分区”。表可以根据各种分区策略进行分区,诸如范围分区、散列分区和列表分区。对于给定的表,可以基于表分区键将每一行分配给单个分区,该分区键对应于一个或多个列,这些列用于确定每行将被分配到的分区。4.对大表进行分区提供了几个优点,包括改进的查询性能。以逐分区方式(即,在逐个分区的基础上)执行定向到分区表的查询可以比执行定向到没有分区的表的相同查询更快,因为逐分区执行限制了要检查或对其进行操作的数据量,从而允许经由并行执行和/或分区修剪来提高查询性能。例如,为了执行定向到分区表的查询,查询协调器进程可以将表的不同分区分配给多个从属进程中的每个进程。在这个示例中,从属进程可以在分配给它们的分区上并行执行查询,并将结果返回给查询协调进程,该查询协调进程协调结果并将结果发送回发起查询的客户端。分区修剪还可以通过从处理中去除或“修剪”不需要的分区(例如,包含与查询无关的分区键的分区)来提高定向到分区表的查询的查询性能,这进一步减少了要检查或对其进行操作的数据量。5.对大表进行分区的附加优点包括增强的可管理性和大量数据的可用性。例如,不是对大表执行维护操作,而是通过对表进行分区,数据库管理员可以对每个分区执行维护操作,这通常是更易于管理的要进行工作的数据块。在这个示例中,通过在小批量窗口中执行维护操作,可以减少调度的停机时间,从而增强数据可用性。此外,在表的不同分区存储在不同存储层上的单独表空间中的情况下,分区也可以增强数据可用性。在这种情况下,如果一个分区变得不可用,那么其它分区仍然可能可用,从而允许继续在这些分区上处理查询。6.本公开解决的问题是,虽然分区在数据库系统中被广泛使用以提高性能,但是普通用户很难以有效和最优的方式实现分区。如果用户在分区实现上犯了错误,例如,创建太多的分区、太少的分区、使用错误的分区方案,或使用错误的分区键/标准,那么可能出现效率低下和计算资源的浪费。事实上,目前的解决方案大多依赖于承担手动分区表任务的专家用户的存在,希望专家用户足够“专家”,能够生成可用且无害的分区方法。这种对专家用户存在的依赖不足以使解决方案具有普遍适用性,因此需要一种改进的方法来实现数据处理系统的分区。技术实现要素:7.本发明的实施例提供了一种方法、计算机程序产品和计算机系统,用于在数据处理系统中实现分区而不需要用户方面的任何专业知识。提供了三阶段处理流水线来生成候选分区方案、使用空的真实表结构评估候选分区,然后使用生产数据实现所选择的方案以进行评估。8.利用本发明的实施例,自动分区器在系统中操作以实现非分区表的自动分区。特别地,自动分区器接收关于非分区表的某些信息。例如,一些实施例收集诸如关于表本身的数据(例如,表的大小、表模式信息,和诸如基数统计信息之类的表统计信息)的信息、关于针对表应用的工作负载的信息(例如,作为用户工作负载的一部分应用到表的sql语句以及用于sql语句的执行计划的解释),以及从针对非分区表运行工作负载时捕获的关于性能度量的信息。自动分区器使用收集到的信息来生成多个候选分区方案。多个候选分区方案中的每一个都属于将非分区表潜在地分区成分区表的不同方法。候选分区方案可以涵盖不同的分区方法,这些方法包括不同类型的分区,以及基于给定表内的不同列(例如,(一个或多个)分区键)的分区。分区方案选择器操作以从多个候选分区方案中进行选择,以选择预计提供最佳系统性能的候选方案之一。注意的是,在这个阶段,候选分区方案尚未实现为具有来自主数据库系统中的表的所有生产数据的完全填充的表。替代地,候选方案在这个阶段被实现为当前为空的真实表,其中综合统计信息用于预计和估计每个候选方案的预期性能。所选择的分区方案将在数据库系统内实际实现,其中创建新的分区表并用真实的生产数据进行填充。实际用户工作负载将针对填充的分区表运行,以收集来自所选择的分区方案的应用的真实世界执行结果,并将这些结果与先前非分区数据库表的性能进行比较。然后所选择的分区方案可以被验证为是成功的,或者如果不成功则退出。在一个实施例中,如果成功,那么将分区应用于用户的表,而如果拒绝,那么“退出”处理是丢弃新表。9.可以应用任意数量的不同分区方法来对数据库对象/表进行分区,诸如:(a)范围分区、(b)散列分区,或(c)列表分区。这些方法中的每个方法都用作数据分布方法,用于控制如何将数据放置到各个分区中,其中分区表中的每一行都明确地分配给单个分区。10.根据本发明的一些实施例的生成多个候选分区方案的方法可以包括识别一个或多个表以评估分区、运行“解释计划”、过滤候选者、识别可能的候选者、对候选者评分,和/或对候选者进行排名并进行选择。在这个阶段可以采取任何合适的方法来识别用于评估的表。例如,一种方法是排除已由用户以特定方式分区的任何表。另一种方法是选择当前未分区的具有最大大小(例如,基于行数/数据量)的表。在一些实施例中,实现分区的成本(例如,在系统内移动数据以实现给定的分区方案的成本)可以与实现新的分区方案以便为自动分区处理选择表的可能收益相平衡。此外,可以采取任何合适的方法来发起分区处理,以识别用于自动分区的表。一种可能的方法是让用户手动识别用于分区的表。另一种方法是自动辨别和自动触发分区处理。例如,对于当前未分区的表,可以通过将表辨识为达到指定阈值大小、在工作负载中接收到针对该表的阈值数量的查询,或将指示可能潜在地从分区中受益的表的任何其它因素或因素组合来触发该处理。对于已经分区的表,例如,如果该表的分区数量达到被认为过多的阈值数量、如果单个分区的大小达到阈值大小,和/或将指示可能潜在地从重新分区中受益的表的任何其它因素或因素组合,那么可以触发该处理。此外,可以将数据库模式配置为建立黑名单和/或白名单参数,以指定自动分区处理应该或不应该解决的特定表。可以对实际引用所选择的表的用户工作负载内的查询进行识别,例如,以识别例如(a)sql语句集合,(b)任何相关联的执行上下文,诸如用户模式、(一个或多个)应用模块名称和(一个或多个)动作、绑定值列表,以及相关游标的sql编译环境,(c)相关联的基本执行统计信息,诸如经过时间、cpu时间、缓冲区获取、盘读取、已处理的行、游标提取、执行次数、完整执行次数、优化器成本和命令类型,和/或(d)每个sql语句的相关联执行计划和行源统计信息。此时不考虑任何不属于所选择的表的查询。对于与所选择的表有关的每个查询,获得并审查查询的执行计划,例如,以识别以下信息中的一些或全部:(a)语句引用的表的次序,(b)语句中提到的每个表的访问方法,(c)语句中受联接(join)操作影响的表的联接方法,和/或(d)数据操作,如过滤、排序或聚合。除了行源树之外,计划表还可以包含关于以下各项中的一项或多项的信息:(a)优化,诸如每个操作的成本和基数,(b)分区,诸如访问的分区集合,和/或(c)并行执行,诸如联接输入的分发方法。在一些实施例中,仅解析动作的输出就可以提供足够的信息,而无需经历整个解释计划过程。11.在谓词中频繁使用的列是分区键的良好候选者。这是因为在高度选择性的谓词中使用的列通常是最佳候选者,因为它们可以通过正确的分区提供最佳的性能改进。但是,通常需要工程工作来获得谓词选择性,尤其是对于联接谓词。因此,本发明的一些实施例识别并生成sql语句内的谓词计数,其中谓词计数然后用于找到候选分区键。注意的是,数据库内的数据库对象的基数数据也可以用在本发明的实施例中,其中基数信息对于确定应该将哪种类型的分区应用于特定列是有用的。可以使用规则集合来执行初始过滤步骤以去除次优候选方案。可以至少基于谓词和基数信息来识别候选分区方案集合。对于每一列,一些实施例中的方法考虑了几种可能的分区方法,包括区间/范围分区、散列分区和列表分区。候选分区方案是至少基于两个因素生成的,包括(a)查询中的谓词集合,以及(b)给定列内不同值的数量。为每个不同的候选分区方案识别分数,其中根据其相应的分数对候选者进行排名,并修剪候选者列表,使得只有候选者的子集进行到下一阶段以进行更详细的分析和考虑。关于评分,一种方法是查看有多少类型的谓词与表内的给定列相关联,并使用该信息对基于指定列的那些谓词类型的任何相关联分区方案进行评分。这种类型的计算可以指示通过为列实现某些类型的分区来获得的效率水平。12.基于它们相应的分数,在评估阶段评估前n个分区方案。对于每个候选分区方案,该处理创建空分区表,其具有从原始表克隆的列、索引和约束。由于空表被创建,这意味着没有为空表分配数据段。该方法为区间和自动列表候选者物化分区以匹配原始表中的数据。接下来,针对空分区表、它的分区、它的列和/或它的索引综合统计信息。由于该处理使用空分区表工作,这意味着虽然这些是已创建并存在于数据库数据字典中的真实表,但来自原始非分区表的全部实际数据在这个阶段不会被复制到这些表中。综合统计信息以提供数据供优化器采取行动。可以发生附加过滤动作以从考虑中去除具有可从统计信息合成处理中识别的次优结果的任何候选者。此时,可以编译用户工作负载,并由优化器针对具有综合统计信息的分区表估计工作负载的性能。可以提供机制,以在sql编译期间自动将一个表名转换成另一个表名。设置此机制以将原始表名转换成空分区表的名称。然后,使用sql性能分析来编译工作负载中的每个查询。在sql性能分析期间可以生成i/o成本计算。一旦sql性能分析完成,然后该处理就获得工作负载的总估计i/o,按执行次数进行加权,并将其用作候选方法的分数。13.提供了一种方法来实现候选分区方案并核实所选择的方案的益处。处理将所选择的分区方案实现为用生产数据填充的已实现分区表,然后针对分区表运行实际用户工作负载。然后收集执行工作负载的性能数据。在一个实施例中,为了评估性能,可以采取乐观方法——其中假设候选者将被接受。在这种情况下,对现有的非分区表进行修改以使用候选分区方案,并且将为所有现有查询启用上述优化器特征,以避免潜在的性能回退。该方法通过针对分区表运行查询来验证查询,从而允许优化器生成新计划。一旦证明没有回退,系统就允许查询用新计划为用户执行。在评估所有查询之后,汇总结果以量化分区方案对工作负载中所有查询的益处。将分区表的性能数据与原始表(例如,非分区表)的性能数据进行比较,并确定分区表是否提供了足够的益处,使得应保留该分区方案。如果该分区方案的性能被认为是可接受的,那么它被保留。否则,去除该分区方案,和/或从候选方案集合中选择另一个方案作为替代。14.另一个实施例提供了与区间/范围分区的自主实现有关的附加优化。所解决的问题是,实现区间分区的常规方法在用于自主分区时可能无法正确操作。本发明的实施例提供了一种执行自动区间分区的方法,其中本发明构思实现不对分区键列强加这些隐式约束的区间分区。建立自动区间,其中分区号不直接链接到分区中的数据。替代地,该方法在幕后使用自动列表分区功能,它提供了将单个值映射到分区号的能力,作为分区中的数据和分区号之间的间接层。范围包装层覆盖在强加在基表上的区间分区之上。在内部,底层数据实际上是作为列表分区实现的。映射层在逻辑上用于将范围分区映射到列表分区。为每个范围分区表创建虚拟列,其中虚拟列在逻辑上看起来与表中的任何其它列相同,但虚拟列中的值是由表达式派生或生成的,而不是以物理方式存储。虚拟列用于存储基于范围的分区的键值,它表示给定区间的规范值。在幕后,用于保持数据的实际表结构被实现为基于列表的分区。映射层用于将基于区间的分区键映射到底层的基于列表的分区。15.在各种实施例中,可以组合任何以上的任何组合从而以任何变体执行,并且预期以上元素的各方面的许多这样的组合。16.下面在具体实施方式、附图和权利要求中描述了本发明的各方面、目的和优点的进一步细节。前面的一般描述和下面的详细描述都是示例性和解释性的,并不旨在限制本发明的范围。附图说明17.附图图示了本发明的一些实施例的设计和实用性。应当注意的是,各图不是按比例绘制的,并且相似结构或功能的元件在所有图中由相似的附图标记表示。为了更好地理解如何获得本发明的各种实施例的上述和其它优点和目的,将参考在附图中图示的本发明的具体实施例对以上简要描述的本发明进行更详细的描述。理解这些附图仅描绘了本发明的典型实施例并且因此不应被视为对其范围的限制,将通过使用附图以附加的特异性和细节来描述和解释本发明,附图中:18.图1图示了用于实现本发明的一些实施例的系统。19.图2示出了实现本发明的一些实施例的方法的流程图。20.图3示出了根据本发明的一些实施例的生成多个候选分区方案的方法的流程图。21.图4示出了关于所考虑的表的查询的示例信息,该表提供了对生成不同候选者的评分有用的信息。22.图5示出了实现候选分区方案的评估阶段的方法的流程图。23.图6a-6h提供了某些上述处理步骤的说明性示例。24.图7示出了实现候选分区方案并核实所选择的方案的益处的方法的流程图。25.图8图示了本发明的某些实施例,其中建立自动区间,使得分区号不直接链接到分区中的数据。26.图9示出了根据本发明的一些实施例的设置和实现自动区间分区的处理的流程图。27.图10是适用于实现本发明的实施例的说明性计算系统的框图。28.图11是根据本发明的实施例的其中服务可以作为云服务来提供的系统环境的一个或多个组件的框图。具体实施方式29.在下文中参考各图描述各种实施例。应当注意的是,各图不一定按比例绘制。还应该注意的是,各图仅是为了便于对实施例的描述,而不是作为对本发明的详尽描述或对本发明的范围的限制。此外,图示的实施例不需要具有所示的所有方面或优点。结合特定实施例描述的方面或优点不一定限于该实施例并且可以在任何其它实施例中实践,即使未如此图示。此外,贯穿本说明书对“一些实施例”或“其它实施例”的引用意味着结合实施例描述的特定特征、结构、材料或特性包括在至少一个实施例中。因此,贯穿本说明书的各个地方出现的短语“在一些实施例中”或“在其它实施例中”不一定指相同的一个或多个实施例。30.如上所述,本公开所解决的问题是分区的手动实现通常充满可能的问题和错误,并且常规上仅由专家用户完成。为了解决这个问题,本发明的实施例提供了一种用于在数据处理系统中自主实现分区而不需要用户方面的任何专业知识的方法。31.图1图示了用于实现本发明的一些实施例以在数据处理系统中自主实现分区的系统。系统100(其可以被实现为数据库管理服务器)包括数据库120,该数据库120具有由系统内的一个或多个客户端操作的一个或多个表。客户端处的一个或多个用户可以操作用户站来发出要由数据库120对表进行处理的命令。托管数据库的用户站和/或服务器包括可以用于实现、操作或与数据库系统100接口的任何类型的计算设备。这种设备的示例包括例如工作站、个人计算机、移动设备、服务器、主机、节点或远程计算终端。用户站包括显示设备,诸如显示监视器,用于在用户站处向用户显示用户界面。用户站还包括用于用户提供对系统100的活动的操作控制的一个或多个输入设备,诸如用于操纵图形用户界面中的指向对象以生成用户输入的鼠标或键盘。32.通过提交使数据库对数据库数据执行操作的命令,与数据库发生交互。为了让数据库服务器处理命令,命令通常符合数据库服务器支持的数据库语言。许多数据库服务器支持的常用数据库语言的一个示例称为结构化查询语言(sql)。33.当数据库服务器(例如,从数据库应用)接收到数据库命令的原始语句时,数据库服务器必须首先确定应执行哪些动作来响应数据库命令,然后执行这些动作。查询处理器可以处理数据库语句以准备在数据库内执行期望动作所需的行动(arts)。分析数据库语句并将其分解成其组成部分的初始动作可以被称为“解析”数据库命令。然后可以执行数据库命令的“编译”以创建针对所描述的数据库对象的(一个或多个)集合所采取的特定动作组合和序列,以及创建数据库语句的可执行版本可能需要的代码生成。由于在数据库内可以采用多个替代处理路径来实现相同的结果,因此可以执行“优化”以识别可以被选择以提高数据库命令的处理效率的特定处理路径。应用于数据库的动作的实际执行通常被称为“执行”数据库命令。34.如图所示,数据库可以包括一个或多个非分区表110a。如果可以将非分区表110a转换成分区表110b,那么可能存在许多优化和优点,因为分区可以通过提高性能、可管理性和可用性为各种各样的应用提供巨大的益处。分区将某些查询或维护操作的性能提高一个数量级并不罕见。此外,分区可以极大简化常见的管理任务。35.例如,可以应用分区修剪来显著改进数据库系统中的性能。如果针对表发出数据库查询并且查询包含由与分区标准对应的某个范围或值限制的搜索项,那么仅搜索具有期望范围或值的分区;期望范围之外的所有其它分区从搜索中被修剪。分区修剪通常可以将查询性能提高几个数量级。例如,假设应用包含表,该表包含订单历史记录,并且该表已按星期进行分区。请求单个星期的订单的查询将只访问该订单表的单个分区。如果订单表有2年的历史数据,那么这个查询将访问一个分区而不是104个分区,这可能会因为分区修剪而使计算系统的执行速度快100倍。36.分区还可以通过使用称为逐分区联接的技术来提高多表联接的性能。当两个表被联接在一起并且两个表都在联接键上进行分区时,或者当引用分区表与其父表联接时,可以应用逐分区联接。逐分区联接将大联接分解成每个分区之间发生的较小联接,从而在更短的时间内完成整体联接,同时还减少了空间需求。这为串行和并行执行提供了显著的性能益处。37.分区还允许将表和索引分区为更小、更易于管理的单元,从而为数据库管理员提供采用“分而治之”方法进行数据管理的能力。通过分区,维护操作可以集中在表的特定部分。例如,数据库管理员可以备份表的单个分区,而不是备份整个表。对于跨整个数据库对象的维护操作,可以在每个分区的基础上执行这些操作,从而将维护处理划分为更易于管理的块。为可管理性而使用分区的示例是支持数据仓库中的“滚动窗口”加载处理。例如,考虑如果dba每星期将新数据加载到表中。可以对该表进行分区,使得每个分区包含一星期的数据。加载处理只是使用分区交换加载添加新分区,其中添加单个分区比修改整个表高效得多,因为dba不需要修改任何其它分区。38.分区数据库对象还提供分区独立性。分区独立性的这一特性可能是高可用性策略的重要部分。例如,如果分区表的一个分区不可用,那么该表的所有其它分区都保持在线且可用。应用可以继续对表的可用分区执行查询和事务,并且这些数据库操作将成功运行,前提是它们不需要访问不可用的分区。39.在许多数据库系统中,数据库管理员还可以指定将每个分区存储在单独的表空间中,其中表空间存储在不同的存储层上。在不同的表空间中存储不同的分区允许数据库管理员对每个单独的分区执行备份和恢复操作,而与表中的其它分区无关。这允许数据库的活动部分更快地可用,以便可以继续访问系统,同时仍在恢复非活动数据。此外,分区可以减少调度的停机时间。分区提供的性能增益可以使数据库管理员能够在相对小的批处理窗口中完成对大数据库对象的维护操作。40.对于本发明的实施例,自动分区器130在系统100中操作以实现非分区表110a的自动分区。特别地,自动分区器130接收关于非分区表110a的某些信息。例如,一些实施例收集诸如关于表本身的数据(例如,表的大小、表模式信息,和诸如基数统计信息之类的表统计信息)的信息、关于针对表应用的工作负载的信息(例如,作为用户工作负载的一部分应用到表的sql语句以及用于sql语句的执行计划的解释),以及从针对非分区表110a运行工作负载时捕获的关于性能度量的信息。41.自动分区器130使用收集到的信息来生成多个候选分区方案140a-140n。多个候选分区方案140a-140n中的每一个都属于将非分区表110a潜在地分区成分区表110b的不同方法。候选分区方案140a-140n可以涵盖不同的分区方法,这些方法包括不同类型的分区,以及基于给定表内的不同列(例如,(一个或多个)分区键)的分区。42.分区方案选择器132操作以从多个候选分区方案140a-140n中进行选择,以选择预计提供最佳系统性能的候选方案之一。注意的是,在这个阶段,候选分区方案140a-140n尚未实现为具有来自主数据库系统中的表的所有生产数据的完全填充的表。替代地,如下面将更详细描述的,候选方案在这个阶段被实现为当前为空的真实表,其中综合统计信息用于预计和估计每个候选方案的预期性能。43.然后所选择的分区方案将在数据库系统内实际实现,其中创建新的分区表并用真实的生产数据进行填充。实际用户工作负载将针对填充的分区表运行,以收集来自所选择的分区方案的应用的真实世界执行结果,并将这些结果与先前非分区数据库表的性能进行比较。然后所选择的分区方案可以被验证为是成功的,或者如果不成功则退出。在一个实施例中,如果成功,那么将分区应用于用户的表,而如果拒绝,那么“退出”处理是丢弃新表。44.当前方法的输入是工作负载和要分区的表的名称。假设系统包括被分区表的准确的统计信息,并且可以查询工作负载中引用的表。45.图2图示了实现本发明的一些实施例的方法的高级流程图。如该图中所示,该方法被设置为3阶段流水线。在阶段202处,该处理生成多个候选分区方案。如前所述,每个候选分区方案可以涵盖包括不同类型的分区的不同分区方法。实现分区的具体方式一般被称为“分区方案”。分区方案由(a)分区方法、(b)分区键列,以及(c)分区边界集合来描述。正是这种方法、键和边界的组合定义了分区方案。因此,对这些项目中的至少一项进行修改会创建独特且独立的分区方案。46.可以应用任何数量的不同分区方法来对数据库对象/表进行分区,诸如:(a)范围分区、(b)散列分区,或(c)列表分区。这些方法中的每个方法都用作数据分布方法,该方法控制如何将数据放置到各个分区中,其中分区表中的每一行都明确地分配给单个分区。47.范围分区基于为每个分区建立的分区键的值的范围将数据映射到分区。这是非常常见的分区类型,并且通常与日期一起使用。例如,对于以日期列作为分区键的表,其中分区边界被配置为对应于不同的每月分区,“2018年1月”分区将包含分区键值从2018年1月1日到2018年1月31日的行。48.散列分区用于基于应用于分区键的散列算法将数据映射到分区。如果设计正确,那么散列算法会在分区(例如,散列桶)之间均匀分布行,从而使分区大小大致相同。由此,这种类型的分区是跨存储/处理设备均匀分布数据的好方法。49.列表分区允许通过在每个分区的描述中为分区键指定离散值的列表来明确控制如何将行映射到分区。列表分区的优点是这种方法可以对无序和不相关的数据集进行分组和组织。50.分区键由每个分区方法引用,并且由一个或多个列组成,这些列确定将存储每行的分区。数据库会通过使用分区键自动对合适的分区实现插入、更新和删除操作。51.分区边界为与行如何映射到不同分区对应的分区键指定值。例如,对于列表分区,边界可以是与给定分区相关的一个或多个特定值。作为另一个示例,关于范围分区,每个分区可以具有“valueslessthan”子句,它为分区指定非包含性的分区上界。任何等于或高于此字面(literal)的分区键值都将被添加到更高的分区。可能有多个更高的分区,并且高于part1边界的值可以进入到part2或part3或partn中。除第一个分区外,所有分区都具有由前一个分区的“valueslessthan”子句指定的隐式分区下界。可以为最高分区定义“maxvalue”数据项,该数据项表示虚拟无限值,其排序高于分区键的任何其它可能值。52.在阶段204处,该处理评估不同的候选分区方案。如前所述,此阶段的候选方案被实现为当前为空的真实表,其中综合统计信息用于预计和估计每个候选方案的预期性能。因此,可以将实际工作负载与综合统计信息组合编译和使用,以估计每个候选分区方案的性能。53.例如,可以采用的一种方法是使用综合统计信息、针对候选分区表分析编译的工作负载,以估计在由客户工作负载操作时预计为每个候选分区方案执行的i/o量,并识别预计产生最低总i/o的候选分区方案。54.在阶段206处,该处理在数据库内实现所选择的分区方案。执行实际工作负载以针对已在实现的表分区内填充的真实数据来量化工作负载的实际性能。在当前实施例中,测量的性能用于检查例如以下中的一项或多项:(a)核实和量化分区带来的任何益处;和/或(b)核实工作负载中没有查询回退。55.第一阶段和第二阶段用于识别建议的分区方案,并且在一些实施例中,可以在没有第三阶段的情况下运行以获取建议而不实际实现建议。建议阶段可以周期性地运行,每次都使用最新的工作负载和表统计信息。然后,当建议收敛时(例如,候选者连续n次被认为是好的),处理/用户然后可以选择继续第三阶段。在接受候选方案后,可以继续周期性地运行建议阶段,以检查所选择的方案是否随着工作负载的演进仍然是良好的选择。56.注意的是,任何上述处理动作都可以在生产环境或测试环境中实现。只有实际实现被认为有益且可接受的分区方案的最后阶段才需要在生产环境中实现(作为生产环境中现有表的替代)。57.图3示出了根据本发明的一些实施例的生成多个候选分区方案的方法的流程图。在302处,识别数据库内的一个表以进行可能的分区。在这个阶段可以采取任何合适的方法来识别用于评估的表。例如,一种方法是排除已由用户以特定方式分区的任何表。另一种方法是选择当前未分区的(例如,基于行数/数据量)具有最大大小的表。58.在一些实施例中,实现分区的成本(例如,在系统内移动数据以实现给定的分区方案的成本)可以与实现新分区方案的可能收益相平衡,以便为自动分区处理选择表。执行分区的任何成本的投资回报都可能通过更频繁访问的表的效率增益来更快地恢复,而不频繁访问的表可能不值得付出努力和花费资源对很少访问的表进行分区。因此,一些实施例可以考虑表的历史访问模式以预计未来的预期使用并识别可能为选择分区提供最大效率增益的特定表。59.可以采取任何合适的方法来发起分区处理以识别用于自动分区的表。一种可能的方法是让用户手动识别要分区的表。另一种方法是自动识别和自动触发分区处理。例如,对于当前未分区的表,可以通过将表辨识为达到指定阈值大小、在工作负载中接收到针对该表的阈值数量的查询,或将指示可能潜在地从分区中受益的表的任何其它因素或因素组合来触发该处理。对于已经分区的表,例如,如果该表的分区数量达到被认为过多的阈值数量、如果单个分区的大小达到阈值大小,和/或将指示可能潜在地从重新分区中受益的表的任何其它因素或因素组合,那么可以触发该处理。此外,可以将数据库模式配置为建立黑名单和/或白名单参数,以指定自动分区处理应该或不应该解决的特定表。60.接下来,可以对实际引用所选择的表的用户工作负载内的查询进行识别。例如,在oracle公司提供的数据库产品内,可以引用称为“sql调整集合(sqltuningset)”或“sts”的数据库对象来识别属于给定数据库表的sql语句集合。sts可以包括由自动分区器使用的多项信息,诸如例如(a)sql语句集合,(b)任何相关联的执行上下文,诸如用户模式、(一个或多个)应用模块名称和(一个或多个)动作、绑定值列表,以及相关游标的sql编译环境,(c)相关联的基本执行统计信息,诸如经过时间、cpu时间、缓冲区获取、盘读取、已处理的行、游标提取、执行次数、完整执行次数、优化器成本和命令类型,和/或(d)每个sql语句的相关联执行计划和行源统计信息。此时不考虑任何不属于所选择的表的查询。61.对于属于所选择的表的每个查询,在步骤306处,获得并审查针对该查询的执行计划。例如,在oracle公司提供的数据库产品内,可以使用“explainplan”方法来识别和审查执行计划。此命令识别数据库优化器为实现sql语句而选择的执行计划。语句的执行计划是数据库为运行该语句而执行的操作序列。行源树是执行计划的核心。它显示以下信息:(a)语句引用的表的次序,(b)语句中提到的每个表的访问方法,(c)语句中受联接操作影响的表的联接方法,和/或(d)数据操作,如过滤、排序或聚合。除了行源树之外,计划表可能包含关于以下中的一项或多项的信息:(a)优化,诸如每个操作的成本和基数,(b)分区,诸如访问的分区集合,和/或(c)并行执行,诸如联接输入的分发方法。在一些实施例中,仅解析动作的输出就可以提供足够的信息,而无需经历整个解释计划(explainplan)过程。62.在谓词中频繁使用的列是分区键的良好候选者。这是因为在高度选择性的谓词中使用的列通常是最佳候选者,因为它们可以通过正确的分区提供最佳的性能改进。但是,通常需要工程化工作来获得谓词选择性,尤其是对于联接谓词。63.因此,本发明的一些实施例识别并生成sql语句内的谓词计数,然后使用谓词计数来找到候选分区键。explainplan功能可以用于为每个语句提供谓词信息,它解释工作负载中的每个查询一次,然后使用查询的执行计数来计算每个谓词执行的表扫描次数。此时,已经生成谓词数据320,其识别每个相关sql语句的所有谓词的集合。64.注意的是,数据库内的数据库对象的基数数据322也可以用在本发明的实施例中。数据基数是指给定列中不同值的数量。基数信息对于确定应将哪种类型的分区应用于特定列是有用的。在一些实施例中,在本发明中使用的基数数据322可以从已经被数据库系统的查询优化器维护和使用的数据库统计信息中获得。65.在312处,可以使用规则集合来执行初始过滤步骤以去除次优候选方案。例如,一般而言,如果列的基数太低(例如,低于指定阈值),那么散列分区将不是最佳选择,因此可能从考虑中被过滤掉。这是因为这种方法不能在散列桶上提供良好的分布。另一方面,如果独特值的数量太高(例如,高于指定阈值),那么列表分区将不是实现分区的最佳方法,因为这相对于数据量会产生太多分区。66.在314处,现在可以至少基于谓词和基数信息来识别候选分区方案集合。对于每一列,一些实施例中的方法考虑了几种可能的分区方法,包括区间/范围分区、散列分区和列表分区。候选分区方案是至少基于两个因素生成的,包括(a)查询中的谓词集合,以及(b)给定列内不同值的数量。例如,对于等式谓词,在仔细考虑基数数据的情况下,可以适当地使用任何分区方法。作为另一个示例,对于范围谓词,可以使用范围分区或列表分区,但散列分区可能不是最优的。67.如果分区键是自身适合于值范围的类型,并且特别是如果谓词是针对该分区键的基于范围的谓词,那么考虑区间分区(也称为范围分区)。作为示例,诸如date、timestamp或number数据类型之类的分区键通常可能适用于区间分区。区间分区要求系统为第一分区指定边界,该边界充当计算其它分区以及区间的大小的锚点。在一些实施例中,对于date和timestamp数据类型,该方法查询表以获取分区键的第一百分位值(从而丢弃异常值),例如,其中区间大小始终为1个月,并且第一分区边界是四舍五入到当月1日的第1个百分位。对于number数据类型,该方法查询表以获取分区键的第1个和第99个百分位值(从而丢弃异常值);区间大小为(第99百分位-第1百分位)/n,四舍五入到2位有效数字。这里的n是控制表的分区数的参数。在一个实施例中,至少部分地基于表的大小来计算n。例如,可以配置n,其中n=(表的大小/10gb);如果n《8,那么n=8;如果n》1024,那么n=1024。第一分区边界是第一个百分位,四舍五入到区间的倍数。68.应当注意的是,实现区间分区的某些方法可能具有阻止它们在数据不可预测的云环境中自主使用的限制。具体而言,某些实现中的区间分区键不能为null,并且可能具有隐式上界。如下面关于图8和图9更详细讨论的,本发明的一些实施例使用虚拟列和listautomatic分区来实现区间分区以解决这些问题。69.在一些实施例中,如果列具有大于或等于特定数量的不同值(例如,64个不同值)并且在列上存在相等谓词,那么考虑散列分区。在实施例中,如果独特值的数量大于32,那么处理将考虑散列分区作为选项。但是,在某些实施例中,如果针对该列仅识别范围谓词,那么不考虑散列分区。70.在一些实施例中,如果列具有可接受范围内的多个不同值(例如,至少4个并且最多128个不同值),那么考虑列表分区。该范围在定义的一组分区上提供合理的数据分布。在一些实施例中,如果独特值的数量小于64,那么处理将考虑列表分区作为选项。71.在步骤316处,为每个不同的候选分区方案识别分数。在步骤318处,基于候选者各自的分数对候选者进行排名,并且修剪候选者列表,使得只有候选者的子集进入下一阶段以进行更详细的分析和考虑。72.关于评分,一种方法是查看有多少类型的谓词与表内的给定列相关联,并使用该信息对基于指定列的那些谓词类型的任何相关联的分区方案进行评分。这种类型的计算可以指示通过为列实现某些类型的分区来获得的效率水平。例如,如果第一列只有单个谓词,但第二列有一百个谓词,那么与第一列相比,分区可能会为第二列产生更有效的结果。73.图4示出了关于正在考虑的表的查询的信息的示例表402,该表提供了对于为不同候选者生成评分有用的信息。每行识别sql语句内属于表内的列的不同谓词。这里,表的前四行识别各种sql语句(sql1-4)和属于a列的谓词,第五行识别具有属于b列的谓词的sql语句(sql5),并且第六行识别具有属于c列的谓词的sql语句(sql6)。74.假设第一候选分区方案具有与a列对应的分区键并且使用与前四行(sql1-4)的谓词对应的分区类型。在这种情况下,可以给候选者“4”的分数,以识别存在与该候选分区方案相关联的四个谓词的事实。假设第二候选分区方案具有与b列对应的分区键,并使用与第五行的谓词对应的分区类型(sql5)。在这种情况下,可以给第二候选者“1”的分数以反映存在与该候选分区方案相关联的单个谓词的事实。类似地,假设第三候选分区方案具有与c列对应的分区键,并使用与第六行(sql6)的谓词对应的分区类型。在这种情况下,也可以给第三候选者“1”的分数,以反映存在与该候选分区方案相关联的单个谓词的事实。在这种情况下,可以基于它们的分数对候选者进行排名,并且与a列相关联的第一候选者将由于该候选者与最多数量的谓词相关联而收到最高分数。注意的是,在一些实施例中,上述谓词计数可以通过sql的执行计数来加权。75.基于它们各自的分数,前n个分区方案在评估阶段被评估。图5示出了为候选分区方案实现评估阶段的方法的流程图。对于每个候选分区方案,步骤506处的处理创建空分区表,具有从原始表克隆的列、索引和约束。由于空表被创建,这意味着没有为空表分配数据段。该方法为区间和自动列表候选者物化分区以匹配原始表中的数据。例如,这可以通过使用ddl“createtableforexchange”创建空的分区表作为原始表的克隆来实现。该ddl负责克隆具有精确列属性的表以及复制约束。此外,在一些实施例中,该ddl还克隆原始表上的索引。这将创建空分区表,具有列、约束和索引的精确副本。76.接下来,在步骤508处,为空分区表、它的分区、它的列和它的索引综合统计信息。由于该处理使用空分区表工作,这意味着即使这些是已创建并存在于数据库数据字典中的真实表,但来自原始非分区表的全部实际数据在这个阶段不会被复制到这些表中——因此对这些表的引用为“空”。如果手头没有真实数据,那么数据库引擎(例如,数据库优化器)将需要具有可以对其采取行动以评估这些空表的某个数据集。对于当前实施例,这意味着统计信息被“综合”以提供该数据以供优化器采取行动。77.在一些实施例中,为空分区表综合统计信息,其中表统计信息从原始表复制——但在相应候选分区方案的分区结构的上下文中构建。这可以例如当使用可从oracle公司获得的数据库产品时,通过使用诸如dbms_stats.get_table_stats和dbms_stats.set_table_stats之类的命令来完成。78.分区统计信息诸如当使用可从oracle公司获得的数据库产品时,通过使用dbms_stats.get_table_stats和dbms_stats.set_table_stats命令被构建为原始表的统计信息的一部分。在操作中,运行查询以识别每个分区中的行数和整个表中的行数。此后,统计信息的缩放因子为“number_of_rows_in_partition/number_of_rows_in_table”。可以对许多属性执行缩放,诸如行数(numrows)、块数(numblks)和/或高速缓存块(cachedblk)属性。79.可以使用dbms_stats.get_column_stats和dbms_stats.set_column_stats从原始表中复制列统计信息。使用dbms_stats.get_index_stats和dbms_stats.set_index_stats从原始索引复制索引统计信息。80.注意的是,在一些实施例中,不需要针对rowid长度的变化调整统计信息。例如,非分区表上的索引将有6字节的rowid,并且分区表上的全局索引将有10字节的rowid,但当前的方法将使用这两个索引的相同统计信息。81.可以发生附加过滤动作以从考虑中去除具有可从统计信息合成处理中识别的次优结果的任何候选者。例如,在综合统计信息之后,处理可以可选地被配置为拒绝可能导致超过1/3的行进入一个分区的候选者。这是为了避免由于分区倾斜而导致的性能问题,以及由于大段大小可能导致的可维护性问题。82.此时,可以编译用户工作负载并且由优化器针对具有综合统计信息的分区表估计工作负载的性能(510)。需要面对的一个问题是,工作负载中的sql语句可能正在引用原始表对象,而不是与候选分区方案对应的新创建的表对象。解决此问题的一种方法是提供一种机制,在sql编译期间自动将一个表名转换成另一个表名。设置此机制以将原始表名转换成空分区表的名称。然后,使用sql性能分析来编译工作负载中的每个查询。在sql性能分析期间可以生成i/o成本计算(512)。83.一旦sql性能分析完成,那么该处理就获得按执行计数加权的工作负载的总估计i/o,并将其用作候选者方法的分数。在一些实施例中,不使用常规io_cost度量来评估候选分区方案,因为它们可能不考虑某些分区修剪方法,诸如子查询修剪或布隆修剪。因此,一些实施例可以对空分区表上的表扫描采用自定义io_cost度量,其中io_cost被计算为存储在计划中的度量。度量可以通过找到表中将被访问的所有分区来计算,其中处理将查看绑定以找到被访问的分区集合。然后,使用分区级别的统计信息,该处理将对这些分区中的块数求和,并且这个总和就是io_cost度量。84.关于布隆修剪,考虑分区事实表和非分区维度表之间存在联接的情况,其中联接键是事实表的分区键。例如,考虑以下查询:85.select...fromfactf,dimd86.wheref.partition_key=d.key87.andd.attribute《1000;88.这种类型的查询通常会使用布隆修剪来将事实表的扫描限制为与扫描维度表时找到的联接键匹配的分区。传统上,布隆修剪仅在执行查询时执行,因此在优化器成本模型中根本没有考虑。89.由此,当尝试使用优化器来估计具有综合统计信息的空分区表的性能时,常规的优化器可能因此无法考虑布隆修剪。例如,在数据仓库环境中,许多查询通常使用布隆修剪。因此,当前处理在计算候选分区方案的估计i/o时应考虑这种修剪。90.为了解决这个问题,当前实施例实现了一种机制,该机制对维度表运行递归查询以找到将产生的联接键。给定联接键,处理可以找到包含联接键的事实表的分区。继续上面的示例,可以生成以下:91.selectdistincttbl$or$idx$part$num(fact,0,0,0,d.key)92.fromdimdwhered.attribute《1000;93.该查询返回布隆修剪将返回的分区集合。即使维度表上没有过滤谓词,当前处理也可以生成该查询。94.在处理完所有候选者之后,516处的处理将按照估计的i/o的降序对候选者进行排序,并将使用最高的结果作为分区方案的建议方法。95.图6a-6h提供了某些上述处理步骤的说明性示例。图6a示出了当前未分区的示例表602。该表602是非常简单的结构,具有当前有十行的单列(“salary”列)。96.图6b示出了已经为表602识别出的示例候选分区方案604。特别地,候选者分区方案604描述了具有区间“2”和识别为“2”的第一上边带(band)的范围分区方案。97.如果该分区方案实际应用于表602,那么产生结果将如图6c-g中所示的分区。具体而言,如图6c中所示,分区p1被定义为包括salary列中的值小于值“2”的所有行,因此表602中的第一、第四和第九行将用于填充分区p1。如图6d中所示,分区p2被定义为包括在salary列中的值小于值“4”的所有行,因此表602中的第五和第七行将用于填充分区p2。如图6e中所示,分区p3被定义为包括salary列中的值小于值“6”的所有行,因此表602中的第二和第十行将用于填充分区p3。如图6f中所示,分区p4被定义为包括salary列中的值小于值“8”的所有行,因此表602中的第三和第八行将用于填充分区p4。最后,如图6g中所示,分区p5被定义为包括salary列中的值小于值“10”的所有行,因此只有表602中的第六行将用于填充分区p5。98.出于本发明的目的,空分区将保持“空”并且实际上不填充真实数据。替代地,如图6h中所示,来自原始表602的数据将被逻辑分析,就好像分区实际上已填充如608中所示,但实际上将仅用于综合统计信息集合,诸如该图中所示的统计信息610。如果分区实际填充有原始数据,那么这些分区级别统计信息610将在分区的基础上识别来自原始表602的将被放置到每个分区中的行数。例如,表610中的第三列识别候选分区方案中每个分区的行数。基于综合统计信息,可以为候选分区方案建立一个或多个性能度量。例如,如统计信息610的第四列中所示,可以通过计算给定分区的行的相对百分比并乘以数据库对象的大小(s)来估计与每个分区对应的块数。以这种方式,使用分区级别的统计信息,处理可以对候选分区方案的跨分区的块数求和,并且该总和可以用于提供用于评估分区方案的io_cost度量。在一些实施例中,获得io_cost的求和处理跨越将由每个查询扫描的分区,其中由于分区修剪,并非所有分区都将被扫描。基于每个方案的io_cost度量,可以将在i/o方面具有最佳估计性能的方案识别为要在下一阶段处理中实现的特定方案。99.图7示出了实现候选分区方案并核实所选择的方案的益处的方法的流程图。在702处,处理将所选择的分区方案实现为填充有生产数据的已实现分区表。在704处,然后针对分区表运行实际用户工作负载。然后在706处收集执行工作负载的性能数据。100.对于这个当前实施例,为了评估性能,可以采取乐观的方法——假设候选者将被接受。在这种情况下,对现有的非分区表进行修改以使用候选分区方案,并且将为所有现有查询启用上述优化器特征,以避免潜在的性能回退。该方法通过针对分区表运行查询来验证查询,从而允许优化器生成新计划。一旦证明没有回退,系统就允许查询用新计划为用户执行。在评估所有查询之后,汇总结果以量化分区方案对工作负载中所有查询的益处。101.在步骤708处,然后将分区表的性能数据与原始表(例如,非分区表)的性能数据进行比较。在710处确定分区表是否提供足够的益处,使得应该保留该分区方案。在一些实施例中,性能改进应该增加至少20%才能被认为提供足够的益处来保留所提出的分区方案。如果分区方案的性能被认为是可接受的,那么在步骤712处将其保留。否则,在714处,去除该分区方案,和/或从候选方案集合中选择另一个方案作为替代。102.本文档现在将描述与用于区间/范围分区的自主实现相关的附加优化。被解决的问题是,实现区间分区的常规方法在用于自主分区时可能无法正确操作。如前所述,区间分区是一种在插入数据时在范围分区表中创建分区的方法。在一些实现中,该方法包括对区间分区表的分区键的两个隐式约束:(i)分区键列不可为空;以及(ii)分区键列具有隐式上限。换句话说,一些常规的实现区间分区的方法不能让分区键为空值,并且也不能处理超过该值上限的值。对于可以预期表中数据的应用开发人员来说,这些隐式约束通常不是问题。但是在数据不可预测并且可以随时间以任意方式更改的自主环境中,这些约束可能会阻止系统对用户表使用区间分区。103.注意的是,分区层可以在内部使用分区号来识别分区。例如,分区修剪的工作原理是找到与查询相关的分区集合,并将这些分区号返回给执行扫描的行源。104.常规区间的限制是由分区号与分区中的值链接的实现方法引起的。从概念上讲,如果值x进入到分区号y中,那么值x*10进入到分区号y*10中。即使x和x*10之间没有数据也是如此。但是,分区号是有限的资源,它可能是有限的。因此,基于分区中的数据指派分区号的决定具有隐式限制可以支持分区键的最大值的结果。由于null排序高,这也意味着不能为分区键插入null。105.本发明的实施例提供了一种执行自动区间分区的方法,该方法解决了这些问题,其中本发明构思实现了不对分区键列强加这些隐式约束的区间分区。106.如图8中所示,在本发明的某些实施例中,建立了自动区间,其中分区号不直接链接到分区中的数据。替代地,该方法在幕后使用自动列表分区功能806,它提供了将单个值映射到分区号的能力,作为分区中的数据和分区号之间的间接层。107.具体而言,范围包装层804覆盖在强加在基表802上的区间分区之上。在内部,底层数据实际上是作为列表分区806实现的。映射层在逻辑上用于将范围分区映射到列表分区。108.图9示出了根据本发明的一些实施例的设置和实现自动区间分区的处理的流程图。在902处,为预期范围分区识别分区键列。为数据库表配置基于范围的分区方案。109.作为基于范围的分区的模式配置的一部分,在步骤904处为每个范围分区表创建“虚拟列”。虚拟列在逻辑上看起来与表中的任何其它列相同,但虚拟列中的值是由表达式派生或生成的,而不是以物理方式存储的。虚拟列用于存储基于范围的分区的键值,它表示给定区间的规范值。110.但是,在幕后,在步骤906处,用于保持数据的实际表结构被实现为基于列表的分区。在908处,使用映射层将基于区间的分区键映射到底层的基于列表的分区。111.如上所述,将虚拟列添加到原始用户的表中,并使用被评估的自动区间方案创建空分区表。这意味着在分区方案被评估为有用与否之前,当前的方法可能会以某种方式潜在地影响用户的原始表/应用。为了解决这个问题,一些实施例提供了一种方法来允许系统通过使用表达式来直接分区。112.为了解释,考虑创建用于对分区方案进行评分/评估的表的一种可能方法是采用以下:113.createtabley(aint);114.insertintoyvalues(1);115.insertintoyvalues(100);116.insertintoyvalues(123);117.commit;118.altertableyadd(vcinvisibleas(sys_op_interval_high_bound(a,100,0)));119.createtableyexchpartitionbylist(vc)automatic(partitionp_nullvalues(null))forexchangewithtabley;120.使用按表达式进行分区的当前方法,该示例现在可以使用以下来实现:121.createtabley(aint);122.insertintoyvalues(1);123.insertintoyvalues(100);124.insertintoyvalues(123);125.commit;126.createtableyexchpartitionbylist(sys_op_interval_high_bound(a,100,0))automatic(partitionp_nullvalues(null))forexchangewithtabley;127.使用这种方法,现在可以创建表而不会以任何方式影响原始用户的表,因为虚拟列是作为创建表ddl的一部分自动创建的。在验证用户工作负载的分区方案后,在对原始表实际实现分区方案时也可以使用相同的想法:128.altertableymodifypartitionbylist(sys_op_interval_high_bound(a,100,0))automatic(partitionp_nullvalues(null))129.此变更表ddl将在内部自动创建虚拟列。无需预先添加vc然后对表进行分区的额外步骤。130.此外,当分区键映射到区间时,为区间选择规范值,并且该规范值与自动列表分区一起使用以找到分区。为了与范围分区保持一致,该方法选择区间的上界作为区间的规范值。例如,如果区间大小为100,那么值123将映射到区间[100,200),并且此区间的规范值为200。从概念上讲,这类似于使用虚拟列的自动列表分区。[0131]以下是具有初始分区且没有固定点定义的语法示例:[0132][0133]使用列表分区,不要求分区按其值排序,本发明的方法也不要求在其值中具有间隙的分区之间的分区号间隙。因此,当为n个区间创建分区时,该方法将使用分区号1..n,即使一个区间是#1并且另一个区间是#1,000,000,000。[0134]注意的是,目录视图中的high_value对于常规区间表和自动区间表将是相同的。除此之外,此方法表示用于规范计算的区间,它不要求或定义该区间是否以0、1或任何其它任意值开头。[0135]一些实施例属于没有范围部分的自动区间。由于该方法不受分区号的限制,因此可以支持自动区间,而无需任何范围分区或任何用户指定的用于区间计算的锚点。但是,可以使用固定点来正确计算区间边界,类似于区间分区表中的过渡点。对于数字日期类型,可以从任意数字,诸如0,开始计算区间。对于日期/时间数据类型,可以计算从任意日期开始的区间,诸如2000年1月1日。注意的是,自动区间在处理锚点之前的值时没有问题;值-1234将映射到具有规范值-1200的区间[-1300,-1200),并且此区间与任何其它区间一样有效。[0136]一些实施例可以使用诸如以下语法的方法来创建没有范围分区的自动区间分区表,其中以下是没有初始分区并且没有固定点定义的语法示例:[0137]createtableauto_interval(iint,jint)[0138]partitionbyrange(i)interval(100)automatic;[0139]与较早的语法不同,这并不表示初始表创建时间的单个分区。这种语法将创建其中一个分区用于null值,而不管分区键是否可为空的表。范围分区和区间分区之间没有过渡点或区别——表中的所有分区都是区间分区。[0140]在丢弃常规区间分区表的最终范围分区后,可以隐式地将表转换成自动区间分区表。[0141]与常规区间相比,自动区间的当前实施例有许多优点,包括:(1)分区键没有隐式notnull约束(2)分区键没有隐式上限(3)具有无范围分区的区间分区,然后droppartition不需要分区重新编号(4)可以在任何时间点创建分区(addpartition)。[0142]在实现方法方面,一些实施例包括用于将分区键映射到区间号,然后使用散列表来获得该区间号的分区号的分区逻辑。系统可以处理区间部分中的范围谓词。为此,可以采用类似于用于列表分区的方法,具有以下数据结构:(a)区间部分中分区边界的排序数组,和/或(b)分区号的并行数组。[0143]这些数据结构中的搜索不同于列表分区搜索,因为区间大小是相关的,例如,如果谓词是col《x,并且区间大小是i,那么返回具有上界《(x i)的分区.[0144]列表分区可以为范围谓词产生不连续的分区集合,并且这种相同的方法可以用于自动区间表中的范围谓词。当物化新的分区时,系统可以使用其中分区由键值识别的自动列表方法逻辑,而不是其中分区由分区号识别的区间方法。[0145]一些实施例提供了一种方法来实现对区间计算的固定点的定义——显式的或隐式的。区间计算的固定点可以隐式设置或使得用户可控。假设该功能将成为仅自主的,那么可以实现和/或强制执行隐式定义。在一些实现中,不应该要求用户做出数据放置决策(他们可以像在非管理环境中那样通过显式控制的分区来这样做)。隐式声明的固定点可以是:(a)数值0,和/或(b)日期/时间戳列的日历年的第一天。[0146]因此,所描述的是一种改进的方法来执行自动分区,而不需要用户方面的任何专业知识。提供了三阶段处理流水线来生成候选分区方案、使用空的真实表结构评估候选分区,然后使用生产数据实现所选择的方案以进行评估。[0147]此外,已经描述了一种用于执行自动区间分区的改进方法,其中本发明构思实现了不对分区键列强加这些隐式约束的区间分区。该方法可以在其运行时自动捕获用户的工作负载。此外,当无法预测未来数据时,可以使用新的分区方法对表进行区间分区。可以通过在用户环境中应用推荐之前针对分区表执行工作负载来验证推荐。[0148]系统体系架构[0149]图10是适用于实现本发明的实施例的说明性计算系统1500的框图。计算机系统1500包括总线1506或用于传送信息的其它通信机制,其互连子系统和设备,诸如处理器1507、系统存储器1508(例如,ram)、静态存储设备1509(例如,rom)、盘驱动器1510(例如,磁性或光学)、通信接口1514(例如,调制解调器或以太网卡)、显示器1511(例如,crt或lcd)、输入设备1512(例如,键盘)和光标控件。[0150]根据本发明的一些实施例,计算机系统1500通过处理器1507执行包含在系统存储器1508中的一条或多条指令的一个或多个序列来执行特定操作。这样的指令可以从另一个计算机可读/可用介质,诸如静态存储设备1509或盘驱动器1510读入到系统存储器1508中。在替代实施例中,硬连线电路系统可以用来代替软件指令或与软件指令组合来实现本发明。因此,本发明的实施例不限于硬件电路系统和/或软件的任何特定组合。在一些实施例中,术语“逻辑”应表示用于实现本发明的全部或部分的软件或硬件的任何组合。[0151]如本文所使用的,术语“计算机可读介质”或“计算机可用介质”是指参与向处理器1507提供指令以供执行的任何介质。这种介质可以采取多种形式,包括但不限于非易失性介质和易失性介质。非易失性介质包括例如光盘或磁盘,诸如盘驱动器1510。易失性媒体包括动态存储器,诸如系统存储器1508。[0152]计算机可读介质的常见形式包括例如软盘、柔性盘、硬盘、磁带、任何其它磁性介质、cd-rom、任何其它光学介质、穿孔卡、纸带、带有孔图案的任何其它物理介质、ram、prom、eprom、flash-eprom、任何其它存储器芯片或盒式磁带,或计算机可以读取的任何其它介质。[0153]在本发明的实施例中,实践本发明的指令序列的执行由单个计算机系统1500执行。根据本发明的其它实施例,通过通信链路1510(例如,lan、ptsn或无线网络)耦合的两个或更多个计算机系统1500可以相互协调地执行实践本发明所需的指令序列。[0154]计算机系统1500可以通过通信链路1515和通信接口1514传输和接收消息、数据和指令,包括程序,即应用代码。接收到的程序代码可以在它被接收到时由处理器1507执行,和/或存储在盘驱动器1510或其它非易失性存储器中以供以后执行。存储介质1531中的数据库1532可以用于存储系统1500可访问的数据。[0155]所描述的技术可以使用各种处理系统来实现,诸如集群计算系统、分布式系统和云计算系统。在一些实施例中,上述数据处理系统中的一些或全部可以是云计算系统的一部分。云计算系统可以实现云计算服务,包括云通信、云存储和云处理。[0156]图11是根据本公开的实施例的系统环境1600的一个或多个组件的简化框图,通过该系统环境1600,由实施例系统的一个或多个组件提供的服务可以作为云服务提供。在所示实施例中,系统环境1600包括可以由用户使用以与提供云服务的云基础设施系统1602交互的一个或多个客户端计算设备1604、1606和1608。客户端计算设备可以被配置为操作客户端应用,诸如web浏览器、专有客户端应用或某种其它应用,这些应用可以由客户端计算设备的用户用来与云基础设施系统1602交互以使用由云基础设施系统1602提供的服务。[0157]应当认识到的是,图中描绘的云基础设施系统1602可以具有除了所描绘的那些之外的其它组件。另外,图中所示的实施例仅是可以结合本发明的实施例的云基础设施系统的一个示例。在一些其它实施例中,云基础设施系统1602可以具有比图中所示更多或更少的组件、可以组合两个或更多个组件、或者可以具有不同的组件配置或布置。[0158]客户端计算设备1604、1606和1608可以是类似于上面针对图10描述的那些设备。虽然系统环境1600被示为具有三个客户端计算设备,但是可以支持任意数量的客户端计算设备。其它设备,诸如带有传感器的设备等,可以与云基础设施系统1602交互。[0159](一个或多个)网络1610可以促进客户端1604、1606和1608与云基础设施系统1602之间的通信和数据交换。每个网络可以是本领域技术人员熟悉的可以支持使用多种商业可用协议中的任何一种的数据通信的任何类型的网络。云基础设施系统1602可以包括一个或多个计算机和/或服务器。[0160]在某些实施例中,由云基础设施系统提供的服务可以包括按需对云基础设施系统的用户可用的许多服务,诸如在线数据存储和备份解决方案、基于web的电子邮件服务、被托管的办公室(office)套件和文档协作服务、数据库处理、受管理的技术支持服务等。由云基础设施系统提供的服务可以动态扩展以满足云基础设施系统的用户的需要。由云基础设施系统提供的服务的具体实例化在本文中被称为“服务实例”。一般而言,从云服务提供商的系统经由通信网络(诸如互联网)对用户可用的任何服务被称为“云服务”。通常,在公共云环境中,构成云服务提供商的系统的服务器和系统与客户自己的室内服务器和系统不同。例如,云服务提供商的系统可以托管应用,并且用户可以经由诸如互联网的通信网络按需订购和使用应用。[0161]在一些示例中,计算机网络云基础设施中的服务可以包括对存储装置、被托管的数据库、被托管的web服务器、软件应用或由云供应商向用户提供的其它服务的受保护的计算机网络访问,或者如本领域中另外已知的。例如,服务可以包括通过互联网对云上的远程存储装置进行密码保护的访问。作为另一个示例,服务可以包括基于web服务的被托管的关系数据库和脚本语言中间件引擎,以供联网的开发人员私有使用。作为另一个示例,服务可以包括对在云供应商的网站上托管的电子邮件软件应用的访问。[0162]在某些实施例中,云基础设施系统1602可以包括以自助服务、基于订阅、弹性可扩展、可靠、高度可用和安全的方式递送给客户的应用、中间件和数据库服务供应的套件。[0163]在各种实施例中,云基础设施系统1602可以适于自动供应、管理和跟踪客户对由云基础设施系统1602供给的服务的订阅。云基础设施系统1602可以经由不同的部署模型来提供云服务。例如,可以依据公共云模型提供服务,其中云基础设施系统1602被销售云服务的组织拥有,并且服务对一般公众或不同行业的企业可用。作为另一个示例,可以依据私有云模型来提供服务,其中云基础设施系统1602仅针对单个组织操作,并且可以为该组织内的一个或多个实体提供服务。还可以依据社区云模型来提供云服务,其中云基础设施系统1602和由云基础设施系统1602提供的服务由相关社区中的几个组织共享。云服务还可以依据混合云模型被提供,该混合云模型是两个或更多个不同模型的组合。[0164]在一些实施例中,由云基础设施系统1602提供的服务可以包括在软件即服务(saas)类别、平台即服务(paas)类别、基础设施即服务(iaas)类别或包括混合服务的其它服务类别下提供的一个或多个服务。客户经由订阅订单可以订购由云基础设施系统1602提供的一个或多个服务。云基础设施系统1602然后执行处理以提供客户的订阅订单中的服务。[0165]在一些实施例中,由云基础设施系统1602提供的服务可以包括但不限于应用服务、平台服务和基础设施服务。在一些示例中,应用服务可以由云基础设施系统经由saas平台提供。saas平台可以被配置为提供落入saas类别的云服务。例如,saas平台可以提供在集成开发和部署平台上构建和递送按需应用套件的能力。saas平台可以管理和控制用于提供saas服务的底层软件和基础设施。通过利用由saas平台提供的服务,客户可以利用在云基础设施系统上执行的应用。客户可以获取应用服务,而无需客户购买单独许可证和支持。可以提供各种不同的saas服务。示例包括但不限于为大型组织提供销售绩效管理、企业集成和商务灵活性的解决方案的服务。[0166]在一些实施例中,平台服务可以由云基础设施系统经由paas平台提供。paas平台可以被配置为提供落入paas类别的云服务。平台服务的示例可以包括但不限于使组织能够在共享的公共体系架构上整合现有应用以及充分利用平台提供的共享服务来构建新应用的能力的服务。paas平台可以管理和控制用于提供paas服务的底层软件和基础设施。客户可以获取由云基础架构系统提供的paas服务,而无需客户购买单独的许可证和支持。[0167]通过利用由paas平台提供的服务,客户可以采用由云基础设施系统支持的编程语言和工具,并且还控制所部署的服务。在一些实施例中,由云基础设施系统提供的平台服务可以包括数据库云服务、中间件云服务和java云服务。在一个实施例中,数据库云服务可以支持共享服务部署模型,该模型使得组织能够汇集数据库资源并且以数据库云的形式向客户供应数据库即服务。中间件云服务可以为客户提供开发和部署各种商务应用的平台,并且java云服务可以为客户提供在云基础设施系统中部署java应用的平台。[0168]各种不同的基础设施服务可以由云基础设施系统中的iaas平台提供。基础设施服务促进底层计算资源(诸如存储装置、网络和其它基础计算资源)的管理和控制,以供客户利用由saas平台和paas平台提供的服务。[0169]在某些实施例中,云基础设施系统1602还可以包括基础设施资源1630,用于向云基础设施系统的客户提供用于提供各种服务的资源。在一个实施例中,基础设施资源1630可以包括预先集成和优化的硬件(诸如服务器、存储装置和联网资源)的组合,以执行由paas平台和saas平台提供的服务。[0170]在一些实施例中,云基础设施系统1602中的资源可以由多个用户共享并且根据需要动态重新分配。此外,可以将资源分配给在不同时区的用户。例如,云基础设施系统1602可以使在第一时区中的第一组用户能够在指定的小时数内利用云基础设施系统的资源,并且然后使相同资源能够被重新分配给位于不同时区的另一组用户,从而使资源的利用率最大化。[0171]在某些实施例中,可以提供由云基础设施系统1602的不同组件或模块以及由云基础设施系统1602提供的服务共享的多个内部共享服务1632。这些内部共享服务可以包括但不限于:安全和身份服务、集成服务、企业储存库服务、企业管理器服务、病毒扫描和白名单服务、高可用性、备份和恢复服务、启用云支持的服务、电子邮件服务、通知服务、文件传输服务等。[0172]在某些实施例中,云基础设施系统1602可以提供云基础设施系统中的云服务(例如,saas、paas和iaas服务)的综合管理。在一个实施例中,云管理功能可以包括用于供应、管理和跟踪由云基础设施系统1602接收到的客户订阅等的能力。[0173]在一个实施例中,如图中所绘出的,云管理功能可以由一个或多个模块提供,诸如订单管理模块1620、订单编排模块1622、订单供应模块1624、订单管理和监视模块1626,以及身份管理模块1628。这些模块可以包括一个或多个计算机和/或服务器或者使用一个或多个计算机和/或服务器来提供,这些计算机和/或服务器可以是通用计算机、专用服务器计算机、服务器场、服务器集群或任何其它适当的布置/或组合。[0174]在操作1634中,使用客户端设备(诸如客户端设备1604、1606或1608)的客户可以通过请求由云基础设施系统1602提供的一个或多个服务并且下订阅由云基础设施系统1602供应的一个或多个服务来的订单来与云基础设施系统1602交互。在某些实施例中,客户可以访问云用户界面(ui)、云ui1612、云ui1614和/或云ui1616并经由这些ui下订阅订单。云基础设施系统1602响应于客户下订单而接收到的订单信息可以包括识别客户以及客户想要订阅的云基础设施系统1602供应的一个或多个服务的信息。[0175]在客户下订单之后,经由云ui1612、1614和/或1616接收订单信息。在操作1636处,订单存储在订单数据库1618中。订单数据库1618可以是由云基础设施系统1618操作和与其它系统元件一起操作的几个数据库之一。在操作1638处,订单信息被转发到订单管理模块1620。在一些情况下,订单管理模块1620可以被配置为执行与订单相关的计费和记账功能,诸如验证订单,并且在验证后,预订订单。在操作1640处,将关于订单的信息传送到订单编排模块1622。订单编排模块1622可以利用订单信息为客户下的订单编排服务和资源的供应。在一些情况下,订单编排模块1622可以使用订单供应模块1624的服务来编排资源的供应以支持订阅的服务。[0176]在某些实施例中,订单编排模块1622使得能够管理与每个订单相关联的业务流程并应用业务逻辑来确定订单是否应该进行到供应。在操作1642处,在接收到新订阅的订单时,订单编排模块1622向订单供应模块1624发送请求以分配资源并配置履行订阅订单所需的那些资源。订单供应模块1624使得能够为客户订购的服务分配资源。订单供应模块1624提供由云基础设施系统1602提供的云服务和用于供应用于提供所请求的服务的资源的物理实施方式层之间的抽象层。因此,订单编排模块1622可以与实施方式细节隔离,诸如服务和资源是否实际上即时供应或预先供应并仅在请求后才分配/指派。[0177]在操作1644处,一旦供应了服务和资源,就可以通过云基础设施系统1602的订单供应模块1624向客户端设备1604、1606和/或1608上的客户发送所提供服务的通知。[0178]在操作1646处,订单管理和监视模块1626可以管理和跟踪客户的订阅订单。在一些情况下,订单管理和监视模块1626可以被配置为收集订阅订单中的服务的使用统计,诸如,所使用的存储量、传输的数据量、用户的数量,以及系统运行时间和系统停机时间量。[0179]在某些实施例中,云基础设施系统1602可以包括身份管理模块1628。身份管理模块1628可以被配置为提供身份服务,诸如云基础设施系统1602中的访问管理和授权服务。在一些实施例中,身份管理模块1628可以控制关于希望利用由云基础设施系统1602提供的服务的客户的信息。这样的信息可以包括认证这些客户的身份的信息以及描述这些客户被授权相对于各种系统资源(例如,文件、目录、应用、通信端口、存储器段等)执行哪些动作的信息。身份管理模块1628还可以包括对关于每个客户的描述性信息以及关于如何和由谁来访问和修改这些描述性信息的管理。[0180]在上述说明书中,本发明已经参考其特定实施例进行了描述。但是,显然可以对其进行各种修改和改变而不背离本发明的更广泛的精神和范围。例如,上述处理流程是参考处理动作的特定次序描述的。但是,可以改变许多所描述的处理动作的次序而不影响本发明的范围或操作。因而,说明书和附图被认为是说明性的而不是限制性的。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献