SQL执行计划管理的方法及装置与流程

文档序号:11133976阅读:611来源:国知局
SQL执行计划管理的方法及装置与制造工艺

本发明涉及数据库技术领域,尤其涉及一种SQL执行计划管理的方法及装置。



背景技术:

目前,Oracle数据库应用程序的性能很大程度上依赖于结构化查询语言(Structured Query Language,SQL)的执行计划,Oracle优化器能产生出预期的执行计划,但是SQL语句的执行计划可能由于多种原因而发生变化,例如发生Oracle数据库收集统计信息或者改变优化器参数版本等情况时,SQL语句的执行计划可能会发生变化。由于无法保证执行计划始终向更好的情况改变,因此在许多场景下业界出于稳定性考虑会选择Oracle的hint等来固化执行计划。但是,选择Oracle的hint等来固化执行计划,可能会导致许多环境永远无法利用可以提高SQL语句性能的新优化器功能或访问路径。因此,如何在环境变化时能够维持当前执行计划不变,或者向更好的情况改变,已经成为一种亟待解决的技术问题。



技术实现要素:

本发明所要解决的技术问题是提供一种SQL执行计划管理的方法及装置。

本发明解决上述技术问题的技术方案如下:一种SQL执行计划管理的方法,所述SQL执行计划管理的方法包括:

S1,SQL执行计划控制系统按预定的筛选规则筛选预设类型的SQL语句;

S2,当筛选出预设类型的SQL语句后,分析筛选出的各SQL语句是否无对应的执行计划在预定的执行计划管理表中供选择和执行;

S3,若有筛选出的SQL语句无对应的执行计划在预定的执行计划管理表中供选择和执行,则将筛选出的SQL语句对应的当前执行计划加载到所述执行计划管理表中供选择和执行。

优选地,所述步骤S1包括:

S11,提取SQL语句的预设类型的执行参数,根据预存的执行参数的类型与阈值的关联关系确定各预设类型的执行参数对应的阈值;

S12,分析各SQL语句对应的预设类型的执行参数是否大于等于对应的阈值;

S13,若SQL语句有对应的预设类型的执行参数大于等于对应的阈值,则确定有对应的预设类型的执行参数大于等于对应的阈值的SQL语句为所述预设类型的SQL语句。

优选地,所述步骤S3之后还包括:S4,按预设的清理规则清理所述执行计划管理表中的执行计划。

优选地,所述步骤S4包括:

获取所述执行计划管理表中的第一非固定状态的执行计划;

判断所述第一非固定状态的执行计划是否超过预定执行期限未曾执行;或者

判断所述第一非固定状态的执行计划是否为不能被数据库重现的执行计划;或者

判断所述第一非固定状态的执行计划是否经过执行计划验证流程后未被验证通过;

若是,则对所述第一非固定状态的执行计划进行第一次清理。

优选地,所述步骤S4进一步包括:

在进行第一次清理后,分析第一次清理后的执行计划管理表中的执行计划的总数量是否大于预设数量;

若是,则获取第一次清理后的执行计划管理表中的第二非固定状态的执行计划;

判断所述第二非固定状态的执行计划是否从未被选择和执行;或者

判断所述第二非固定状态的执行计划第一次加载至所述执行计划管理表中的时间是否在预设时间之前;

若是,则对所述第二非固定状态的执行计划进行第二次清理;

若第二次清理后的执行计划管理表中的执行计划的总数量大于所述预设数量,则根据加载时间对第二次清理后剩余的所述第二非固定状态的执行计划进行清理。

本发明解决上述技术问题的技术方案还如下:一种SQL执行计划管理的装置,所述SQL执行计划管理的装置包括:

筛选模块,用于按预定的筛选规则筛选预设类型的SQL语句;

分析模块,用于当筛选出预设类型的SQL语句后,分析筛选出的各SQL语句是否无对应的执行计划在预定的执行计划管理表中供选择和执行;

加载模块,用于若有筛选出的SQL语句无对应的执行计划在预定的执行计划管理表中供选择和执行,则将筛选出的SQL语句对应的当前执行计划加载到所述执行计划管理表中供选择和执行。

优选地,所述筛选模块包括:

提取单元,用于提取SQL语句的预设类型的执行参数,根据预存的执行参数的类型与阈值的关联关系确定各预设类型的执行参数对应的阈值;

第一分析单元,用于分析各SQL语句对应的预设类型的执行参数是否大于等于对应的阈值;

确定单元,用于若SQL语句有对应的预设类型的执行参数大于等于对应的阈值,则确定有对应的预设类型的执行参数大于等于对应的阈值的SQL语句为所述预设类型的SQL语句。

优选地,还包括:清理模块,用于按预设的清理规则清理所述执行计划管理表中的执行计划。

优选地,所述清理模块包括:

第一获取单元,用于获取所述执行计划管理表中的第一非固定状态的执行计划;

第一判断单元,用于判断所述第一非固定状态的执行计划是否超过预定执行期限未曾执行;或者判断所述第一非固定状态的执行计划是否为不能被数据库重现的执行计划;或者判断所述第一非固定状态的执行计划是否经过执行计划验证流程后未被验证通过;

第一清理单元,用于若是,则对所述第一非固定状态的执行计划进行第一次清理。

优选地,所述清理模块进一步包括:

第二分析单元,用于在进行第一次清理后,分析第一次清理后的执行计划管理表中的执行计划的总数量是否大于预设数量;

第二获取单元,用于若是,则获取第一次清理后的执行计划管理表中的第二非固定状态的执行计划;

第二判断单元,用于判断所述第二非固定状态的执行计划是否从未被选择和执行;或者判断所述第二非固定状态的执行计划第一次加载至所述执行计划管理表中的时间是否在预设时间之前;

第二清理单元,用于若是,则对所述第二非固定状态的执行计划进行第二次清理;若第二次清理后的执行计划管理表中的执行计划的总数量大于所述预设数量,则根据加载时间对第二次清理后剩余的所述第二非固定状态的执行计划进行清理。

本发明的有益效果是:本发明由SQL执行计划控制系统将预设类型的SQL语句筛选出来,然后分析筛选出来的各SQL语句对应的执行计划是否在执行计划管理表中供选择和执行,由于筛选出来的SQL语句对应的执行计划是适合于绝大多数数据的最优执行计划,因此如果有筛选出来的SQL语句对应的执行计划不在执行计划管理表中,为了维持当前执行计划不变,将筛选出来的SQL语句对应的执行计划加载至执行计划管理表中,使得即使环境发生变化,也能够维持当前执行计划不变,或者向更好的情况改变,并在大多环境下可利用可以提高SQL语句性能的新优化器功能或访问路径,运用较灵活。

附图说明

图1为本发明SQL执行计划管理的方法第一实施例的流程示意图;

图2为图1所示步骤S1的流程示意图;

图3为本发明SQL执行计划管理的方法第二实施例的流程示意图;

图4为本发明SQL执行计划管理的装置一实施例的结构示意图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

如图1所示,图1为本发明SQL执行计划管理的方法一实施例的流程示意图,该SQL执行计划管理的方法包括以下步骤:

步骤S1,SQL执行计划控制系统按预定的筛选规则筛选预设类型的SQL语句;

本实施例中,SQL执行计划控制系统运行在一服务器中,该服务器例如可以是数据库服务器。SQL执行计划控制系统对执行计划中的SQL语句进行筛选,以选出预设类型的SQL语句,该预设类型的SQL语句可以为一条或者多条,预设类型的SQL语句例如可以为多次执行的SQL语句,或者是一次执行所需时间较长的SQL语句等。

本实施例中,按预定的筛选规则筛选SQL语句,可以是将执行次数达到预设次数的SQL语句筛选出,或者是将SQL语句执行时CPU时间占比达到预设数值的SQL语句筛选出,或者是将SQL语句的逻辑读的次数达到预设次数的SQL语句筛选出来,等等。

本实施例中,SQL执行计划控制系统可以实时对执行计划中的SQL语句进行筛选,以尽快将执行计划中的SQL语句筛选出,或者SQL执行计划控制系统定时对执行计划中的SQL语句进行筛选,以减轻系统负担。

步骤S2,当筛选出预设类型的SQL语句后,分析筛选出的各SQL语句是否无对应的执行计划在预定的执行计划管理表中供选择和执行;

本实施例中,当筛选出预设类型的SQL语句后,查找筛选出的各SQL语句对应的执行计划,并获取执行计划管理(SQL Plan Management,SPM)表,以分析筛选出的SQL语句对应的执行计划是否不在该执行计划管理表中。其中,执行计划管理表中包含的执行计划供SQL执行计划控制系统选择并执行。

具体地,可以将筛选出的SQL语句对应的执行计划逐一与执行计划管理表中的执行计划进行比对,如果筛选出的SQL语句对应的执行计划与执行计划管理表中的执行计划相同,则筛选出的SQL语句对应的执行计划在该执行计划管理表中,如果两者不相同,则筛选出的SQL语句对应的执行计划不在该执行计划管理表中。

步骤S3,若有筛选出的SQL语句无对应的执行计划在预定的执行计划管理表中供选择和执行,则将筛选出的SQL语句对应的当前执行计划加载到所述SPM执行计划表中供选择和执行。

本实施例中,由于筛选出来的SQL语句对应的执行次数达到预设次数的SQL语句,或者筛选出来的SQL语句执行时CPU时间占比达到预设数值,或者筛选出来的SQL语句SQL语句的逻辑读的次数达到预设次数,因此,可以认为筛选出来的SQL语句对应的执行计划是适合于绝大多数数据的最优执行计划,因此,将这些筛选出的SQL语句对应的执行计划加载到执行计划管理表中供选择和执行。

与现有技术相比,本实施例由SQL执行计划控制系统将预设类型的SQL语句筛选出来,然后分析筛选出来的各SQL语句对应的执行计划是否在执行计划管理表中供选择和执行,由于筛选出来的SQL语句对应的执行计划是适合于绝大多数数据的最优执行计划,因此如果有筛选出来的SQL语句对应的执行计划不在执行计划管理表中,为了维持当前执行计划不变,将筛选出来的SQL语句对应的执行计划加载至执行计划管理表中,使得即使环境发生变化,也能够维持当前执行计划不变,或者向更好的情况改变,并在大多环境下可利用可以提高SQL语句性能的新优化器功能或访问路径,运用较灵活。

在一优选的实施例中,如图2所示,在上述图1的实施例的基础上,上述步骤S1包括:

步骤S11,提取SQL语句的预设类型的执行参数,根据预存的执行参数的类型与阈值的关联关系确定各预设类型的执行参数对应的阈值;

步骤S12,分析各SQL语句对应的预设类型的执行参数是否大于等于对应的阈值;

步骤S13,若SQL语句有对应的预设类型的执行参数大于等于对应的阈值,则确定有对应的预设类型的执行参数大于等于对应的阈值的SQL语句为所述预设类型的SQL语句。

本实施例中,对SQL语句中的预设类型的执行参数进行提取,预设类型的执行参数可以是SQL语句的执行次数、CPU时间占比及逻辑读的次数。预先存储执行参数的类型与阈值的关联关系,例如SQL语句的执行次数对应的阈值为第一阈值、CPU时间占比对应的阈值为第二阈值、逻辑读的次数对应的阈值为第三阈值。

分析各个SQL语句对应的预设类型的执行参数是否大于等于对应的阈值例如,分析各个SQL语句对应的SQL执行次数是否大于等于第一阈值、分析各个SQL语句对应的CPU时间占比是否大于等于第二阈值、分析各个SQL语句对应的逻辑读的次数是否大于等于第三阈值,若一个SQL语句有对应的预设类型的执行参数大于等于对应的阈值,例如,某个SQL语句对应的SQL执行次数大于等于第一阈值、该SQL语句对应的CPU时间占比大于等于第二阈值,和/或,该SQL语句对应的逻辑读的次数大于等于第三阈值,则确定该SQL语句为预设类型的SQL语句,将该预设类型的SQL语句筛选出来。

在一优选的实施例中,如图3所示,在上述图1的实施例的基础上,该SQL执行计划管理的方法在步骤S3之后还包括:

步骤S4,按预设的清理规则清理所述执行计划管理表中的执行计划。

本实施例中,为了减轻系统的负担,需要对执行计划管理表中的执行计划进行清理,一般来说,是对非固定状态的执行计划进行清理。按照预设的清理规则清理执行计划,例如可以将久未执行的非固定状态的执行计划进行清理,或者对不能重现的非固定状态的执行计划进行清理等等。

本实施例中,可以实时地对执行计划表中的非固定状态的执行计划进行清理,以使得系统在任意时刻均处于较优的运行状态,或者定时地对执行计划表中的非固定状态的执行计划进行清理,以对需要进行清理的执行计划集中处理。

在一优选的实施例中,在上述图3的实施例的基础上,上述步骤S4包括:

获取所述执行计划管理表中的第一非固定状态的执行计划;

判断所述第一非固定状态的执行计划是否超过预定执行期限未曾执行;或者

判断所述第一非固定状态的执行计划是否为不能被数据库重现的执行计划;或者

判断所述第一非固定状态的执行计划是否经过执行计划验证流程后未被验证通过;

若是,则对所述第一非固定状态的执行计划进行第一次清理。

本实施例中,在对执行计划管理表中的执行计划进行清理前,首先获取执行计划管理表中的所有第一非固定状态的执行计划,然后判断每一第一非固定状态的执行计划是否超过预定执行期限未曾执行(例如,超过365天未曾执行),或者,判断每一第一非固定状态的执行计划是否为不能被数据库重现的执行计划,或者,判断每一第一非固定状态的执行计划是否经过执行计划验证流程后未被验证通过,如果上述三种情况中的一种情况判断的结果为“是”,即某一第一非固定状态的执行计划超过预定执行期限未曾执行、为不能被数据库重现的执行计划或者经过执行计划验证流程后未被验证通过,则对满足条件的第一非固定状态的执行计划进行清理。

在一优选的实施例中,在上述的实施例的基础上,上述步骤S4进一步包括:

在进行第一次清理后,分析第一次清理后的执行计划管理表中的执行计划的总数量是否大于预设数量;

若是,则获取第一次清理后的执行计划管理表中的第二非固定状态的执行计划;

判断所述第二非固定状态的执行计划是否从未被选择和执行;或者

判断所述第二非固定状态的执行计划第一次加载至所述执行计划管理表中的时间是否在预设时间之前;

若是,则对所述第二非固定状态的执行计划进行第二次清理;

若第二次清理后的执行计划管理表中的执行计划的总数量大于所述预设数量,则根据加载时间对第二次清理后剩余的所述第二非固定状态的执行计划进行清理。

本实施例中,在进行第一次清理后,分析经过第一次清理后的执行计划管理表中的执行计划的总数量是否大于预设数量,例如是否大于20000,如果大于预设数量,则需要进一步对执行计划管理表中的执行计划进行清理,以进一步减轻系统负担,优化系统的运行。

本实施例同样对非固定状态的执行计划进行清理,即获取第一次清理后后的执行计划管理表中的所有第二非固定状态的执行计划,然后判断每一第二非固定状态的执行计划是否从未被选择和执行(即最近一次执行时间是空),或者判断每一第二非固定状态的执行计划第一次加载至执行计划管理表中的时间是否在预设时间之前(例如在60天之前),如果上述两种情况中的一种情况判断的结果为“是”,即某一第二非固定状态的执行计划从未被选择和执行或者第一次加载至执行计划管理表中的时间是否在预设时间之前,则对满足条件的第二非固定状态的执行计划进行清理。

如图4所示,图4为本发明SQL执行计划管理的装置一实施例的结构示意图,该SQL执行计划管理的装置包括:

筛选模块101,用于按预定的筛选规则筛选预设类型的SQL语句;

本实施例中,SQL执行计划管理的装置中运行一SQL执行计划控制系统,SQL执行计划管理的装置可集成于一服务器中,该服务器例如可以是数据库服务器。SQL执行计划控制系统对执行计划中的SQL语句进行筛选,以选出预设类型的SQL语句,该预设类型的SQL语句可以为一条或者多条,预设类型的SQL语句例如可以为多次执行的SQL语句,或者是一次执行所需时间较长的SQL语句等。

本实施例中,按预定的筛选规则筛选SQL语句,可以是将执行次数达到预设次数的SQL语句筛选出,或者是将SQL语句执行时CPU时间占比达到预设数值的SQL语句筛选出,或者是将SQL语句的逻辑读的次数达到预设次数的SQL语句筛选出来,等等。

本实施例中,SQL执行计划控制系统可以实时对执行计划中的SQL语句进行筛选,以尽快将执行计划中的SQL语句筛选出,或者SQL执行计划控制系统定时对执行计划中的SQL语句进行筛选,以减轻系统负担。

分析模块102,用于当筛选出预设类型的SQL语句后,分析筛选出的各SQL语句是否无对应的执行计划在预定的执行计划管理表中供选择和执行;

本实施例中,当筛选出预设类型的SQL语句后,查找筛选出的各SQL语句对应的执行计划,并获取执行计划管理(SQL Plan Management,SPM)表,以分析筛选出的SQL语句对应的执行计划是否不在该执行计划管理表中。其中,执行计划管理表中包含的执行计划供SQL执行计划控制系统选择并执行。

具体地,可以将筛选出的SQL语句对应的执行计划逐一与执行计划管理表中的执行计划进行比对,如果筛选出的SQL语句对应的执行计划与执行计划管理表中的执行计划相同,则筛选出的SQL语句对应的执行计划在该执行计划管理表中,如果两者不相同,则筛选出的SQL语句对应的执行计划不在该执行计划管理表中。

加载模块103,用于若有筛选出的SQL语句无对应的执行计划在预定的执行计划管理表中供选择和执行,则将筛选出的SQL语句对应的当前执行计划加载到所述执行计划管理表中供选择和执行。

本实施例中,由于筛选出来的SQL语句对应的执行次数达到预设次数的SQL语句,或者筛选出来的SQL语句执行时CPU时间占比达到预设数值,或者筛选出来的SQL语句SQL语句的逻辑读的次数达到预设次数,因此,可以认为筛选出来的SQL语句对应的执行计划是适合于绝大多数数据的最优执行计划,因此,将这些筛选出的SQL语句对应的执行计划加载到执行计划管理表中供选择和执行。

在一优选的实施例中,在上述图4的实施例的基础上,上述筛选模块101包括:

提取单元,用于提取SQL语句的预设类型的执行参数,根据预存的执行参数的类型与阈值的关联关系确定各预设类型的执行参数对应的阈值;

第一分析单元,用于分析各SQL语句对应的预设类型的执行参数是否大于等于对应的阈值;

确定单元,用于若SQL语句有对应的预设类型的执行参数大于等于对应的阈值,则确定有对应的预设类型的执行参数大于等于对应的阈值的SQL语句为所述预设类型的SQL语句。

本实施例中,对SQL语句中的预设类型的执行参数进行提取,预设类型的执行参数可以是SQL语句的执行次数、CPU时间占比及逻辑读的次数。预先存储执行参数的类型与阈值的关联关系,例如SQL语句的执行次数对应的阈值为第一阈值、CPU时间占比对应的阈值为第二阈值、逻辑读的次数对应的阈值为第三阈值。

分析各个SQL语句对应的预设类型的执行参数是否大于等于对应的阈值例如,分析各个SQL语句对应的SQL执行次数是否大于等于第一阈值、分析各个SQL语句对应的CPU时间占比是否大于等于第二阈值、分析各个SQL语句对应的逻辑读的次数是否大于等于第三阈值,若一个SQL语句有对应的预设类型的执行参数大于等于对应的阈值,例如,某个SQL语句对应的SQL执行次数大于等于第一阈值、该SQL语句对应的CPU时间占比大于等于第二阈值,和/或,该SQL语句对应的逻辑读的次数大于等于第三阈值,则确定该SQL语句为预设类型的SQL语句,将该预设类型的SQL语句筛选出来。

在一优选的实施例中,在上述图4的实施例的基础上,SQL执行计划管理的装置还包括:

清理模块,用于按预设的清理规则清理所述执行计划管理表中的执行计划。

本实施例中,为了减轻系统的负担,需要对执行计划管理表中的执行计划进行清理,一般来说,是对非固定状态的执行计划进行清理。按照预设的清理规则清理执行计划,例如可以将久未执行的非固定状态的执行计划进行清理,或者对不能重现的非固定状态的执行计划进行清理等等。

本实施例中,可以实时地对执行计划表中的非固定状态的执行计划进行清理,以使得系统在任意时刻均处于较优的运行状态,或者定时地对执行计划表中的非固定状态的执行计划进行清理,以对需要进行清理的执行计划集中处理。

在一优选的实施例中,在上述实施例的基础上,清理模块包括:

第一获取单元,用于获取所述执行计划管理表中的第一非固定状态的执行计划;

第一判断单元,用于判断所述第一非固定状态的执行计划是否超过预定执行期限未曾执行;或者判断所述第一非固定状态的执行计划是否为不能被数据库重现的执行计划;或者判断所述第一非固定状态的执行计划是否经过执行计划验证流程后未被验证通过;

第一清理单元,用于若是,则对所述第一非固定状态的执行计划进行第一次清理。

本实施例中,在对执行计划管理表中的执行计划进行清理前,首先获取执行计划管理表中的所有第一非固定状态的执行计划,然后判断每一第一非固定状态的执行计划是否超过预定执行期限未曾执行(例如,超过365天未曾执行),或者,判断每一第一非固定状态的执行计划是否为不能被数据库重现的执行计划,或者,判断每一第一非固定状态的执行计划是否经过执行计划验证流程后未被验证通过,如果上述三种情况中的一种情况判断的结果为“是”,即某一第一非固定状态的执行计划超过预定执行期限未曾执行、为不能被数据库重现的执行计划或者经过执行计划验证流程后未被验证通过,则对满足条件的第一非固定状态的执行计划进行清理。

在一优选的实施例中,在上述实施例的基础上,所述清理模块进一步包括:

第二分析单元,用于在进行第一次清理后,分析第一次清理后的执行计划管理表中的执行计划的总数量是否大于预设数量;

第二获取单元,用于若是,则获取第一次清理后的执行计划管理表中的第二非固定状态的执行计划;

第二判断单元,用于判断所述第二非固定状态的执行计划是否从未被选择和执行;或者判断所述第二非固定状态的执行计划第一次加载至所述执行计划管理表中的时间是否在预设时间之前;

第二清理单元,用于若是,则对所述第二非固定状态的执行计划进行第二次清理;若第二次清理后的执行计划管理表中的执行计划的总数量大于所述预设数量,则根据加载时间对第二次清理后剩余的所述第二非固定状态的执行计划进行清理。

本实施例中,在进行第一次清理后,分析经过第一次清理后的执行计划管理表中的执行计划的总数量是否大于预设数量,例如是否大于20000,如果大于预设数量,则需要进一步对执行计划管理表中的执行计划进行清理,以进一步减轻系统负担,优化系统的运行。

本实施例同样对非固定状态的执行计划进行清理,即获取第一次清理后后的执行计划管理表中的所有第二非固定状态的执行计划,然后判断每一第二非固定状态的执行计划是否从未被选择和执行(即最近一次执行时间是空),或者判断每一第二非固定状态的执行计划第一次加载至执行计划管理表中的时间是否在预设时间之前(例如在60天之前),如果上述两种情况中的一种情况判断的结果为“是”,即某一第二非固定状态的执行计划从未被选择和执行或者第一次加载至执行计划管理表中的时间是否在预设时间之前,则对满足条件的第二非固定状态的执行计划进行清理。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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