CN108536692A - 一种执行计划的生成方法、装置及数据库服务器 - Google Patents
一种执行计划的生成方法、装置及数据库服务器 Download PDFInfo
- Publication number
- CN108536692A CN108536692A CN201710118119.2A CN201710118119A CN108536692A CN 108536692 A CN108536692 A CN 108536692A CN 201710118119 A CN201710118119 A CN 201710118119A CN 108536692 A CN108536692 A CN 108536692A
- Authority
- CN
- China
- Prior art keywords
- data
- factor
- executive plan
- tables
- clusters
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种执行计划的生成方法,该执行计划包括第一分执行计划和第二分执行计划,该方法包括:解析得到的数据操纵语言DML语句,以确定第一数据表,所述第一数据表包括存储在固态硬盘SSD介质上的第一数据,以及存储在机械硬盘HDD介质上的第二数据;对所述第一数据生成所述第一分执行计划,所述第一分执行计划包括通过表扫描读取所述第一数据;对所述第二数据生成所述第二分执行计划。这样可以生成更为符合数据存储特点的执行计划,则执行该执行计划能更节省资源。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种执行计划的生成方法、装置及数据库服务器。
背景技术
数据库技术的发展提供了越来越大的数据存储能力,用户可以通过网络等方式对海量数据存储进行查询并获得所需的数据。数据库技术中包括数据操纵语言DML,例如来自客户端的查询语句(select)、插入语句(insert)、删除语句(delete)、更新语句(update)等。在执行DML语句的过程中,需要对该DML语句进行语法分析、预编译、优化等步骤,继而生成执行计划。
为了提高查询性能,数据库常常会使用索引管理数据。索引是一种与表有关的数据库结构,是表的分执行计划,它可以使执行对象为数据表的SQL语句执行得更快。例如,一种常见的索引采用B树或B+树的数据结构。通常,索引包括排序后的键值 (key),以及指向表数据的存储位置的记录标识符RID(Record Identifier),在根据查询条件筛选出满足条件的键值后,如果需要取该键值对应的表中其它元组数据,则需要依靠该这些键值对应的索引中的RID,以获得元组数据在磁盘上数据位置。索引的聚簇因子(clustering factor/CF)是反映索引键值的顺序与RID顺序不一致程度的统计信息之一,一般是基于索引列上的一个值。
因此,聚簇因子通常用被数据库管理系统(Database Management System)的优化器用于在生成执行计划的过程中计算开销(cost),开销直接影响执行计划中使用的算子等。例如,在聚簇因子较小时,如果键值的顺序依照RID访问表空间数据,会产生大量随机I/O,从而影响查询性能,因此优化器会指示先将表空间的数据进行预排序,再读取。
但是,现有技术中使用的聚簇因子,表示计算开销并不准确,从而会使得生成的执行计划在执行中产生不必要的随机I/O的开销,降低对数据进行操作的性能。
发明内容
本发明的实施例提供一种执行计划的生成方法执行数据操纵语言DML的语句的方法及装置,能够更客观地考虑数据存储的特点,使得生成的执行计划中使用的数据读取方式更符合数据在存储介质中的实际情况,从而使得运行该生成的执行计划的开销更小,即避免不必要的开销。提高了数据库对数据进行操作的性能,更能节省资源。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,采用了一种执行计划的生成方法,所述执行计划包括第一分执行计划和第二分执行计划,所述方法包括:解析得到的数据操纵语言DML语句,以确定所述DML语句对应的第一数据表,所述第一数据表包括存储在固态硬盘SSD介质上的第一数据,以及存储在机械硬盘HDD介质上的第二数据;对所述第一数据,生成所述第一分执行计划,所述第一分执行计划包括通过表扫描读取所述第一数据;对所述第二数据,生成所述第二分执行计划,所述第二分执行计划包括在所述第二数据需要预排序的情况下,对所述第二数据预排序后,读取经过预排序的所述第二数据;在所述第二数据无需预排序的情况下,通过表扫描读取所述第二数据。
这样,在生成执行计划的过程中,能够更客观地考虑数据存储的特点,针对存储在不同的介质中的数据,使得生成的执行计划中使用的数据读取方式更符合数据在存储介质中的实际情况,从而使得运行该生成的执行计划的开销更小,提高了数据库对数据进行操作的性能,更能节省资源。
一种实现方式下,所述对所述第一数据,生成第一分执行计划,包括:根据所述第一数据的虚聚簇因子的值,生成所述第一分执行计划,所述第一数据的虚聚簇因子表示通过索引读取所述存储于SSD存储介质中的第一数据的代价。
在一种实现方式下,所述对所述第二数据,生成第二分执行计划包括:根据所述第二数据的聚簇因子的值,确定所述第二分执行计划是否包括通过预排序读取所述第二数据。
应理解,聚簇因子用于标记表中的数据和这些数据在索引中的顺序的相似程度。聚簇因子越大,顺序相似度越高,聚簇因子越小,顺序相似度越低。
也就是说,在这些实施方式下,提出了对聚簇因子的表示方法的改进,例如在计算聚簇因子时,考虑存储介质种类的不同,还例如,提出第一层聚簇因子和第二层聚簇因子,在生成执行计划的过程中,通过多层的聚簇因子优化不同层次操作的代价估算。从而能够生成更优化的执行计划。由于现有技术中也有聚簇因子,故本申请上述的集中
在一种实现方式下,该方法还包括根据所述第一数据所在的存储介质的随机I/O,确定所述第一数据的虚聚簇因子。以及该方法还包括根据所述第二数据所在的存储介质的随机I/O,确定所述第二数据的虚聚簇因子。
其中,随机I/O表示访问地址不连续的数据的操作而产生的代价。
一种实现方式下,该方法还包括:根据所述第一数据表的逻辑聚簇因子的值,确定所述执行计划中第一算子,所述第一算子对应于所述第一数据表与第二数据表之间的第一运算,所述第一数据表的逻辑聚簇因子用于替代所述第一数据表的聚簇因子,用于表示以所述第一数据表为整体,通过索引读取所述第一数据表的代价。
一种实现方式下,该方法还包括:根据所述第一数据的虚聚簇因子和所述第二数据的聚簇因子,计算所述第一数据表的逻辑聚簇因子,所述第一数据的虚聚簇因子用于表示通过索引读取所述存储于SSD存储介质中的第一数据的代价,所述第二数据的聚簇因子用于表示通过索引读取所述存储于HHD存储介质中的第二数据的代价。
只要第二层逻辑聚簇因子中考虑各种不同的存储介质的聚簇因子的差异性,也就是说,使用了对应于HDD介质的原始聚簇因子和对应于SSD介质的虚聚簇因子即可。具体的计算方式可以有很多种。例如,对第一层聚簇因子求平均,可以是加权平均,或者直接求平均值。应理解,若使用加权平均,权值可以事先预置,例如根据数据表的数据在各存储介质中的比例来设。再例如,可以根据数据的分布情况,采用统计学的原理,使用现有的统计学公式,或者对现有的统计学公式进行简单的调整后计算。再例如,可以制定一个映射关系,即第二层聚簇因子与一些量之间的映射关系,这些量可以是一个表的第一层聚簇因子的取值,用于表征该表的数据在存储介质中的分布情况的值、用于表示该表要执行的算法的加权因子等中的至少一种。
一种实现方式下,所述第一运算为连接(join),所述第一数据表为所述运算中的外表(outer),所述算子为混合连接(Hybrid Join)、嵌套循环连接(Nested Loops Join)、哈希连接(Hash Join)以及排序合并连接中的一种。
应理解,该第一运算也可以是其他运算,例如位图索引,或者索引间联合过滤相关操作(如BITMAP INDEX ANDING)。一种实现方式下,逻辑聚簇因子将影响Index ANDING算子的选取。
一种实现方式下,该方法还包括:根据第一标识,确定所述第一数据表中的第一数据和第二数据,所述第一标识用于指示存储数据表中数据的存储介质的类型。
一种实现方式下,所述对所述第一数据,生成第一分执行计划,包括:根据第二标识,生成所述第一分执行计划,所述第二标识用于标记数据表中存储于固态硬盘 SSD介质上的数据。这样,使用一个标识来区分不同存储介质上的数据的读取方式,更加简便直观
第二方面,提供一种执行计划的生成装置,该执行计划包括第一分执行计划和第二分执行计划,该生成装置包括:解析器,用于解析得到的数据操纵语言DML语句,以确定所述DML语句对应的第一数据表,所述第一数据表包括存储在固态硬盘 SSD介质上的第一数据,以及存储在机械硬盘HDD介质上的第二数据;以及优化器,用于对所述第一数据,生成所述第一分执行计划,所述第一分执行计划包括通过表扫描读取所述第一数据;以及对所述第二数据,生成所述第二分执行计划,所述第二分执行计划包括在所述第二数据需要预排序的情况下,对所述第二数据预排序后,读取经过预排序的所述第二数据;在所述第二数据无需预排序的情况下,通过表扫描读取所述第二数据。
一种实现方式下,该执行计划的生成装置就是数据库管理系统中的SQL引擎。
应理解,第二方面是第一方面对应的装置,其具体的实施说明和技术效果可以参照第一方面的各种实现方式。
第三方面,描述一种物理机,该物理机生成的执行计划包括包括第一分执行计划和第二分执行计划,所述物理机包括:至少一个处理器、存储可执行代码的非瞬态计算机可读介质,所述非瞬态计算机可读介质包括固态硬盘SSD介质和机械硬盘HDD 介质;所述可执行代码在被所述至少一个处理器执行时被配置为执行第一方面的任意一种实现方式。
第四方面,提供一种数据库系统,包括:客户端和上述任一执行计划的生成装置。
第五方面,提供一种集群数据库系统,包括:硬件层和运行在硬件层之上的虚拟机监控器(VMM),以及多个虚拟机。虚拟机基于VMM,以及硬件层提供的硬件资源,运行可执行程序,以实现上述执行计划的生成装置的部分或全部功能。
第六方面,提供一种存储有可执行程序的非瞬态计算机可读介质,该可执行程序包括用于实现上述数据库管理系统的功能的程序。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1A为单机数据库系统示意图;
图1B为采用共享磁盘(Shared-storage)架构的集群数据库系统示意图;
图1C为采用无共享(Shared-nothing)架构的集群数据库系统示意图;
图1D为本发明实施例提供一种数据库服务器的示意图;
图2为本发明实施例提供的一种执行计划的生成方法的示意图;
图3为本发明实施例提供的一数据表的聚簇因子的示意图;
图4为本发明实施例提供的执行计划生成过程的对比图;
图5为本发明实施例提供的一种执行计划的生成装置的示意图;
图6为本发明实施例提供的一种物理机的示意图;
图7为本发明实施例提供的一种集群数据库系统的示意图;
图8为本发明实施例提供的一种数据库服务器的示意图;
具体实施方式
本文中字符“/”,一般表示前后关联对象是一种“或者”的关系。例如,A/B可以理解为A或者B。
本发明的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一分区表和第二分区表等是用于区别不同的分区表,而不是用于描述分区表的特征顺序。
在本发明的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个业务是指两个或两个以上业务。
此外,本发明的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描述。
为了更加清楚地理解本发明实施例的各种实现方式,下面首先对本发明实施例中涉及的技术术语进行定义/说明。
聚簇因子:又称CF值。数据表中的数据都是无序的存在库中,当我们对数据进行检索的时候,查找起来很是耗费资源,于是我们就需要为表创建索引,索引的作用就是把表中的数据按照一定的顺序排列保存起来,于是就出现了一个问题,有的表中的数据和索引排列的顺序很是相近,而另一些表中的数据和索引排列的顺序相距甚远。聚簇因子用于标记表中的数据和这些数据在索引中的顺序的相似程度。聚簇因子越大,顺序相似度越高,聚簇因子越小,顺序相似度越低。
例如,一张数据表中的数据按照数据表的RID顺序,在存储单元中依次存储,而这些数据按照索引中的键值排序后,排序的顺序与数据表中存储的数据不相同,那么当使用该索引中的键值依次去访问数据表中的数据时,访问的数据的地址就不连续,从而产生随机I/O,随机I/O表示访问地址不连续的数据的操作而产生的代价。例如,聚簇因子是基于表上索引列上的一个值,每一个索引都有一个聚簇因子。该聚簇因子用于描述索引块上与表块上存储数据在顺序上的相似程度,也就说表上的数据行的存储顺序与索引列上顺序是否一致。在全索引扫描中,CF的值基本上等同于物理I/O 或块访问数,如果相同的块被连续读,则认为只需要1次物理I/O。而如果不连续,读取数据的物理I/O就会大大增加。好的CF值接近于表上的块数,而差的CF值则接近于表上的行数。聚簇因子在索引创建时就会通过表上存存在的行以及索引块计算获得。
聚簇因子的取值可以有多种形式,主要是通过相对值的大小来表示索引键值的顺序与RID顺序,例如,取值可以在[0,1]之间,越接近1表示聚簇因子的取值范围在 [0,1]之间,值越大表示索引键值的顺序与RID顺序越一致。再例如一种实现方式下, CF值越接近于表上的块数,则表示索引键值的顺序与RID顺序越一致,称好的CF,而CF值则接近于表上的行数,则表示索引键值的顺序与RID顺序越一致,称坏的 CF。一种实现方式下,聚簇因子在索引创建过程中,就会通过表上存在的行以及索引块计算获得。
本申请以CF值在0到1之间为例进行说明。
综上,可以理解为,现有技术中,聚簇因子描述了根据索引从存储介质中读取数据表中数据的代价。该数据表的索引顺序与这组数据的RID的顺序的差异,以及该组数据的存储介质的I/O特性都会影响该组数据对应的聚簇因子的值。其中,本领域技术人员应当理解,代价表示从存储介质中读取数据的I/O消耗,该I/O消耗受读取该组数据时的I/O设备的消耗、CPU的消耗等至少一个因素影响。(可以是一个数据表,也可以是一个数据表的一部分。这组数据可以存储在某一个或多个存储介质中)。而本申请发明中,聚簇因子描述了根据索引从存储介质中读取一组数据的代价,该组数据可以是一个数据表,也可以是一个数据表的一部分。这组数据可以存储在某一个或多个存储介质中。
数据表:是指包括多个业务的数据的表。该表包括多行和多列,每一列或者每一行对应一个业务。为了便于表述,本发明实施例中以每一列对应一个业务为例进行描述,应理解,在每一行对应一个业务的情况下,本申请所述的方案同样可以执行,具体方式不再赘述。
在数据库中,数据有多种存储或者组织形式,例如,一种较为常用的是堆表,堆表的数据存储方式为无序存储,也就是任意的DML操作都可能使得当前数据块存在可用的空闲空间。处于节省空间的考虑,块上的可用空闲空间会被新插入的行填充,而不是按顺序填充到最后被使用的块上。上述的操作方式导致了数据的无序性的产生。当创建索引时,会根据指定的列按顺序来填充到索引块,缺省的情况下为升序。新建或重建索引时,索引列上的顺序是有序的,而表上的顺序是无序的,也就是存在了差异,即表现为聚簇因子。
索引:索引是一种单独的、物理的数对数据库表中一列或多列的值进行排序的一种存储结构。它可以是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
聚簇索引(clustered index):叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页。
随机I/O(input/output):又称随机访问。本申请中提及的随机I/O主要是用于表示的是随机访问的代价。随机访问的特点是每次I/O请求的数据在磁盘上的位置跨度较大(如:分布在不同的扇区),因此N个非常小的I/O请求(如:1K),必须以 N次I/O请求才能获取到相应的数据。顺序访问的特点跟随机访问相反,它请求的数据在磁盘的位置是连续的。当系统发起N个非常小的I/O请求(如:1K)时,因为一次I/O是有代价的,系统会取完整的一块数据(如4K、8K),所以当第一次I/O完成时,后续I/O请求的数据可能已经有了。这样可以减少I/O请求的次数。这也就是所谓的预取。进行随机访问还是顺序访问同样是由应用或者业务决定的。如数据库、小文件的存储的业务,大多是随机I/O。而视频类业务、大文件存取,则大多为顺序I/O。
混合连接(Hybrid Join),混合连接一般用于内部连接(inner join),并且需要内部表的连接列上的索引。该方法需要按照列表预取所需的顺序获取RID,且外表 (outer)和内表(inner)都在连接列上有索引。例如,可以参考IBM公司知识中心 (knowledge center)的相关网页上披露的信息。一种实现方式简单描述如下:扫描外表(被连接的表);使用内表上索引的RID连接外表,获得中间表1。针对外部表的每一行,扫描内部表的索引;对外部表和RID中的数据进行排序,以创建排序的RID 列表和中间表2,例如排序可以由计划表的列SORTN_JOIN中的值Y指示,这种情况下,弱内部表上的索引是一个聚簇索引,那么可以跳过这种排序,则SORTN_JOIN 中的值为N;使用列表预取重内部表中检索数据;连接来自内表和中间表2的数据,以创建最终的复合表。
混合连接使用列表预取,比嵌套循环连接更有效,尤其是如果索引存在于具有低聚类比率的连接谓词上,它还可以更有效地处理重复,因为内表只对外表的连接列中的每组重复值进行一次扫描。
嵌套循环连接(nested loops join):将一个表(驱动表)为出发点,先全表扫描该表,将该表返回的全部记录逐条去遍历另外一张表(被驱动表)的记录,符合条件的就写入结果集。这种遍历相当于基于嵌套循环连接的特点,本领域技术人员可以想得到,它在两个关联表的数据量相差比较大时采用,但整体上数据量都不应该太大。该关联方式适用于得到小数据量的查询操作。对嵌套循环连接,驱动表返回几条,被驱动表访问多少次。
应理解,比较常见的连接方式还有哈希连接(Hash Join)、排序合并连接(SortMerge Join)等。
混合硬盘(hybrid harddrive,HHD),即包含传统机械硬盘(Hard Disk Drive,HDD) 又有固态硬盘(Solid State Drive,SSD)的存储设备。
固态硬盘(SSD),固态硬盘(Solid State Drive)用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(例如FLASH芯片、DRAM芯片等)组成。
应理解,SSD类存储介质和HDD类存储介质的I/O特性是不同的。事实上,SSD 类存储介质的随机I/O的消耗相对于HDD类存储介质的随机I/O的消耗非常小。例如, SSD类存储介质的随机I/O的消耗相当于HDD类存储介质的连续I/O的消耗,连续 I/O就是访问地址连续的数据的操作操作而产生的代价。
现有技术中,为减少非聚簇索引(聚簇因子很低的索引)到表数据读取的大量随机I/O,列表预取技术(List Prefetch)将RID先进行排序,然后对排序后的RID列表进行表数据的顺序访问,这样可以大量减少随机I/O。由这种方法还派生了混合连接的表连接类型。优化器通过利用聚簇因子反应出来的索引聚簇特性,决定是否采用列表预取技术,最终生成单一的执行计划供运行时执行。但是,生成执行计划,并不会参考数据在底层数据存储介质差异性而区分考虑适合各区块的最优执行计划。
本发明实施例提供的执行计划的生成方法可以应用于被操作的数据数据存储在的不同的存储介质的情况下,例如该存储介质为混合硬盘(HHD),或者该存储介质中包括固态硬盘SSD(Solid State Drive,SSD)和机械硬盘(Hard Disk Drive,HDD)或者其他的至少两个种类的存储介质混合使用的情形。例如,一个表的数据分布在不同的存储介质上,如部分数据在SSD上,部分数据在HDD上,并且SSD和HDD的磁盘个数可能是多个。本发明方法的有益性主要利用了SSD和HDD在I/O性能的差异 (SSD的随机I/O开销相对于HDD的随机I/O开销非常小),但HDD和SSD并不构成对硬盘存储介质种类的限制。
这些存储介质可以分布在同一主机上或者在不同主机上,也就是说,该生成方法可以用于数据库系统集群,例如分布式的集群,该分布式的集群可以共享存储介质,即share memory,或者该分布式的集群不共享存储介质,即share-nothing,该分布式集群中包括多个部署数据库系统的节点,这些节点可以是物理节点(如物理机)也可以是逻辑节点(如虚拟机或者容器)。另一方面,该生成方法也可以用于单独的一个物理机中,本发明实施例不做限定。
下面描述本发明实施例提供的方法、数据库管理系统及数据库服务器可以应用于的单机数据库系统或者集群数据库系统。数据库系统(Database System)是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统。数据库系统一般由以下三部分组成:(1)数据库(database,DB),指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。(2)硬件,包括存储数据所需的数据存储器,例如内存和/或磁盘。(3)软件,包括DBMS(database management system,数据库管理系统),DBMS是数据库系统的核心软件,是用于科学地组织和存储数据,以及高效获取和维护数据的系统软件,数据库引擎是DBMS 的核心内容。应理解,本申请针对的就是数据存储器中包括不同种类的存储介质的情况。
具体地,图1A为单机数据库系统示意图,包括一个数据库管理系统和数据存储器(Data Store),该数据库管理系统用于提供数据库的查询和修改等服务,该数据库管理系统将数据存储到数据存储器中。在单机数据库系统中,数据库管理系统和数据存储器通常位于单一服务器上,比如一台SMP(Symmetric Multi-Processor)服务器。该SMP服务器包括多个处理器,所有的处理器共享资源,如总线,内存和I/O系统等。数据库管理系统的功能可由一个或多个处理器执行内存中的程序来实现。
图1B为采用共享磁盘(Shared-storage)架构的集群数据库系统示意图,包括多个节点(如图1B中的节点1-N),每个节点部署有数据库管理系统,可以为用户提供数据库的查询和修改等服务,多个数据库管理系统存储有共享的数据在共享数据存储器中,并且通过交换机对数据存储器中的数据执行读写操作。共享数据存储器可以为共享磁盘阵列,应理解,共享数据存储器就包括本申请上文中提及的各种存储介质。集群数据库系统中的节点可以为物理机,比如数据库服务器,也可以为虚拟节点,例如运行在抽象硬件资源上的虚拟机或者容器。若节点为物理机,则交换机为存储区网络(Storage Area Network,SAN)交换机、以太网交换机,光纤交换机或其它物理交换设备。若节点为虚拟机,则交换机为虚拟交换机。
图1C为采用无共享(Shared-nothing)架构的集群数据库系统示意图,每个节点具有各自独享的硬件资源(如数据存储器)、操作系统和数据库,节点之间通过网络来通信。该体系下,数据将根据数据库模型和应用特点被分配到各个节点上,查询任务将被分割成若干部分,在所有节点上并行执行,彼此协同计算,作为整体提供数据库服务,所有通信功能都在一个高宽带网络互联体系上实现。如同图1B所描述的 Shared-storage架构的集群数据库系统一样,这里的节点既可以是物理节点,如物理机,也可以为虚拟节点,例如运行在抽象硬件资源上的虚拟机或者容器。
例如,图1C和图1B的架构可以包括一个主机A和与该主机连接的若干个备机B,其中,主机和备机上均运行有数据库系统。为了更好地理解运行在不同物理机上的数据库系统,运行在主机上的数据库系统通常称为主数据库系统,运行在每个备机上的数据库系统称为备数据库系统。
在本发明所有实施例中,数据库系统的数据存储器(Data Store)包括但不限于固态硬盘(SSD)、磁盘阵列或其他类型的非瞬态计算机可读介质。图1A-1C中虽未示出数据库,应理解,数据库存储在数据存储器中。所属领域的技术人员可以理解一个数据库系统可能包括比图1A-1C中所示的部件更少或更多的组件,或者包括与图1A-1C中所示组件不同的组件,图1A-1C仅仅示出了与本发明实施例所公开的实现方式更加相关的组件。例如,虽然图1B和1C中已经描述了4个节点,但所属领域的技术人员可理解成一个集群数据库系统可包含任何数量的节点。各节点的数据库管理系统功能可分别由运行在各节点上的软件、硬件和/或固件的适当组合来实现。
为了便于理解和描述,作为示例而非限定,下面以Shared-nothing架构集群数据库系统中一个节点,即数据库服务器为例说明本发明实施例的方案。但是本领域技术人员根据本发明实施例的教导可以很清楚地理解,本发明实施例的方法同样可以应用于Shared-storage架构的集群数据库系统,单机数据库系统,以及任何类型的关系型数据库系统。
如图1D所示,本发明实施例提供一种数据库服务器100,包括:至少一个处理器104、存储可执行代码的非瞬态计算机可读介质(non-transitory computer-readablemedium)106和数据库管理系统108。所述可执行代码在被至少一个处理器104执行时被配置为实现数据库管理系统108的组件和功能。非瞬态计算机可读介质106 为HHD介质,或者包括多种存储介质,例如SSD介质和HDD介质。另一方面,非瞬态计算机可读介质106可以包括一个或多个非易失性存储器,作为示例,非易失性存储器包括半导体存储器设备,例如EPROM(Erasable Programmable Read Only Memory,可擦可编程只读存储器),EEPROM(Electrically Erasable Programmable Read Only Memory,电可擦只读存储器)和闪存(flash memory);磁盘,例如内部硬盘(internal hard disk)或可移动磁盘(removabledisk),磁光盘(magneto optical disk),以及CD ROM和DVD-ROM。此外,非瞬态计算机可读介质106还可以包括被配置为主存储器(main memory)的任何设备。至少一个处理器104可以包括任何类型的通用计算电路或专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。至少一个处理器104也可以是耦合到一个或多个半导体基板的一个或多个处理器,例如CPU。
数据库管理系统108可以是RDBMS(Relational Database Management System,关系型数据库管理系统)。数据库管理系统108支持SQL(Structured Query Language,结构化查询语言)。通常,SQL是指专门用于管理关系型数据库中保存的数据的专用编程语言。SQL可以指代各种类型的数据相关语言,包括例如数据定义语言和数据操纵语言,其中SQL的范围可以包括数据插入,查询,更新和删除,模式创建和修改以及数据访问控制。此外,在一些示例中,SQL可以包括与各种语言元素相关的描述,包括子句(clause),表达式(expression),谓词(predicate),查询(query)和语句(statement)。例如,子句可以指语句和查询的各种组成部分,并且在一些情况下,子句可以被认为是可选的。此外,表达式可以被配置为产生包括数据列和/或行的标量值(scalar value)和/或表。另外,谓词可经配置以指定条件,以用于调节语句和查询的效果。
数据库客户端102可以包括被配置成与数据库管理系统108交互的任何类型的设备或应用程序。在一些示例中,数据库客户端102包括一个或多个应用服务器。
数据库管理系统108包括SQL引擎110、执行引擎122和存储引擎134。SQL 引擎110根据客户端102提交的SQL语句,例如查询(Query),生成对应的执行计划,执行引擎122依照语句的执行计划进行操作,以产生查询结果。存储引擎134负责在文件系统之上,管理表的数据、索引的实际内容,同时也会管理运行时的Cache、 Buffer、事务、Log等数据。例如存储引擎134可以将执行引擎122的执行结果通过物理I/O写入数据存储器120。
例如本申请实施例中就涉及SQL引擎110,该SQL引擎110可以是一个进程,以及用于收集数据存储信息的程序(例如analys index).其中,该SQL引擎110包括优化器114,例如,优化器可以是查询优化器,用于生成SQL语句的有效执行计划,为语句生成一组可能被使用的执行计划,估算出每个执行计划的代价,比较计划的代价,最终选择一个代价最小的执行计划。例如优化器在执行上述过程中,可以包括本申请中涉及的了解在混存上各个介质的种类,数据在各个介质上的分布比例,再比如某个字段或者某类值的分布情况等信息。该SQL引擎110还包括解析器112,用于解析 DML语句的语义和语法,例如判断一SQL语句的语法是否正确,判断某一名字的表是否存在,某一字段是不是存在例如了解在混存上各个介质的种类等。
另一方面,本申请实施例还涉及用于收集数据库中表或者区或者某个数据集合的统计信息的组件,该组件可以确定出本文所述的第一层的聚簇因子,包括虚聚簇因子和原始聚簇因子,一些实施方式还可以根据第一层的聚簇因子以及数据的分布情况,计算出逻辑聚簇因子。例如该组件可以是RUNSTATS,PostgreSQL或者ANALYZE,或者该组件为实用程序(Utility),收集统计信息可以通过来COPY,LOAD等操作来实现。
下面以数据库管理系统较常处理的查询语句为例对图1D所示的架构做进一步说明。查询(query)是请求查看,访问和/或操纵存储在数据库中的数据。数据库管理系统108可以从数据库客户端102接收SQL格式的查询(称为SQL查询)。通常,数据库管理系统108通过从数据库访问相关数据并操纵相关数据以生成查询所对应的查询结果,并将查询结果返回到数据库客户端102。数据库是按一定的数学模型组织、描述和存储的数据集合,数据库可以包括一个或多个数据库结构或格式,例如行存储和列存储。数据库通常存储于数据存储器中,比如图1D中的外部数据存储器120,或者非瞬态计算机可读介质106。当数据库存储于非瞬态计算机可读介质106时,数据库管理系统108为内存数据库管理系统。
本申请的一个实施例中,提出了对聚簇因子的表示方法的改进,例如在计算聚簇因子时,考虑存储介质种类的不同,还例如,提出第一层聚簇因子和第二层聚簇因子,在生成执行计划的过程中,通过多层的聚簇因子优化不同层次操作的代价估算。也就是说,在使用这些优化的聚簇因子之前,应当先根据数据的存储情况,得到这些优化的聚簇因子。该过程可以与创建数据表或数据索引一起进行,或者在根据解析的DML 语句生成执行计划之前进行。
本申请主要涉及统计信息收集与计算阶段,以及执行计划生成阶段。其中统计信息的收集与计算是通过实用程序(Utility)实现,执行计划生成则是在DML语句的编译阶段。
例如,统计信息收集与计算阶段,主要是收集表分布在不同介质的数据区块的索引聚簇因子统计信息,以及对应的存储资源信息;完成基于存储资源的聚簇因子第一层修正,固态硬盘索引聚簇因子映射为虚聚簇因子;以及基于第一层修正结果的聚簇因子计算逻辑聚簇因子。
下面结合图2,描述一种执行计划的生成方法,这种执行计划的生成方法能够更贴合存储在不同介质中的数据的读取特点,以得到更优化的执行计划,从而避免不必要的开销。其中,该执行计划包括第一分执行计划和第二分执行计划,该方法包括:
步骤201:解析得到的数据操纵语言DML语句,以确定所述DML语句对应的第一数据表,所述第一数据表包括存储在固态硬盘SSD介质上的第一数据,以及存储在机械硬盘HDD介质上的第二数据。
也就是说,第一数据表中的数据是混合存储的,有数据存储在SSD以及HDD上。应理解,用于确定该第一数据表中存储在不同的存储介质上的方法有很多种,本申请实施例不做限制。
一种实现方式下,可以根据第一标识,确定所述第一数据表中的第一数据和第二数据,所述第一标识用于指示存储数据表中数据的存储介质的类型。具体的一种实现方式下,可以认为该根据第一标识确定第一数据和第二数据的步骤是SQL引擎中的优化器实现的。
当然,该第一数据表也可以在存储到介质的过程中,建立日志,以记录该第一数据表各段或者各组数据的存储分布情况。
步骤202:对所述第一数据,生成所述第一分执行计划,所述第一分执行计划包括通过表扫描读取所述第一数据;对所述第二数据,生成所述第二分执行计划,所述第二分执行计划包括在所述第二数据需要预排序的情况下,对所述第二数据预排序后,读取经过预排序的所述第二数据;在所述第二数据无需预排序的情况下,通过表扫描读取所述第二数据。
这样,在生成执行计划的过程中,能够更客观地考虑数据存储的特点,针对存储在不同的介质中的数据,使得生成的执行计划中使用的数据读取方式更符合数据在存储介质中的实际情况,从而使得运行该生成的执行计划的开销更小,提高了数据库对数据进行操作的性能,更能节省资源。
也就是说,对于存储在SSD上的数据,其对应的第一分执行计划中,读取数据是通过表扫描读取,而对于存储在HDD上的数据,其对应的第二分执行计划中,则类似现有技术,对HDD上的数据进行分析,以确定是否要进行预排序。例如,可以通过该HDD上的数据的聚簇因子,确定是否要进行预排序。这样就在生成执行计划时,考虑了不同存储介质的读特性,进行适合各部分数据的差异性读取方式。
一种实现方式下,对所述第一数据,生成第一分执行计划,包括:根据所述第一数据的虚聚簇因子的值,生成所述第一分执行计划,所述第一数据的虚聚簇因子表示通过索引读取所述存储于SSD存储介质中的第一数据的代价。
本申请中,将使用类似于现有技术中的聚簇因子的确定方式得到的聚簇因子称为原始(original)聚簇因子,或者直接称为某数据的聚簇因子。原始(original)聚簇因子都是基于HDD存储介质的I/O特性赋值的,并不区分SSD和HDD。,但是,现有技术中,聚簇因子不会针对表中的一部分数据,而是针对整张表,也就是说,对于第一数据和第二数据,现有技术是没有聚簇因子的。而实际上,本申请描述的逻辑聚簇因子,是与现有技术中的聚簇因子类似的,都是针对整张数据表,但是逻辑聚簇因子的计算方式与现有技术中的聚簇因子不同,逻辑聚簇因子也不再用于确定如何读取对应的数据表中的数据。
应理解,在本申请实施例中,第一层聚簇因子包括原始聚簇因子和虚(fake)聚簇因子。原始聚簇因子的获得方式就是与现有技术中的聚簇因子一样,只是原始聚簇因子是针对数据表中存储在HDD存储介质中的那部分数据,而现有技术中的聚簇因子是针对整张数据表,当然,也可以简称为某数据的聚簇因子,例如本文中提到的第二数据的聚簇因子。在本申请实施例中,对存储在HDD存储介质中的数据使用原始聚簇因子。虚聚簇因子则是对存储在SSD存储介质中的数据使用的。虚聚簇因子为在聚簇因子的取值范围内的某个较大的聚簇因子常量,目的在于模拟SSD随机I/O代价很小而带来的聚簇性虽不好但总体I/O代价不大的特性。一种实现方式下,虚聚簇因子与对应的SSD存储介质的随机I/O的消耗和该SSD存储介质中的数据对应的索引的连续程度有关。应理解,虚聚簇因子和原始聚簇因子的计算方式类似,主要取决于该存储介质中数据对应的索引的连续程度。现有技术中,SSD存储介质的聚簇因子是按照HDD存储介质的I/O特性和该SSD存储介质中的数据对应的索引的连续程度来计算的。而本申请的一种实现方式中,虚聚簇因子是按照该SDD存储介质的I/O特性和该SSD存储介质中的数据对应的索引的连续程度来计算的。因此,本申请的一个实施例中,各种聚簇因子的取值范围为0到1之间,而虚聚簇因子一般是较接近 1的数,例如,可以取值0.8、0.85、0.88、0.93、0.95、0.97等。
应理解,一种情况下,虚聚簇因子是用来确定对应的存储介质在索引到表的数据读取中所使用的方法的。对虚聚簇因子的取值,也会考虑读取方法对应的阈值,这些阈值在现有技术中,往往都有比较通用的经验值,或者可以自己设置。例如,如果现有技术中,确定是否使用列表预取技术对应的聚簇因子的取值为0.85,那么对虚聚簇因子,就应该取大于0.85的值。
应理解,一般虚聚簇因子都是在生成执行计划的过程之前就确定的,以便直接调用。当然,也可以在生成执行计划的过程中在需要使用的情况下确定,则这种实现方式下,该生成方法还包括:根据所述第一数据所在的存储介质的随机I/O的代价,确定所述第一数据的虚聚簇因子。具体的确定方式,可以参考前文对虚聚簇因子的描述,本申请不做限制。
应理解,在执行计划中,往往涉及到数据表与数据表之间的运算,这些运算大多可以通过多种算子实现,如果DML语句涉及这些运算,那么生成执行计划的过程中自然也包括确定这些运算所使用的算子。这就涉及到本申请实施例提出的逻辑聚簇因子。一种实现方式下,根据所述第一数据表的逻辑聚簇因子的值,确定所述执行计划中第一算子,所述第一算子对应于所述第一数据表与第二数据表之间的第一运算,所述第一数据表的逻辑聚簇因子用于替代所述第一数据表的聚簇因子,用于表示以所述第一数据表为整体,通过索引读取所述第一数据表的代价。
具体的,逻辑聚簇因子是由第一层聚簇因子得到的。可以是根据所述第一数据的虚聚簇因子和所述第二数据的聚簇因子,计算所述第一数据表的逻辑聚簇因子,所述第一数据的虚聚簇因子用于表示通过索引读取所述存储于SSD存储介质中的第一数据的代价,所述第二数据的聚簇因子用于表示通过索引读取所述存储于HHD存储介质中的第二数据的代价。
第二层聚簇因子是对一个数据表使用的,该数据表中的数据一部分存储在HDD 存储介质中另一部分存储在SSD存储介质中。第二层聚簇因子是根据原始聚簇因子和虚聚簇因子计算得到的。应理解,只要第二层逻辑聚簇因子中考虑各种不同的存储介质的聚簇因子的差异性,也就是说,使用了对应于SSD介质的虚聚簇因子即可,或者使用了对应于HDD介质的原始聚簇因子和对应于SSD介质的虚聚簇因子即可。具体的计算方式可以参照下文中的一些具体的计算例子,计算方式可以有很多种,本申请并不限定。
一种实现方式下,该第一层聚簇因子和第二层聚簇因子均在统计信息收集阶段计算生成,生成的结果可以存储在数据库系统相应的表里。
下面简单描述本申请涉及到的接收到DML语句后的分析过程。例如,该DML语句为SQL(Structured Query Language,结构化查询语言)语句,经过SQL引擎的语法和语义分析后,该SQL引擎中的优化器会根据该SQL生成对应的执行计划,这个过程通常会用到聚簇因子。在生成执行计划的过程中,例如采用分层的聚簇因子计算代价,对于不涉及索引到表最终读取的算子,采用第二层聚簇因子,也可以被称为逻辑聚簇因子进行计算;而对涉及到索引与表数据最终读取的算子部分;针对各数据区块的第一层聚簇因子生成不同的分执行计划:聚簇性好的区块,进行直接表扫描;聚簇性不好的区块,对索引扫描后结果的表空间数据标识RID进行排序,之后根据排序结果进行表数据读取。
一种情况下,所述运算为连接(join),所述第一数据表为所述运算中的外表(outer),所述算子为混合连接(Hybrid Join)、嵌套循环连接(Nested Loops Join)、哈希连接(Hash Join)以及排序合并连接中的一种。应理解,由于连接(Join)这个运算,是将两个文件中,指定栏位内容相同的行连接起来,因此,连接算法具体使用哪种算子实现,往往起决定作用的是外表的聚簇因子。应理解,多种DML语句中都会涉及连接运算,例如查询语句(select)、插入语句(insert)、或者INSERT FROM SELECT等一些包括select的语句等,本发明实施例不做限制。
本申请的另一种实现方式中,对于第一层聚簇因子,也可以用其他更简单直观的方式。那么这种实现方式下,步骤201包括:根据第二标识,生成所述第一分执行计划,所述第二标识用于标记数据表中存储于固态硬盘SSD介质上的数据。
也就是设置一个标识,该标识用于记录该数据表中不同数据块(可以是列或者行或者分区等)对应的存储介质,例如设置一个标记位(flag),在是SSD介质的情况下和HDD介质的情况下取不同的值。以及,在执行计划中,对涉及索引到表数据的最终读取的算子,若该算子对应的是数据存储在SSD介质中,则直接进行表扫描,而若该算子对应的是数据存储在SSD介质中,则索引扫描后结果的表空间数据标识 RID进行排序,之后根据排序结果进行表数据读取。只是如此一来,和现有技术中用聚簇因子进行标识的管理方式不同,则需要对现行的数据库管理系统进行修改,其兼容性不够好,并且,这种方式也无法引入逻辑聚簇因子,从而无法改进需要确定两个表之间的算子的这种场景。
这样,针对在表数据存储在不同存储介质的情况下,现有技术的查询只应用一个执行计划,没有针对不同随机I/O能力的SSD和HDD数据区块儿进行适合各自特性的分计划完成由索引到表数据的查询;并且,提出了现有技术所没有的对索引聚簇因子的第二层优化,该第二层优化得到的逻辑聚簇因子可以表示一个数据表整体的情况,这样可以更准确地评估涉及表间运算的各种算法的代价,从而选出更恰当的算法。也就是说,对于分布在混合存储介质下的索引到表数据读取,利用不同存储介质随机 I/O差异化的特点,采用提出的多级聚簇索引,实施不同的索引到表数据的准备过程和访问方式,进行适合各区块的差异性读取方式,从而优化整体的执行DML语句的性能。另一方面,由于现有技术也使用聚簇因子,使得对现有系统的改动较小,能很好地与现有技术兼容,节省了开发和维护成本。
一个实施例中,以查询数据为例进行说明,数据库的表数据存储在混合存储介质上,查询中涉及到索引查询,以及基于索引到表数据的查询。该查询数据的语句对应的执行计划的生成过程中,涉及第一层聚簇因子(原始聚簇因子和虚聚簇因子),以及第二层聚簇因子(逻辑聚簇因子)。下面结合图3,具体描述一个确定第一层聚簇因子和第二层聚簇因子的例子。该实施例中,某数据表分布在多个磁盘介质上,包括至少一个HDD和至少一个SSD,在每个磁盘介质上数据分布的比例用分布比例用变量pi来表示,0≤pi≤1,i为大于1的正整数。可以理解,对一个数据表各个磁盘介质对应的pi之和为1。图3所示的例子中,该数据表的数据分布在一个HDD存储介质和一个SSD存储介质中。其中,存储在HDD存储介质中的数据用CK1表示,存储在SSD存储介质中的数据用CK2表示,数据分布的比例为CK1占20%,,CK2占80%。以分布比例用变量pi来表示,也就是p1=0.2,p2=0.8。
CK1的索引可表示为Ix-CK1,其原始聚簇因子为C1=0.5;
CK2的索引可表示为Ix-CK2,其原始聚簇因子为C2=0.4;
将CK2的原始聚簇因子修正为虚聚簇因子0.95。这也就得到了该表对应的第一层聚簇因子,即修正后,C1=0.5,C2=0.95。
进一步的,根据确定出的第一层聚簇因子,进行第二层逻辑聚簇因子的计算。应理解,只要第二层逻辑聚簇因子中考虑各种不同的存储介质的聚簇因子的差异性,也就是说,使用了对应于HDD介质的原始聚簇因子和对应于SSD介质的虚聚簇因子即可。具体的计算方式可以有很多种,本申请并不限定。例如,对第一层聚簇因子求平均,可以是加权平均,或者直接求平均值。应理解,若使用加权平均,权值可以事先预置,例如根据数据表的数据在各存储介质中的比例来设。再例如,可以根据数据的分布情况,采用统计学的原理,使用现有的统计学公式,或者对现有的统计学公式进行简单的调整后计算。再例如,可以制定一个映射关系,即第二层聚簇因子与一些量之间的映射关系,这些量可以是一个表的第一层聚簇因子的取值,用于表征该表的数据在存储介质中的分布情况的值、用于表示该表要执行的算法的加权因子等中的至少一种。应理解以上根据确定出的第一层聚簇因子,进行第二层逻辑聚簇因子的计算的描述,适用于本申请所有实施例。例如,在一种情况下,对图3的表,C1=0.5, C2=0.95,p1=0.2,p2=0.8,则映射到的逻辑聚簇因子值为0.88。可以直接通过预设的映射关系确定出逻辑聚簇因子。
再例如,可以采用下述公式,其公式为
则在图3对应的例子中,使用该公式计算所得逻辑聚簇因子为C=0.86
在图3对应的例子中,由于引入了虚聚簇因子后,对应于整个表的逻辑聚簇因子要远高于原始聚簇因子范围(原始聚簇因子都小于等于0.5)。而现有技术中,同样会有对整个表的聚簇因子,并且,这个对整个表的聚簇因子会在生成执行计划中,对非索引到数据的操作的种类产生影响。
得出第一层和第二层聚簇因子,是为了采用更适合的方式执行DML语句。
例如,现有技术中,索引到表的数据读取中,是否使用列表预取(List Prefetch)的聚簇因子的阈值大约为0.8。例如,聚簇因子高于0.8,则不使用列表预取,而若低于0.8则使用列表预取。应理解,不适用列表预取其实是在生成执行计划中,对执行该读取操作的代价的评估,例如可以看做是,评估是随机读取数据造成的随机I/O开销大,还是列表预取的排序开销大。在本申请实施例中,由于索引到表的数据读取是对存储介质中数据的读操作,故索引到表的数据读取如何执行取决于第一层聚簇因子。以图3为例,对C1部分的数据采用列表预取,对C2部分的数据不采用列表预取。当然,也可以笼统地以第二层聚簇因子来评估是否要做列表预取,只是这样就不如区分各块数据的存储介质准确。至于以哪层聚簇因子来评估,用户可以预设。以图 3为例,若以第二层聚簇因子来评估,C=0.86,则对该数据表使用列表预取。
再例如,现有技术中,不使用混合连接(Hybrid Join)来执行两个表之间的数据的连接(join)值的聚簇因子的阈值大约为0.8。例如,如果该连接算法中的外表的聚簇因子高于0.8,则不使用混合连接,而若低于0.8则使用混合连接。以图3对应的表是连接算法中的外表为例,可见如果按照现有技术,由于对C1和C2,原始聚簇因子都小于0.8,故将会选取混合连接的连接方法,而实际上由于SSD上数据较多,并且其随机I/O代价很低,优化器并不应该选取混合连接。而对于本申请提出的技术方案,由于连接是表间操作,故应当使用第二层聚簇因子,由于计算出的逻辑聚簇因子 0.86,则不会选取混合连接。从而确定的连接方法更符合数据的存储特性。
除上述混合连接的实施例,第二层聚簇因子(逻辑聚簇因子)还可以有益于位图索引,或者索引间联合过滤相关操作(如BITMAP INDEX ANDING)。根据上述描述,本领域的技术人员可以容易理解,类似地,逻辑聚簇因子将影响Index ANDING算子的选取。如,按照现有技术,如果混和存储中SSD占的比重较大,而原始聚簇性又不好,关于多表间的操作有可能不会采纳Index ANDING算子;而采纳本发明后,由于该情况的逻辑聚簇因子很高,则相应操作会选择Index ANDING算子,从而提升整体执行性能。
可以看出,使用第一层聚簇因子当然优化了索引到表的数据读取,能够更客观地考虑数据存储的特点,从而减少读取数据过程中的随机I/O的开销,以提高对数据进行操作的性能。但是另一方面,使用第一层聚簇因子一定程度上也是为了兼容现有技术,例如执行计划的生成过程中,本来就需要使用聚簇因子。这样就可以根据第一层聚簇因子得到第二层聚簇因子,以替代原本不能准确计算代价的原始聚簇因子。而如果仅仅是为了优化索引到表的数据读取,完全可以像前文所描述的,通过增设标记位等形式(本申请限定具体形式),只要能够区分不同的存储介质,对其采用不同的数据读取方式(例如是否需要对该索引对应的RID列表进行预排序)即可。但是,如果增设置标记位,则会不兼容现有技术,例如,对数据存储在多个存储介质中的表,无法表现整个表的聚簇因子,那么关于表与表之间的操作要选取何种方式,就无法通过现有的以聚簇因子计算开销来选择了。当然,要实现这类功能,显然要进行额外的编码,增加了代码开发的难度和开销。
这从另一方面可以看出,第一层聚簇因子是可以独立使用的,也就是说,如果要考量的操作只涉及索引到表的数据的读取(又被称为底层分计划),那么就无需计算和使用第二层聚簇因子。
同样的,如果只涉及表之间这一层面的操作的算法,例如连接,选择等,则这个执行计划的生成中可能只使用了第二层聚簇因子。逻辑聚簇因子基于第一层聚簇因子 (HDD原始聚簇因子和SSD虚聚簇因子),作为整体对外部代价估算时的聚簇因子,较以往基于纯粹的原始聚簇因子更反应了整体逻辑上的聚簇性,有利于优化器选取最优的执行计划。
也就是说,第一层和第二层聚簇因子在某个任务中,例如生成执行计划,或者计算开销等,不一定都要使用,是由该任务具体针对的对象(是逻辑性的操作,例如表间的一些算法等,还是更具体的指令,如直接针对存储介质中的数据的读写操作)决定的。
下面结合图4,描述针对图3对应的数据表,生成执行计划中与现有技术的不同,具体的,以连接和读取数据为例进行说明。
图4中,在信息统计过程中,通过收集数据的分布信息,以及使用预设的算法,已确定出图3对应的表的信息,例如该表中CK1和CK2部分的原始聚簇因子,第一层聚簇因子以及逻辑聚簇因子,以及,CK1和CK2的数据分布规律。
图4可以理解为接收到一条连接指令A,该连接指令指示对该表以及另一张表的数据做连接,SQL引擎需要基于已确定出的图3对应的表的信息和预置的一些规则,以成该连接指令A的执行计划,例如,该规则包括使用RID列表排序以及混合连接的对应的聚簇因子的阈值为0.8。则若按照现有技术,由于CK1和CK2的原始聚簇因子都小于0.8,故该表对应的聚簇因子也小于0.8,该连接指令A应当按照混合连接来执行(如图中指向混合连接的虚线),但事实上,图3对应的表中80%的数据都分布在SDD存储介质,使用混合连接反而会带来额外的开销。而使用了本申请的方案,则逻辑聚簇因子为0.86,大于0.8,使用嵌套循环连接,当然,也可以是哈希连接等,本申请不做限定,但大于0.8就不会使用混合连接了。
而连接(join)进一步分解,其分执行计划就包括从存储CK1和CK2的存储介质中读取数据,对于存储在HDD的数据CK1,由于对应的第一层聚簇因子等于原始聚簇因子为0.5,故读取数据过程中仍然需要预读取,也就是RID列表排序;而对于存储在SSD的数据CK2,由于对应的第一层聚簇因子为虚聚簇因子为0.95,大于0.8,故读取数据过程中就无需用RID列表排序了,这显然是更为合适的,因为SSD存储介质的随机I/O和HDD存储介质中读取连续数据的I/O消耗相差不大,无需预排序。但是现有技术中(如图4指向SSD的虚线),由于CK2对应的第一层聚簇因子仍然是原始聚簇因子,为0.4,小于0.8,故读取数据过程中就需用RID列表排序,增加了不必要的开销。
综上,可知,在执行计划设计混合存储的数据表的情况下,对混合存储的数据表(该表的数据一部分存储在固态硬盘SSD介质上,一部分存储在机械硬盘HDD介质上),使用了本申请实施例中的虚聚簇因子和逻辑聚簇因子,能够更客观地考虑数据存储的特点,使得生成的执行计划中使用的数据读取方式更符合数据的实际特点,从而减少运行该执行计划中不必要的消耗,以提高对数据进行操作的性能。
下面结合图5,描述一种执行计划的生成装置,该执行计划包括第一分执行计划和第二分执行计划,该装置包括,解析器501,用于解析得到的数据操纵语言DML 语句,以确定所述DML语句对应的第一数据表,所述第一数据表包括存储在固态硬盘SSD介质上的第一数据,以及存储在机械硬盘HDD介质上的第二数据;以及优化器502,用于对所述第一数据,生成所述第一分执行计划,所述第一分执行计划包括通过表扫描读取所述第一数据;以及对所述第二数据,生成所述第二分执行计划,所述第二分执行计划包括在所述第二数据需要预排序的情况下,对所述第二数据预排序后,读取经过预排序的所述第二数据;在所述第二数据无需预排序的情况下,通过表扫描读取所述第二数据。
一种实现方式下,该执行计划的生成装置就是本申请实施例中提及的数据库管理系统中的SQL引擎。
这样,在生成执行计划的过程中,能够更客观地考虑数据存储的特点,针对存储在不同的介质中的数据,使得生成的执行计划中使用的数据读取方式更符合数据在存储介质中的实际情况,从而使得运行该生成的执行计划的开销更小,提高了数据库对数据进行操作的性能,更能节省资源。
由于该装置是本申请实施例所记载的执行计划的生成方法对应的装置,故其各种实现细节及技术效果请参照本申请描述方法的相关段落,此处不再赘述。
另一方面,如图6所示,图6示出了本发明实施例提供的一种物理机的示意性框图,本发明实施例提供一种物理机,该物理机包括处理器40和存储可执行代码的非瞬态计算机可读介质。在一种实现方式下,该存储可执行代码的非瞬态计算机可读介质为存储器42,该物理机还包括接口电路41和系统总线43。为了更好地理解,可以参考图1D的相关说明。例如存储器42相当于图1D的非瞬态计算机可读介质 (non-transitory computer-readablemedium)106的一种实现方式,而处理器40相当于图1D中的处理器104。
存储器42用于存储计算机执行指令,处理器40、接口电路41和存储器42通过系统总线43相互连接,当该物理机运行时,处理器40执行存储器42存储的计算机执行指令,以使该物理机执行本发明实施例提供的执行计划的生成方法,以及第一层聚簇因子和第二层聚簇因子的确定方法,例如图2至图4任一图所对应的。具体可参见上述实施例中的相关描述,为了避免重复,此处不再赘述。
处理器40可以通过一个或多个处理器实现,图6仅以一个处理器为例进行示例性的说明。处理器40可以为中央处理器(英文:central processing unit,缩写:CPU)。处理器40还可以为其他通用处理器、数字信号处理器(英文:digital signal processing,缩写:DSP)、专用集成电路(英文:application specific integrated circuit,缩写:ASIC)、现场可编程门阵列(英文:field-programmable gate array,缩写: FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
接口电路41具体可以是物理机上的通信接口。该通信接口可以为无线通信接口。例如,无线通信接口可以是物理机的无线模块等。处理器40通过接口电路41与其他设备,例如其他物理机之间进行数据的收发。
存储器42可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);存储器42也可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,缩写:ROM),快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);存储器42还可以包括上述种类的存储器的组合。如果该第一数据表就存储在存储器42,那么存储器 42包括HDD和SSD。
存储器42可以包括底层存储介质和内存。其中,内存耦合至底层存储介质,用于作为底层存储介质的缓存。
系统总线43可以包括数据总线、电源总线、控制总线和信号状态总线等。本实施例中为了清楚说明,在图6中将各种总线都示意为系统总线43。
可选的,本实施例还提供一种可读存储介质,该可读存储介质包括计算机执行指令,当物理机运行时,物理机的处理器执行该计算机执行指令,以使物理机执行本发明实施例提供的执行计划的生成方法,以及第一层聚簇因子和第二层聚簇因子的确定方法,例如图2至图4任一图所对应的。
可选的,本实施例中的可读存储介质可以为上述如图6所示的存储器42。
参见图7,本发明实施例还提供一种集群数据库系统500,包括:包括硬件层1007和运行在硬件层1007之上的虚拟机监控器(VMM)1001,以及多个虚拟机1002。一个虚拟机可以作为集群数据库系统500的一个数据节点。可选第,还可以指定一个虚拟机作为协调节点。
具体的,虚拟机1002是通过虚拟机软件在公共硬件资源上模拟出的虚拟的计算机,虚拟机上可以安装操作系统和应用程序,虚拟机还可访问网络资源。对于在虚拟机中运行的应用程序而言,虚拟机就像是在真正的计算机中进行工作。
硬件层1007:虚拟化环境运行的硬件平台,可以由一个或多个物理主机的硬件资源抽象得到的。其中,硬件层可包括多种硬件,例如包括处理器1004(例如CPU) 和存储器1005,还可以包括网卡1003(例如RDMA网卡)、高速/低速输入/输出(I/O, Input/Output)设备,及具有特定处理功能的其它设备。
虚拟机1002基于VMM,以及硬件层1007提供的硬件资源,运行可执行程序,以实现本申请中描述的方法,例如上述图2至图4相关的实施例中SQL引擎和执行引擎的部分或全部功能。为了简洁,在此不再赘述。
进一步地,该集群数据库系统500还可以包括宿主机(Host):作为管理层,用以完成硬件资源的管理、分配;为虚拟机呈现虚拟硬件平台;实现虚拟机的调度和隔离。其中,Host可能是虚拟机监控器(VMM);也有可能是由VMM和1个特权虚拟机的结合。其中,虚拟硬件平台对其上运行的各个虚拟机提供各种硬件资源,如提供虚拟处理器(如VCPU)、虚拟内存、虚拟磁盘、虚拟网卡等等。其中,该虚拟磁盘可对应Host的一个文件或者一个逻辑块设备。虚拟机运行在Host为其准备的虚拟硬件平台上,Host上运行一个或多个虚拟机。虚拟机1002的VCPU通过执行存储在其对应的虚拟内存中的可执行程序,以实现或者执行本发明上述各方法实施例中所描述的方法步骤。例如,实现上述图2至图4相关的实施例中SQL引擎和执行引擎的部分或全部功能。
参见图8,本发明实施例还提供一种数据库系统,包括:数据库服务器800,基于与数据库服务器800通过通信网络连接的客户端设备900。其中,
客户端设备900的硬件层906上运行有客户端操作系统904,操作系统904上运行有应用程序902;数据库服务器800的硬件层816上运行有操作系统814,以及在操作系统814上运行有数据库管理系统812。应用程序902经由通信网络与在数据库服务器800上运行的数据库管理系统812连接并且访问或者操作存储在数据存储器818 中的数据库,例如,通过SQL语句查询、更新或删除数据库中的数据,或者导入新的数据至数据库。
硬件层906和816包含操作系统和应用程序运行所需的基本硬件单元,例如,处理器,例如CPU,内存(Memory)、输入/输出设备、网络接口等。
数据存储器818可以是数据库服务器800的外部存储器,比如硬盘、磁盘、存储阵列,或存储服务器等,与数据库服务器800通信连接。或者,数据存储器818也可以集成在数据库服务器800内部,与处理器和I/O设备通过总线或其它内部通信方式交互数据。
数据库服务器800的内存中存储有可执行代码,该可执行代码在被处理器执行时被配置为实现数据库管理系统812的组件和功能。数据库管理系统812具体可以为图 1D所示的数据库管理系统108,相关功能及实现细节可参照图1D至图4相关的实施例,此处不再赘述。
应理解,在本发明的各种实施例中,“可执行程序”应被广泛地解释为包括但不限于:指令,指令集,代码,代码段,子程序,软件模块,应用,软件包,线程,进程,函数,固件,中间件等。上述实施例描述的方法步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实上施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以硬件、或者计算机软件和硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的数据库服务器、数据管理系统和数据库系统的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备 (可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以及,本申请实施例中,存储介质包括固态硬盘SSD介质和机械硬盘HDD介质。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (17)
1.一种执行计划的生成方法,其特征在于,所述执行计划包括第一分执行计划和第二分执行计划,所述方法包括:
解析得到的数据操纵语言DML语句,以确定所述DML语句对应的第一数据表,所述第一数据表包括存储在固态硬盘SSD介质上的第一数据,以及存储在机械硬盘HDD介质上的第二数据;
对所述第一数据,生成所述第一分执行计划,所述第一分执行计划包括通过表扫描读取所述第一数据;
对所述第二数据,生成所述第二分执行计划,所述第二分执行计划包括在所述第二数据需要预排序的情况下,对所述第二数据预排序后,读取经过预排序的所述第二数据;在所述第二数据无需预排序的情况下,通过表扫描读取所述第二数据。
2.根据权利要求1所述的生成方法,其特征在于,所述对所述第一数据,生成第一分执行计划,包括:
根据所述第一数据的虚聚簇因子的值,生成所述第一分执行计划,所述第一数据的虚聚簇因子表示通过索引读取所述存储于SSD存储介质中的第一数据的代价。
3.根据权利要求2所述的方法,所述方法还包括:
根据所述第一数据所在的存储介质的随机I/O,确定所述第一数据的虚聚簇因子。
4.根据权利要求1到3任一所述的生成方法,其特征在于,所述方法还包括:
根据所述第一数据表的逻辑聚簇因子的值,确定所述执行计划中第一算子,所述第一算子对应于所述第一数据表与第二数据表之间的第一运算,所述第一数据表的逻辑聚簇因子用于替代所述第一数据表的聚簇因子,用于表示以所述第一数据表为整体,通过索引读取所述第一数据表的代价。
5.根据权利要求4所述的生成方法,其特征在于,所述方法还包括:
根据所述第一数据的虚聚簇因子和所述第二数据的聚簇因子,计算所述第一数据表的逻辑聚簇因子,所述第一数据的虚聚簇因子用于表示通过索引读取所述存储于SSD存储介质中的第一数据的代价,所述第二数据的聚簇因子用于表示通过索引读取所述存储于HHD存储介质中的第二数据的代价。
6.根据权利要求4所述的生成方法,其特征在于,所述第一运算为连接(join),所述第一数据表为所述运算中的外表(outer),所述算子为混合连接(Hybrid Join)、嵌套循环连接(Nested Loops Join)、哈希连接(Hash Join)以及排序合并连接中的一种。
7.根据权利要求1所述的生成方法,其特征在于,所述方法还包括:
根据第一标识,确定所述第一数据表中的第一数据和第二数据,所述第一标识用于指示存储数据表中数据的存储介质的类型。
8.根据权利要求1所述的生成方法,其特征在于,所述对所述第一数据,生成第一分执行计划,包括:
根据第二标识,生成所述第一分执行计划,所述第二标识用于标记数据表中存储于固态硬盘SSD介质上的数据。
9.一种执行计划的生成装置,其特征在于,所述执行计划包括第一分执行计划和第二分执行计划,所述生成装置包括:
解析器,用于解析得到的数据操纵语言DML语句,以确定所述DML语句对应的第一数据表,所述第一数据表包括存储在固态硬盘SSD介质上的第一数据,以及存储在机械硬盘HDD介质上的第二数据;
优化器,用于对所述第一数据,生成所述第一分执行计划,所述第一分执行计划包括通过表扫描读取所述第一数据;以及对所述第二数据,生成所述第二分执行计划,所述第二分执行计划包括在所述第二数据需要预排序的情况下,对所述第二数据预排序后,读取经过预排序的所述第二数据;在所述第二数据无需预排序的情况下,通过表扫描读取所述第二数据。
10.根据权利要求9所述的生成装置,其特征在于,在对所述第一数据,生成第一分执行计划的方面,所述优化器用于根据所述第一数据的虚聚簇因子的值,生成所述第一分执行计划,所述第一数据的虚聚簇因子表示通过索引读取所述存储于SSD存储介质中的第一数据的代价。
11.根据权利要求10所述的生成装置,所述装置还包括数据信息采集器,所述数据信息采集器用于根据所述第一数据所在的存储介质的随机I/O,确定所述第一数据的虚聚簇因子。
12.根据权利要求9到11任一所述的生成装置,其特征在于,所述优化器还用于根据所述第一数据表的逻辑聚簇因子的值,确定所述执行计划中第一算子,所述第一算子对应于所述第一数据表与第二数据表之间的第一运算,所述第一数据表的逻辑聚簇因子用于替代所述第一数据表的聚簇因子,用于表示以所述第一数据表为整体,通过索引读取所述第一数据表的代价。
13.根据权利要求12所述的生成装置,其特征在于,所述数据信息采集器还用于:
根据所述第一数据的虚聚簇因子和所述第二数据的聚簇因子,计算所述第一数据表的逻辑聚簇因子,所述第一数据的虚聚簇因子用于表示通过索引读取所述存储于SSD存储介质中的第一数据的代价,所述第二数据的聚簇因子用于表示通过索引读取所述存储于HHD存储介质中的第二数据的代价。
14.根据权利要求12所述的生成装置,其特征在于,所述第一运算为连接(join),所述第一数据表为所述运算中的外表(outer),所述算子为混合连接(Hybrid Join)、嵌套循环连接(Nested Loops Join)、哈希连接(Hash Join)以及排序合并连接中的一种。
15.根据权利要求8所述的生成装置,其特征在于,所述优化器还用于根据第一标识,确定所述第一数据表中的第一数据和第二数据,所述第一标识用于指示存储数据表中数据的存储介质的类型。
16.根据权利要求8所述的生成装置,其特征在于,在对所述第一数据,生成第一分执行计划的方面,所述优化器还用于根据第二标识,生成所述第一分执行计划,所述第二标识用于标记数据表中存储于固态硬盘SSD介质上的数据。
17.一种物理机,其特征在于,所述物理机生成的执行计划包括包括第一分执行计划和第二分执行计划,所述物理机包括:至少一个处理器、存储可执行代码的非瞬态计算机可读介质,所述非瞬态计算机可读介质包括固态硬盘SSD介质和机械硬盘HDD介质;所述可执行代码在被所述至少一个处理器执行时被配置为执行权利要求1-8中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710118119.2A CN108536692B (zh) | 2017-03-01 | 2017-03-01 | 一种执行计划的生成方法、装置及数据库服务器 |
PCT/CN2018/074034 WO2018157680A1 (zh) | 2017-03-01 | 2018-01-24 | 一种执行计划的生成方法、装置及数据库服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710118119.2A CN108536692B (zh) | 2017-03-01 | 2017-03-01 | 一种执行计划的生成方法、装置及数据库服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108536692A true CN108536692A (zh) | 2018-09-14 |
CN108536692B CN108536692B (zh) | 2022-03-11 |
Family
ID=63370551
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710118119.2A Active CN108536692B (zh) | 2017-03-01 | 2017-03-01 | 一种执行计划的生成方法、装置及数据库服务器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108536692B (zh) |
WO (1) | WO2018157680A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109508335A (zh) * | 2018-12-03 | 2019-03-22 | 中国电波传播研究所(中国电子科技集团公司第二十二研究所) | 一种海量地杂波数据分类存储方法 |
CN110532245A (zh) * | 2019-08-22 | 2019-12-03 | 华侨大学 | 一种存储端数据处理模式中的算子问题信息处理方法 |
CN110569257A (zh) * | 2019-09-16 | 2019-12-13 | 上海达梦数据库有限公司 | 数据处理方法、相应装置、设备及存储介质 |
CN110807030A (zh) * | 2019-09-27 | 2020-02-18 | 支付宝(杭州)信息技术有限公司 | 一种数据连接的方法、装置及电子设备 |
CN110968579A (zh) * | 2018-09-30 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 执行计划的生成与执行方法、数据库引擎及存储介质 |
CN113934763A (zh) * | 2021-12-17 | 2022-01-14 | 北京奥星贝斯科技有限公司 | 分布式数据库的sql查询方法及装置 |
CN114443670A (zh) * | 2022-04-07 | 2022-05-06 | 北京奥星贝斯科技有限公司 | 数据的存储、读取方法及装置 |
CN115114359A (zh) * | 2022-05-27 | 2022-09-27 | 马上消费金融股份有限公司 | 用户数据处理方法及装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111767279A (zh) * | 2019-04-01 | 2020-10-13 | 北京百度网讯科技有限公司 | 数据合并方法和装置 |
CN111831425A (zh) * | 2019-04-18 | 2020-10-27 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103377292A (zh) * | 2013-07-02 | 2013-10-30 | 华为技术有限公司 | 数据库结果集缓存方法及设备 |
CN103473260A (zh) * | 2013-06-25 | 2013-12-25 | 北京控制工程研究所 | 一种面向并发olap的测试数据分层聚簇查询处理系统及方法 |
US20150324432A1 (en) * | 2007-09-14 | 2015-11-12 | Oracle International Corporation | Identifying high risk database statements in changing database environments |
CN105518674A (zh) * | 2013-09-05 | 2016-04-20 | 华为技术有限公司 | 优化对称资源上的并行查询执行的机制 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101408900B (zh) * | 2008-11-24 | 2011-03-16 | 中国科学院地理科学与资源研究所 | 一种网格计算环境下的分布式空间数据查询优化方法 |
CN105243068A (zh) * | 2014-07-09 | 2016-01-13 | 华为技术有限公司 | 数据库系统的查询方法、服务器和能耗测试系统 |
CN106796499B (zh) * | 2015-03-16 | 2020-01-31 | 华为技术有限公司 | 优化查询执行计划的方法和计划优化装置 |
-
2017
- 2017-03-01 CN CN201710118119.2A patent/CN108536692B/zh active Active
-
2018
- 2018-01-24 WO PCT/CN2018/074034 patent/WO2018157680A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150324432A1 (en) * | 2007-09-14 | 2015-11-12 | Oracle International Corporation | Identifying high risk database statements in changing database environments |
CN103473260A (zh) * | 2013-06-25 | 2013-12-25 | 北京控制工程研究所 | 一种面向并发olap的测试数据分层聚簇查询处理系统及方法 |
CN103377292A (zh) * | 2013-07-02 | 2013-10-30 | 华为技术有限公司 | 数据库结果集缓存方法及设备 |
CN105518674A (zh) * | 2013-09-05 | 2016-04-20 | 华为技术有限公司 | 优化对称资源上的并行查询执行的机制 |
Non-Patent Citations (1)
Title |
---|
刘军: "高并发数据库下的索引创建和使用技巧", 《中小企业管理与科技(下旬刊)》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110968579B (zh) * | 2018-09-30 | 2023-04-11 | 阿里巴巴集团控股有限公司 | 执行计划的生成与执行方法、数据库引擎及存储介质 |
CN110968579A (zh) * | 2018-09-30 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 执行计划的生成与执行方法、数据库引擎及存储介质 |
CN109508335A (zh) * | 2018-12-03 | 2019-03-22 | 中国电波传播研究所(中国电子科技集团公司第二十二研究所) | 一种海量地杂波数据分类存储方法 |
CN110532245A (zh) * | 2019-08-22 | 2019-12-03 | 华侨大学 | 一种存储端数据处理模式中的算子问题信息处理方法 |
CN110532245B (zh) * | 2019-08-22 | 2022-03-11 | 华侨大学 | 一种存储端数据处理模式中的算子问题信息处理方法 |
CN110569257A (zh) * | 2019-09-16 | 2019-12-13 | 上海达梦数据库有限公司 | 数据处理方法、相应装置、设备及存储介质 |
CN110569257B (zh) * | 2019-09-16 | 2022-04-01 | 上海达梦数据库有限公司 | 数据处理方法、相应装置、设备及存储介质 |
CN110807030A (zh) * | 2019-09-27 | 2020-02-18 | 支付宝(杭州)信息技术有限公司 | 一种数据连接的方法、装置及电子设备 |
CN110807030B (zh) * | 2019-09-27 | 2021-03-16 | 蚂蚁金服(杭州)网络技术有限公司 | 一种数据连接的方法、装置及电子设备 |
CN113934763A (zh) * | 2021-12-17 | 2022-01-14 | 北京奥星贝斯科技有限公司 | 分布式数据库的sql查询方法及装置 |
CN113934763B (zh) * | 2021-12-17 | 2022-04-12 | 北京奥星贝斯科技有限公司 | 分布式数据库的sql查询方法及装置 |
CN114443670A (zh) * | 2022-04-07 | 2022-05-06 | 北京奥星贝斯科技有限公司 | 数据的存储、读取方法及装置 |
CN114443670B (zh) * | 2022-04-07 | 2022-07-08 | 北京奥星贝斯科技有限公司 | 数据的存储、读取方法及装置 |
CN115114359A (zh) * | 2022-05-27 | 2022-09-27 | 马上消费金融股份有限公司 | 用户数据处理方法及装置 |
CN115114359B (zh) * | 2022-05-27 | 2023-11-14 | 马上消费金融股份有限公司 | 用户数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108536692B (zh) | 2022-03-11 |
WO2018157680A1 (zh) | 2018-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108536692A (zh) | 一种执行计划的生成方法、装置及数据库服务器 | |
CN103177056B (zh) | 存储为行存储和列存储二者的混合数据库表 | |
CN103177055B (zh) | 存储为行存储和列存储二者的混合数据库表 | |
CN103177058B (zh) | 存储为行存储和列存储二者的混合数据库表 | |
US20230084389A1 (en) | System and method for providing bottom-up aggregation in a multidimensional database environment | |
CN102663116B (zh) | 面向列存储数据仓库的多维olap查询处理方法 | |
CN106897322B (zh) | 一种数据库和文件系统的访问方法和装置 | |
CN104765731B (zh) | 数据库查询优化方法和设备 | |
US20170083573A1 (en) | Multi-query optimization | |
CN103942342B (zh) | 一种内存数据库oltp&olap并发查询优化方法 | |
CN103309958B (zh) | Gpu和cpu混合架构下的olap星型连接查询优化方法 | |
CN107122443A (zh) | 一种基于Spark SQL的分布式全文检索系统及方法 | |
CN106372114A (zh) | 一种基于大数据的联机分析处理系统和方法 | |
CN103970902A (zh) | 一种大量数据情况下的可靠即时检索方法及系统 | |
US8825621B2 (en) | Transformation of complex data source result sets to normalized sets for manipulation and presentation | |
JP2017037648A (ja) | ハイブリッドデータを保存するためのハイブリッドデータストレージシステム、方法及びプログラム | |
EP3584704A1 (en) | Shared cache used to provide zero copy memory mapped database | |
US20150006509A1 (en) | Incremental maintenance of range-partitioned statistics for query optimization | |
US20070250517A1 (en) | Method and Apparatus for Autonomically Maintaining Latent Auxiliary Database Structures for Use in Executing Database Queries | |
CN107077480A (zh) | 基于查询需求自适应地从当前时间的行存储数据库中构建列存储数据库的方法和系统 | |
CN103631911A (zh) | 基于数组存储和向量处理的olap查询处理方法 | |
US20100235344A1 (en) | Mechanism for utilizing partitioning pruning techniques for xml indexes | |
CN106599040A (zh) | 一种面向云存储的分层索引方法与检索方法 | |
CN108009270A (zh) | 一种基于分布式内存计算的文本检索方法 | |
Sinthong et al. | Aframe: Extending dataframes for large-scale modern data analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |