一种数据库高频SQL查询方法、系统和存储介质与流程

文档序号:26139672发布日期:2021-08-03 14:23阅读:184来源:国知局
一种数据库高频SQL查询方法、系统和存储介质与流程

本发明属于数据库技术领域,具体涉及一种数据库高频sql查询方法、系统和存储介质。



背景技术:

在数据库中通过sql对表进行查询或多个表关联查询后的结果集可临时缓存到内存中,但随着内存中数据的增多,内存不能无限的缓存结果集,默认最近未被使用过的结果集会被挤出内存。如果再次对这个表或多个表进行关联查询时,就无法从内存中获取到结果集,需要从磁盘读取结果集再到内存中,从磁盘中读取数据的效率比在内存中读取的效率低很多。如果查询的结果集数据量比较大,可能会非常耗时,浪费时间。

如何将执行频率比较高的sql查询结果集永久保存起来,以减少sql的重复解析和重新生成结果集的时间;如何在内存中对缓存的结果集进一步优化提高查询效率;如何实现结果集的分层存储,以缓解内存空间资源的压力。以上为现有技术需要解决的问题。

有鉴于此,本发明提供一种数据库高频sql查询方法、系统和存储介质,以解决现有技术存在的缺陷。



技术实现要素:

针对现有数据库高频sql查询效率低的问题,本发明提供一种数据库高频sql查询方法、系统和存储介质,将执行频率比较高的sql查询结果集永久保存起来,减少sql的重复解析和重新生成结果集的时间,对缓存的结果集进一步优化提高查询效率,实现结果集的分层存储以缓解内存空间资源的压力。

为实现上述目的,本发明给出以下技术方案:

第一方面,本发明提供一种数据库高频sql查询方法,包括以下步骤:

s1:在数据库中抓取sql相关信息,创建存储表;

s2:创建触发器将sql执行后的结果集存储到对应存储表中,触发器实时更新结果集并将更新后的结果集同步到存储表;

s3:建立sqlid与存储表之间的映射关系,生成映射表;

s4:将存储表中的结果集数据进行分层存储。

作为优选,所述步骤s4完成后,触发存储表使得表中的结果集数据发生强制落盘行为,将数据备份到磁盘中;通过该步骤将结果集数据在内存、磁盘中各存储一份,保证数据不会丢失。

作为优选,所述步骤s1包括以下步骤:

在数据库中实时扫描获取sql相关信息并记录下来;根据sql的执行频率将sql划分为高频sql、中频sql、中低频sql和低频sql;

分别为高频sql、中频sql和中低频sql创建存储表,存储表的表名为sql对应的sqlid。

通过步骤s1对sql进行捕获,获取sqlid、sql执行次数等信息,并根据执行频率对sql进行划分,为执行频率较高的sql建立存储表。

作为优选,所述步骤s2包括以下步骤:

s2.1:创建触发器,触发器通过sqlid跟踪该sql的执行;

s2.2:该sql执行完毕后,触发器将执行完毕的结果集数据导入以sqlid命名的存储表中,做一次全量同步;

s2.3:判断sql所查询的表数据是否发生变化,判断结果为是则触发器即时触发一次sql执行,并将执行的结果集记录到表名为sqlid的存储表中,新的结果集将覆盖存储表中原有的结果集,判断结果为否则继续判断sql所查询的表数据是否发生变化。

通过步骤s2将高频sql、中频sql和中低频sql执行后的结果集数据记录在存储表中,并且当sql所查询的表数据发生变化后将即时触发数据的同步,保证用户在对结果集数据进行查询时都是最新的数据,不会发生sql所查询的表数据变化但结果集数据未更新的情况,确保数据的准确性。

作为优选,所述步骤s4包括以下步骤:

s4.1:在数据库的内存区域创建结果集缓存区作为热数据存储区,将aep非易失性内存作为温数据存储区,将ssd或hdd硬盘作为冷数据存储区;

s4.2:将存储表中的结果集数据分别存储到热数据存储区、温数据存储区和冷数据存储区;结果集数据进行分层存储能够进一步缓解内存的存储压力;

s4.3:分层存储后,每层的结果集数据均进行分块,其中每个块包括两部分,前部为索引,后部为对应的数据,扫描索引能够快速找到对应的数据。对结果集数据进行分块能够缩短结果集查找时间,进一步提高结果集查找效率。

作为优选,所述步骤s4.2的存储过程如下:

第一步:将高频sql对应的结果集数据先存放在结果集缓存区,结果集缓存区空间已满后存放在aep非易失性内存中,aep非易失性内存空间已满后存放在ssd或hdd硬盘中;

第二步:高频sql对应的结果集数据存储完成后,将中频sql对应的结果集数据先存放在结果集缓存区,结果集缓存区空间已满后存放在aep非易失性内存中,aep非易失性内存空间已满后存放在ssd或hdd硬盘中;

第三步:中频sql对应的结果集数据存储完成后,将中低频sql对应的结果集数据先存放在结果集缓存区,结果集缓存区空间已满后存放在aep非易失性内存中,aep非易失性内存空间已满后存放在ssd或hdd硬盘中;

其中结果集缓存区中的数据为热数据,读取速度最快,aep非易失性内存中的数据为温数据,读取速度比结果集缓存区慢,ssd或hdd硬盘中的数据为冷数据,读取速度最慢;

优先存储高频sql的结果集数据,然后存储中频sql的结果集数据,最后存储中低频sql的结果集数据,加快高频sql结果集数据的读取速度,进一步提高高频sql查询效率。

第二方面,本发明提供一种数据库高频sql查询系统,包括:

sql捕获模块:在数据库中创建第一存储过程,实时抓取sql相关信息,创建存储表;

存储模块:在数据库中创建触发器将sql执行后的结果集存储到对应存储表中,触发器实时更新结果集并将更新后的结果集同步到存储表;

映射模块:在数据库中创建第二存储过程,建立sqlid与存储表之间的映射关系,生成映射表;

缓存模块:在数据库中创建第三存储过程,将存储表中的结果集数据进行分层存储。

第三方面,本发明提供一种计算机存储介质,所述计算机存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述方法。

第四方面,提供一种终端,包括:

处理器和存储器,其中,所述存储器用于存储计算机程序,所述处理器用于从存储器中调用并运行该计算机程序,使得终端执行上述方法。

本发明的有益效果在于,将执行频率比较高的sql查询结果集存储到存储表中保存起来,同时实时更新结果集并将更新后的结果集同步到存储表,将sqlid和存储表进行映射,使用户下次执行该sql时能快速找到对应的存储表,直接获取结果集数据,减少sql重复解析和重新生成结果集的时间;在内存中对缓存的结果集进一步优化提高查询效率;实现结果集的分层存储,以缓解内存空间资源的压力。

由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例1提供的一种数据库高频sql查询方法的流程图。

图2是步骤s2的流程图。

图3是步骤s4的流程图。

图4是本发明实施例2提供的一种数据库高频sql查询系统的原理框图。

其中,1-sql捕获模块,2-存储模块,3-映射模块,4-缓存模块。

具体实施方式

为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

下面对本发明中出现的关键术语进行解释:

sql(structuredquerylanguage,结构化查询语言),一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

实施例1:

如图1至3所示,本实施例提供一种数据库高频sql查询方法,包括以下步骤:

s1:在数据库中抓取sql相关信息,创建存储表;

所述步骤s1包括以下步骤:

在数据库中实时扫描获取sql相关信息并记录下来;在数据库中创建job,数据库视图中通过job实时扫描sql会话视图,获取sql相关信息放入信息记录表中,信息记录表中字段为序号、sqlid、sql执行计划、sql开始执行时间和sql执行次数,sql每执行1次则sql执行次数加1。

根据sql的执行频率将sql划分为高频sql、中频sql、中低频sql和低频sql;统计sql在1周内成功执行的次数,1周内sql成功执行次数小于等于10则划分为低频,sql成功执行次数大于10并且小于等于30则划分为中低频,sql成功执行次数大于30并且小于等于50则划分为中频,sql成功执行次数大于50则划分为高频;创建频段记录表记录sql所在的频段,频段记录表的字段为序号、sqlid、sql执行计划、sql执行所在的频段。

分别为高频sql、中频sql和中低频sql创建存储表,存储表的表名为sql对应的sqlid。

通过步骤s1对sql进行捕获,获取sqlid、sql执行次数等信息,并根据执行频率对sql进行划分,为执行频率较高的sql建立存储表。

s2:创建触发器将sql执行后的结果集存储到对应存储表中,触发器实时更新结果集并将更新后的结果集同步到存储表;

所述步骤s2包括以下步骤:

s2.1:创建触发器,触发器通过sqlid跟踪该sql的执行;

s2.2:通过数据库会话视图的执行完成时间判定该sql执行完毕后,触发器将sql执行完毕的结果集数据导入以sqlid命名的存储表中,做一次全量同步;

s2.3:判断sql所查询的表数据是否发生变化,比如进行增、删、改操作,判断结果为是则触发器即时触发一次sql执行,并将执行的结果集记录到表名为sqlid的存储表中,新的结果集将覆盖存储表中原有的结果集,判断结果为否则继续判断sql所查询的表数据是否发生变化。

通过步骤s2将高频sql、中频sql和中低频sql执行后的结果集数据记录在存储表中,并且当sql所查询的表数据发生变化后将即时触发数据的同步,保证用户在对结果集数据进行查询时都是最新的数据,不会发生sql所查询的表数据变化但结果集数据未更新的情况,确保数据的准确性。

s3:建立sqlid与存储表之间的映射关系,生成映射表;映射表的字段为序号、sqlid、对应存储表的表名、sql执行计划;通过映射表建立sqlid与结果集的一一对应关系,进行高频sql、中频sql以及中低频sql查询时可以通过sqlid快速找到对应的存储表,快速获取结果集数据。

s4:将存储表中的结果集数据进行分层存储;

所述步骤s4包括以下步骤:

s4.1:在数据库的内存区域创建结果集缓存区作为热数据存储区,将aep非易失性内存作为温数据存储区,将ssd或hdd硬盘作为冷数据存储区;

s4.2:将存储表中的结果集数据分别存储到热数据存储区、温数据存储区和冷数据存储区,结果集数据进行分层存储能够进一步缓解内存的存储压力,存储过程如下:

第一步:将高频sql对应的结果集数据先存放在结果集缓存区,结果集缓存区空间已满后存放在aep非易失性内存中,aep非易失性内存空间已满后存放在ssd或hdd硬盘中;第二步:高频sql对应的结果集数据存储完成后,将中频sql对应的结果集数据先存放在结果集缓存区,结果集缓存区空间已满后存放在aep非易失性内存中,aep非易失性内存空间已满后存放在ssd或hdd硬盘中;第三步:中频sql对应的结果集数据存储完成后,将中低频sql对应的结果集数据先存放在结果集缓存区,结果集缓存区空间已满后存放在aep非易失性内存中,aep非易失性内存空间已满后存放在ssd或hdd硬盘中;其中结果集缓存区中的数据为热数据,读取速度最快,aep非易失性内存中的数据为温数据,读取速度比结果集缓存区慢,ssd或hdd硬盘中的数据为冷数据,读取速度最慢;优先存储高频sql的结果集数据,然后存储中频sql的结果集数据,最后存储中低频sql的结果集数据,加快高频sql结果集数据的读取速度,进一步提高高频sql查询效率。

s4.3:分层存储后,设置结果集块大小,每层的结果集数据均进行分块,其中每个块包括两部分,前部为索引,后部为对应的数据,扫描索引能够快速找到对应的数据。对结果集数据进行分块能够缩短结果集查找时间,进一步提高结果集查找效率。

所述步骤s4完成后,触发存储表使得表中的结果集数据发生强制落盘行为,将数据备份到磁盘中;通过该步骤将结果集数据在内存、磁盘中各存储一份,保证数据不会丢失。

实施例2:

如图4所示,本实施例提供一种数据库高频sql查询系统,包括:

sql捕获模块1:在数据库中创建第一存储过程,实时抓取sql相关信息,创建存储表;创建job实时扫描sql会话视图抓取sql相关信息,根据sql执行频率将其划分为高频、中频、中低频和低频,分别为高频、中频和中低频的sql创建存储表。

存储模块2:在数据库中创建触发器将sql执行后的结果集存储到对应存储表中,触发器实时更新结果集并将更新后的结果集同步到存储表;

映射模块3:在数据库中创建第二存储过程,建立sqlid与存储表之间的映射关系,生成映射表;

缓存模块4:在数据库中创建第三存储过程,将存储表中的结果集数据进行分层存储。

实施例2的客户端查询流程如下:首先客户端向数据库发起sql查询;数据库接收到sql后,查找并对比该sql对应的sqlid在映射模块的映射表中是否存在;如果映射表中存在该sqlid,则在映射表中通过sqlid快速找到对应的存储表,存储表中存储有sql的结果集数据,在内存中查询存储表数据,获取结果集数据,无需对该sql重新解析生成执行计划;如果映射表中不存在该sqlid,说明该sql为低频sql,需要数据库按照正常的sql执行步骤依次进行sql解析、生成sql执行计划、sql执行、生成结果集、输出结果。

实施例3:

本实施例提供一种计算机存储介质,所述计算机存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述方法。

实施例4:

本实施例提供一种终端,包括:

处理器和存储器,其中,所述存储器用于存储计算机程序,所述处理器用于从存储器中调用并运行该计算机程序,使得终端执行上述方法。

尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1