CN114153874A - 基数估计方法、装置、电子设备及存储介质 - Google Patents
基数估计方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN114153874A CN114153874A CN202111354330.7A CN202111354330A CN114153874A CN 114153874 A CN114153874 A CN 114153874A CN 202111354330 A CN202111354330 A CN 202111354330A CN 114153874 A CN114153874 A CN 114153874A
- Authority
- CN
- China
- Prior art keywords
- target operation
- target
- identifier
- radix
- shared memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000006870 function Effects 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 18
- 238000013507 mapping Methods 0.000 claims description 17
- 238000004422 calculation algorithm Methods 0.000 claims description 16
- 238000000354 decomposition reaction Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- 238000005457 optimization Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 238000012937 correction Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种基数估计方法、装置、电子设备及存储介质,应用于数据库技术领域,所述方法包括:对数据库查询语句进行分解,得到至少一个目标运算;根据至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与目标运算标识对应的目标行数值,共享内存用于存储不同的运算标识与行数值的对应关系,行数值为与运算标识对应的运算的执行结果;如果从共享内存中查询到与第一目标运算标识对应的第一目标行数值,则将第一目标行数值确定为与第一目标运算标识对应的第一目标运算的基数估计值,第一目标运算为至少一个目标运算中的任一目标运算。本申请可以实现快速、准确地基数估计。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种基数估计方法、装置、电子设备及存储介质,适用于数据库SQL(Structured Query Language,结构化查询语言)优化中的执行计划优化。
背景技术
目前主流的数据库优化器查询优化策略都是CBO(Cost-Based Optimization,基于代价的优化)方式。基数是执行计划中每个运算操作返回的行数,是计算执行代价的一个重要参数,基数估计的效率以及准确性关系到数据库优化器能否快速、准确地生成最优执行计划。基数估计对保证成本模型的准确性,进而找到好的连接顺序至关重要。如果没有好的基数估计,则可能导致查询性能缓慢。
因此,数据库查询过程中如何快速、精确地进行基数估计成为数据库查询优化中面临的重要问题。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种基数估计方法、装置、电子设备及存储介质。
根据本申请的第一方面,提供了一种基数估计方法,包括:
对数据库查询语句进行分解,得到至少一个目标运算;
根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,其中,所述共享内存用于存储不同的运算标识与行数值的对应关系,所述行数值为与所述运算标识对应的运算的执行结果;
如果从所述共享内存中查询到与第一目标运算标识对应的第一目标行数值,则将所述第一目标行数值确定为与所述第一目标运算标识对应的第一目标运算的基数估计值,其中,所述第一目标运算为所述至少一个目标运算中的任一目标运算。
根据本申请的第二方面,提供了一种基数估计装置,包括:
分解模块,用于对数据库查询语句进行分解,得到至少一个目标运算;
查询模块,用于根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,其中,所述共享内存用于存储不同的运算标识与行数值的对应关系,所述行数值为与所述运算标识对应的运算的执行结果;
基数确定模块,用于如果从所述共享内存中查询到与第一目标运算标识对应的第一目标行数值,则将所述第一目标行数值确定为与所述第一目标运算标识对应的第一目标运算的基数估计值,其中,所述第一目标运算为所述至少一个目标运算中的任一目标运算。
根据本申请的第三方面,提供了一种电子设备,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现第一方面所述的基数估计方法。
根据本申请的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的基数估计方法。
根据本申请的第五方面,提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行第一方面所述的基数估计方法。
本申请实施例提供的技术方案与现有技术相比具有如下优点:
通过在数据库系统的共享内存中存储不同的运算标识与行数值的对应关系,其中行数值为与所述运算标识对应的运算的执行结果,从而对于获取的数据库查询语句,可以对数据库查询语句进行分解得到至少一个目标运算,进而根据每个目标运算分别对应的目标运算标识,查询共享内存中是否存在与目标运算标识对应的目标行数值,并在从共享内存中查询到与第一目标运算标识对应的第一目标行数值时,将第一目标行数值确定为与第一目标运算标识对应的第一目标运算的基数估计值,其中第一目标运算为至少一个目标运算中的任一目标运算。采用上述技术方案,实现了将存储的实际执行值确定为基数估计值,从而实现了快速、准确地基数估计,有利于提高查询性能。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的基数估计方法的流程示意图;
图2为本申请一示例性实施例提供的树形关系的原子运算示例图;
图3为本申请一示例性实施例提供的二级哈希表的示例图;
图4为本申请一实施例提供的基于运行结果反馈的基数估计方法的模块图;
图5为本申请一具体实施例提供的基数估计方法的流程示意图;
图6为本申请一实施例提供的基数估计装置的结构示意图;
图7为本申请一实施例提供的电子设备的一种结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
在数据库领域,基数估计的效率及准确性关系到查询优化器能否快速、准确地生成最优的执行计划。目前,数据库系统进行基数估计的方式通常有如下两类:
(1)传统基数估计方法。这种方法是利用采样、哈希、直方图等方法对数据进行分析建立统计信息,查询时利用统计信息估算一个基数值。这种方式的缺点是统计信息为静态数据和采样数据,因此基数估计值会出现不准确的情况。
(2)基于机器学习的基数估计方法。这种方法是在运行过程中利用机器学习理论进行基数估算。该方案缺点是比较复杂,难以适应现场可能出现的复杂应用场景,且机器学习的训练集收集时间长,系统数据频繁变更时可能性能下降。
针对上述问题,本申请提供了一种基数估计方法,通过在数据库系统的共享内存中存储不同的运算标识与行数值的对应关系,其中行数值为与所述运算标识对应的运算的执行结果,从而对于获取的数据库查询语句,可以对数据库查询语句进行分解得到至少一个目标运算,进而根据每个目标运算分别对应的目标运算标识,查询共享内存中是否存在与目标运算标识对应的目标行数值,并在从共享内存中查询到与第一目标运算标识对应的第一目标行数值时,将第一目标行数值确定为与第一目标运算标识对应的第一目标运算的基数估计值,其中第一目标运算为至少一个目标运算中的任一目标运算。采用上述技术方案,实现了将存储的实际执行值确定为基数估计值,从而实现了快速、自动、准确地基数估计,有利于提高查询性能。本申请的方案尽量减少了对当前系统的CPU的占用和对存储资源的影响,并且能适应数据库系统频繁的数据变更,灵活性强。
图1为本申请一实施例提供的基数估计方法的流程示意图,该方法可以由本申请实施例提供的基数估计装置执行,其中该装置可以采用软件和/或硬件实现,一般可集成在数据库等电子设备中。如图1所示,该基数估计方法可以包括以下步骤:
步骤101,对数据库查询语句进行分解,得到至少一个目标运算。
当用户输入数据库查询语句来查询数据库时,数据库系统可以对数据库查询语句进行分解,拆分出数据库查询语句中包含的每个运算,从而得到至少一个目标运算。
示例性地,数据库查询语句可以是SQL语句。
本申请实施例中,将数据库查询语句分解为不同的运算,各运算是树形关系的原子运算。
其中,各运算的树形关系可以包括但不限于:对数据表的查询(运算标识:表的别名+查询条件)、多表的连接(运算标识:多个表的别名+连接条件)、子查询(运算标识:子查询的别名),等等。
举例而言,假设数据库查询语句为“select*from a join b on a.id=b.id anda.id<10;”,则可以将该数据库查询语句分解为如图2所示的树形关系的3个原子运算。图2中,“Ajoin B a.id=b.id”、“A(a.id<10)”和“B”是各原子运算的运算标识。
步骤102,根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,其中,所述共享内存用于存储不同的运算标识与行数值的对应关系,所述行数值为与所述运算标识对应的运算的执行结果。
能够理解的是,同一查询块表的别名是不同的,不同查询块中的表可以通过查询的层次区分,所以同一个数据库查询语句中的不同运算都是有一个唯一的标识的。基于这一原理,可以在数据库系统的共享内存中存储不同的运算标识与行数值的对应关系,其中,每个运算标识对应的行数值,是该运算标识对应的运算的执行结果。
在本申请的一种可选实施方式中,可以在数据库系统的共享内存中定义一个哈希表,以不同的运算标识作为哈希键(key),以各运算标识对应的行数值作为哈希值(value),由各运算标识及对应的行数值组成哈希键值对,记录在共享内存的哈希表中。
步骤103,如果从所述共享内存中查询到与第一目标运算标识对应的第一目标行数值,则将所述第一目标行数值确定为与所述第一目标运算标识对应的第一目标运算的基数估计值,其中,所述第一目标运算为所述至少一个目标运算中的任一目标运算。
本申请实施例中,将数据库查询语句分解为至少一个目标运算之后,可以根据每个目标运算对应的目标运算标识,联合查询和子查询等运算,查询共享内存中是否存在与各个目标运算标识对应的目标行数值。对于至少一个目标运算中的第一目标运算,其中,第一目标运算是至少一个目标运算中的任一目标运算,第一目标运算对应的运算标识称为第一目标运算标识,如果从共享内存中查询到第一目标运算标识对应的第一目标行数值,则将第一目标行数值确定为第一目标运算的基数估计值。
进一步地,在本申请的一种可选实施方式中,如果从所述共享内存中未查询到与所述第一目标运算标识对应的第一目标行数值,则基于所述数据库系统的基数估计算法进行基数估计,得到所述第一目标运算的基数估计值。
其中,数据库系统的基数估计算法可以是预先配置在数据库系统中的基数估计算法,采用的基数估计算法可以是目前常用的基数估计算法,本申请对此不作限制。
能够理解的是共享内存中存储的各个运算标识对应的行数值,是与运算标识对应的运算的执行结果,是执行运算的实际执行结果,当再次执行相同的数据库查询语句时,根据分解得到的目标运算的运算标识,可以从共享内存中直接读取运算标识对应的行数值作为基数估计值,也就是将之前查询的执行结果作为后续查询操作的基数估计值,实现了快速、自动、准确地基数估计,并且基数估计值是直接从共享内存中读取获得的,无需复杂的计算操作,使得本申请的方案能够尽量减少对当前数据库系统的CPU的占用,以及减少了对存储资源的影响。
本实施例的基数估计方法,通过在数据库系统的共享内存中存储不同的运算标识与行数值的对应关系,其中行数值为与所述运算标识对应的运算的执行结果,从而对于获取的数据库查询语句,可以对数据库查询语句进行分解得到至少一个目标运算,进而根据每个目标运算分别对应的目标运算标识,查询共享内存中是否存在与目标运算标识对应的目标行数值,并在从共享内存中查询到与第一目标运算标识对应的第一目标行数值时,将第一目标行数值确定为与第一目标运算标识对应的第一目标运算的基数估计值,其中第一目标运算为至少一个目标运算中的任一目标运算。采用上述技术方案,实现了将存储的实际执行值确定为基数估计值,从而实现了快速、自动、准确地基数估计,有利于提高查询性能。
本申请实施例中,确定了各个目标运算的基数估计值之后,结合基数估计值,数据库系统的查询优化器可以生成最优执行计划,由数据库系统的执行器按照最优执行计划执行查询操作,得到各个目标运算对应的执行结果。从而,在本申请的一种可选实施方式中,可以利用执行结果对共享内存中各个目标运算的目标运算标识对应的行数值进行修正,以实现共享内存中行数值的自动更新,实现基数估计值的自调优。
具体地,在本申请的一种可选实施方式中,在得到所述第一目标运算的基数估计值之后,所述方法还包括:
在执行完所述数据库查询语句后,获取所述每个目标运算的目标执行结果;
将所述第一目标运算的基数估计值与所述第一目标运算的目标执行结果进行比较;
如果所述第一目标运算的基数估计值与所述第一目标运算的目标执行结果不一致,则将所述共享内存中与所述第一目标运算标识对应的第一目标行数值,更新为所述第一目标运算的目标执行结果。
每次执行完数据库查询语句之后,会得到数据库查询语句分解出的各个目标运算返回的结果大小值,结果大小值是每个目标运算返回的行数,称为目标运算的目标执行结果。对于第一目标运算,即对于数据库查询语句分解得到的目标运算中的任一目标运算,可以将第一目标运算的基数估计值与第一目标运算的目标执行结果进行比较,比较两者是否一致,如果第一目标运算的基数估计值与第一目标运算的目标执行结果一致,则不更新共享内存中第一目标运算标识对应的行数值,而如果第一目标运算的基数估计值与第一目标运算的目标执行结果不一致,则将共享内存中与第一目标运算标识对应的第一目标行数值,更新为第一目标运算的目标执行结果。
能够理解的是,在数据库系统运行一段时间之后,如果对应数据表的数据发生了改变,则实际运算的返回值个数和共享内存中缓存的行数值不相等,此时将新的结果集个数更新到共享内存中。因此,上述对共享内存中的行数值进行修正的过程,是一个持续的自调优的过程,整个过程不需要管理员介入,并且更适合运行在OLAP(Online AnalyticalProcessing,联机分析处理)的场景下。
本申请实施例中,通过在执行完数据库查询语句后,获取每个目标运算的目标执行结果,并将第一目标运算的基数估计值与第一目标运算的目标执行结果进行比较,在第一目标运算的基数估计值与第一目标运算的目标执行结果不一致时,则将共享内存中与第一目标运算标识对应的第一目标行数值,更新为第一目标运算的目标执行结果,由此,实现了基于实际执行的结果值对共享内存中运算标识对应的行数值进行更新,能够及时修正共享内存中的行数值,有利于提高基数估计的准确性。
如前文所述,本申请实施例中,可以在共享内存中定义一个哈希表来存储运算标识及对应的行数值。进一步地,哈希表可以是一个二级哈希,其中,第一级哈希的哈希键是数据库查询语句的语句标识(queryID),哈希值是语句标识对应的行数映射哈希表,存储的是语句标识与行数映射哈希表的对应关系,第二级哈希即行数映射哈希表,其哈希键是运算标识,哈希值是与运算标识对应的行数值。从而,在本申请的一种可选实施方式中,所述根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,包括:
根据所述数据库查询语句的语句标识,从所述哈希表中确定出与所述数据库查询语句对应的行数映射哈希表;
根据所述每个目标运算分别对应的目标运算标识,查询所述行数映射哈希表中是否存在与所述目标运算标识对应的目标行数值。
本申请实施例中,数据库查询语句具有唯一的语句标识,不同的数据库查询语句的语句标识不同,而不同时刻输入的相同的数据库查询语句的语句标识相同。因此,本申请中,在查询共享内存时,可以先根据数据库查询语句的语句标识,从哈希表中确定出与该数据库查询语句对应的行数映射哈希表,行数映射哈希表中存储的是与该数据库查询语句相关的所有运算的行数缓存,之后,根据该数据库查询语句分解得分的每个目标运算的目标运算标识,查询行数映射哈希表中是否存储与目标运算标识对应的目标行数值。
示例性地,图3为本申请一示例性实施例提供的二级哈希表的示例图,如图3所示,语句标识queryID1对应queryID1缓存的行数映射表,语句标识queryID2对应queryID2缓存的行数映射表,图3的右边部分是行数映射表的具体内容。从图3可以看出,queryID1缓存的行数映射表和queryID2缓存的行数映射表中存储的是不同的运算标识对应的行数值,其中,每个运算标识对应的行数值是该运算标识对应的运算在实际执行时得到的行数。
本申请实施例中,可以在数据库系统中设置一个反馈功能开关,由反馈功能开关的状态来决定是否基于执行结果来进行基数估计。当反馈功能开关处于开启状态时,则基于执行结果进行基数估计,将执行结果缓存在共享内存中以用于后续执行相同的数据库查询语句时,从共享内存中读取缓存的执行结果作为基数估计值。当反馈功能开关处于关闭状态时,则不基于执行结果进行基数估计,而是采用数据库系统的基数估计算法来估计基数值。从而,在本申请的一种可选实施方式中,所述方法还包括:确定所述数据库系统开启反馈功能。
进一步地,在本申请的一种可选实施方式中,所述方法还包括:
在所述数据库系统未开启所述反馈功能的情况下,基于所述数据库系统的基数估计算法进行基数估计。
也就是说,前述实施例所述的从共享内存中读取目标运算标识对应的目标行数值作为目标运算的基数估计值的方案,其实施条件是数据库系统开启了反馈功能。如果数据库系统未开启反馈功能,则采用数据库系统中设置的基数估计算法进行基数估计。
本申请实施例中,通过设置反馈功能,在确定数据库系统开启反馈功能时才基于实际执行的运行结果进行基数估计,在数据库系统未开启反馈功能时则基于数据库系统的基数估计算法进行基数估计,由此,能够根据需求选择是否基于实际运行结果进行基数估计,提高了方法的灵活性。
本申请的核心在于缓存执行结果作为基数估计值,以及通过执行结果的反馈持续不断地修正基数估计的不准确值。图4为本申请一实施例提供的基于运行结果反馈的基数估计方法的模块图,其中,基数估计自动修正模块用于对共享内存中缓存的行数值进行修正。图4中,查询解析器从基数估计自动修正模块查询运算的基数估计值,并将基数估计值反馈给查询优化器,由查询优化器根据基数估计值选择出最优执行计划,查询执行器根据最优执行计划执行查询操作,查询数据,查询结果反馈给基数估计自动修正模块,基数估计自动修正模块比较确定的基数估计值和反馈的查询结果,在两者不一致时将缓存的行数值修正为查询结果的行数。
图5为本申请一具体实施例提供的基数估计方法的流程示意图。如图5所示,在优化器识别开启反馈功能时,从共享内存中读取数据库查询语句中各运算的运算标识对应的行数值,对于查询语句涉及的每个表,联合查询、子查询等判断共享内存中是否存在运算标识对应的行数值,如果存在,则将存储的行数值作为运算的基数估计值,如果不存在,则利用数据库系统的基数估计算法进行基数估计以获得基数估计值。另外,当优化器识别未开启反馈功能时,则利用数据库系统的基数估计算法进行基数估计以获得基数估计值。获得运算的基数估计值之后,则根据基数估计值选择出最优执行计划,执行器按照最优执行计划执行操作,并在开启反馈功能时,将执行操作的反馈结果与预估的基数估计值进行比较,将基数估计值与实际执行的反馈结果不同的表的反馈结果存入关系内存中。其中,为合理利用空间,共享内存中只存储运行反馈的值和基数估计值不同的。本申请的方案通过将每个运算的基数估计值和实际执行结果大小进行比较,将基数估计有偏差的运算存储在共享内存的哈希表中(哈希表的key为运算标识,value为实际执行结果大小),下次再为运算执行基数估计时,可以直接将缓存的实际值作为基数估算值,提高了基数值估计的准确性。
能够理解的是,在数据库查询语句第一次生成执行计划时,共享内存中未缓存该数据库查询语句的行数值,此时通过数据库系统的基数估计算法为各运算进行基数估计。在第一次执行之后,可以将第一次的执行结果缓存在共享内存中,当再次执行同样的数据库查询语句时,即可从共享内存中直接读取缓存的行数值作为基数估计值。
相应于上述方法实施例,本申请实施例还提供了一种基数估计装置。
图6为本申请一实施例提供的基数估计装置的结构示意图,如图6所示,该基数估计装置60可以包括:分解模块610、查询模块620和基数确定模块630。
其中,分解模块610,用于对数据库查询语句进行分解,得到至少一个目标运算;
查询模块620,用于根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,其中,所述共享内存用于存储不同的运算标识与行数值的对应关系,所述行数值为与所述运算标识对应的运算的执行结果;
基数确定模块630,用于如果从所述共享内存中查询到与第一目标运算标识对应的第一目标行数值,则将所述第一目标行数值确定为与所述第一目标运算标识对应的第一目标运算的基数估计值,其中,所述第一目标运算为所述至少一个目标运算中的任一目标运算。
可选地,所述基数估计装置60还包括:
基数估计模块,用于如果从所述共享内存中未查询到与所述第一目标运算标识对应的第一目标行数值,则基于所述数据库系统的基数估计算法进行基数估计,得到所述第一目标运算的基数估计值。
可选地,所述基数估计装置60还包括:
执行结果获取模块,用于在执行完所述数据库查询语句后,获取所述每个目标运算的目标执行结果;
比较模块,用于将所述第一目标运算的基数估计值与所述第一目标运算的目标执行结果进行比较;
更新模块,用于如果所述第一目标运算的基数估计值与所述第一目标运算的目标执行结果不一致,则将所述共享内存中与所述第一目标运算标识对应的第一目标行数值,更新为所述第一目标运算的目标执行结果。
可选地,以所述不同的运算标识作为哈希键、以所述行数值作为哈希值存入所述共享内存的哈希表中。
可选地,所述哈希表为二级哈希,所述查询模块620,还用于:
根据所述数据库查询语句的语句标识,从所述哈希表中确定出与所述数据库查询语句对应的行数映射哈希表;
根据所述每个目标运算分别对应的目标运算标识,查询所述行数映射哈希表中是否存在与所述目标运算标识对应的目标行数值。
可选地,所述基数估计装置60还包括:
确定模块,用于确定所述数据库系统开启反馈功能。
可选地,所述基数估计装置60还包括:
估计模块,用于在所述数据库系统未开启所述反馈功能的情况下,基于所述数据库系统的基数估计算法进行基数估计。
本公开实施例所提供的基数估计装置,可执行本公开实施例所提供的任意可应用于数据库等电子设备的基数估计方法,具备执行方法相应的功能模块和有益效果。本公开装置实施例中未详尽描述的内容可以参考本公开任意方法实施例中的描述。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
在本申请的示例性实施例中,还提供一种电子设备,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现如上述实施例所述的基数估计方法的步骤。
图7为本申请一实施例提供的电子设备的一种结构示意图。需要说明的是,图7示出的电子设备500仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,电子设备500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统操作所需的各种程序和数据。中央处理单元501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如局域网(LAN)卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元501执行时,执行本申请的装置中限定的各种功能。
本申请实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例所述的基数估计方法的步骤。
需要说明的是,本申请所示的计算机可读存储介质例如可以是—但不限于—电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器、只读存储器、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、射频等等,或者上述的任意合适的组合。
本申请实施例中,还提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机执行上述实施例所述的基数估计方法的步骤。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种基数估计方法,其特征在于,所述方法包括:
对数据库查询语句进行分解,得到至少一个目标运算;
根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,其中,所述共享内存用于存储不同的运算标识与行数值的对应关系,所述行数值为与所述运算标识对应的运算的执行结果;
如果从所述共享内存中查询到与第一目标运算标识对应的第一目标行数值,则将所述第一目标行数值确定为与所述第一目标运算标识对应的第一目标运算的基数估计值,其中,所述第一目标运算为所述至少一个目标运算中的任一目标运算。
2.根据权利要求1所述的基数估计方法,其特征在于,所述方法还包括:
如果从所述共享内存中未查询到与所述第一目标运算标识对应的第一目标行数值,则基于所述数据库系统的基数估计算法进行基数估计,得到所述第一目标运算的基数估计值。
3.根据权利要求1或2所述的基数估计方法,其特征在于,所述方法还包括:
在执行完所述数据库查询语句后,获取所述每个目标运算的目标执行结果;
将所述第一目标运算的基数估计值与所述第一目标运算的目标执行结果进行比较;
如果所述第一目标运算的基数估计值与所述第一目标运算的目标执行结果不一致,则将所述共享内存中与所述第一目标运算标识对应的第一目标行数值,更新为所述第一目标运算的目标执行结果。
4.根据权利要求1所述的基数估计方法,其特征在于,以所述不同的运算标识作为哈希键、以所述行数值作为哈希值存入所述共享内存的哈希表中。
5.根据权利要求4所述的基数估计方法,其特征在于,所述哈希表为二级哈希,所述根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,包括:
根据所述数据库查询语句的语句标识,从所述哈希表中确定出与所述数据库查询语句对应的行数映射哈希表;
根据所述每个目标运算分别对应的目标运算标识,查询所述行数映射哈希表中是否存在与所述目标运算标识对应的目标行数值。
6.根据权利要求1所述的基数估计方法,其特征在于,所述方法还包括:
确定所述数据库系统开启反馈功能。
7.根据权利要求6所述的基数估计方法,其特征在于,所述方法还包括:
在所述数据库系统未开启所述反馈功能的情况下,基于所述数据库系统的基数估计算法进行基数估计。
8.一种基数估计装置,其特征在于,包括:
分解模块,用于对数据库查询语句进行分解,得到至少一个目标运算;
查询模块,用于根据所述至少一个目标运算中的每个目标运算分别对应的目标运算标识,查询数据库系统的共享内存中是否存在与所述目标运算标识对应的目标行数值,其中,所述共享内存用于存储不同的运算标识与行数值的对应关系,所述行数值为与所述运算标识对应的运算的执行结果;
基数确定模块,用于如果从所述共享内存中查询到与第一目标运算标识对应的第一目标行数值,则将所述第一目标行数值确定为与所述第一目标运算标识对应的第一目标运算的基数估计值,其中,所述第一目标运算为所述至少一个目标运算中的任一目标运算。
9.一种电子设备,其特征在于,包括:处理器,所述处理器用于执行存储于存储器的计算机程序,所述计算机程序被处理器执行时实现如权利要求1-7任一项所述的基数估计方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7任一项所述的基数估计方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111354330.7A CN114153874A (zh) | 2021-11-12 | 2021-11-12 | 基数估计方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111354330.7A CN114153874A (zh) | 2021-11-12 | 2021-11-12 | 基数估计方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114153874A true CN114153874A (zh) | 2022-03-08 |
Family
ID=80456516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111354330.7A Pending CN114153874A (zh) | 2021-11-12 | 2021-11-12 | 基数估计方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114153874A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023185264A1 (zh) * | 2022-03-31 | 2023-10-05 | 华为技术有限公司 | 一种基数估计方法及装置 |
-
2021
- 2021-11-12 CN CN202111354330.7A patent/CN114153874A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023185264A1 (zh) * | 2022-03-31 | 2023-10-05 | 华为技术有限公司 | 一种基数估计方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7610264B2 (en) | Method and system for providing a learning optimizer for federated database systems | |
EP3007079B1 (en) | Dynamic database query efficiency improvement | |
US7747606B2 (en) | Automatic SQL tuning advisor | |
US6546394B1 (en) | Database system having logical row identifiers | |
US6850925B2 (en) | Query optimization by sub-plan memoization | |
US7987178B2 (en) | Automatically determining optimization frequencies of queries with parameter markers | |
US7509311B2 (en) | Use of statistics on views in query optimization | |
WO2017183065A1 (ja) | リレーショナルデータベースのチューニング装置及び方法 | |
CN107783985B (zh) | 一种分布式数据库查询方法、装置及管理系统 | |
US20060041544A1 (en) | Techniques for processing database queries including user-defined functions | |
CN112162983A (zh) | 数据库索引建议处理方法、装置、介质和电子设备 | |
JP6982049B2 (ja) | インデックスを管理するための方法、装置、設備及び記憶媒体 | |
US20220050843A1 (en) | Learning-based query plan cache for capturing low-cost query plan | |
CN113535753A (zh) | 一种基于并行遍历算法的sql语句执行计划定位方法和装置 | |
CN114153874A (zh) | 基数估计方法、装置、电子设备及存储介质 | |
US9342545B2 (en) | Using a partially built index in a computer database system | |
CN108536819B (zh) | 整型列与字符串比较的方法、装置、服务器及存储介质 | |
CN115757479A (zh) | 数据库的查询优化方法、机器可读存储介质与计算机设备 | |
CN110147396B (zh) | 一种映射关系生成方法及装置 | |
Schnaitter et al. | A benchmark for online index selection | |
CN115114325A (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
CN112835905B (zh) | 一种数组类型列的索引方法、装置、设备以及存储介质 | |
CN115455057A (zh) | 数据库连接操作的执行方法、存储介质与计算机设备 | |
CN115391424A (zh) | 数据库查询的处理方法、存储介质与计算机设备 | |
CN111221864A (zh) | 一种基于mysql慢查询日志词频分析的索引智能推荐方法 |
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 | ||
CB02 | Change of applicant information |
Country or region after: China Address after: 100102 201, 2 / F, 101, No. 5 building, No. 7 Rongda Road, Chaoyang District, Beijing Applicant after: China Electronics Technology Group Jincang (Beijing) Technology Co.,Ltd. Address before: 100102 201, 2 / F, 101, No. 5 building, No. 7 Rongda Road, Chaoyang District, Beijing Applicant before: BEIJING KINGBASE INFORMATION TECHNOLOGIES Inc. Country or region before: China |
|
CB02 | Change of applicant information |