SQL自动优化方法、装置、计算机设备及存储介质与流程

文档序号:15144424发布日期:2018-08-10 20:16阅读:120来源:国知局
本申请涉及数据库脚本
技术领域
:,尤其涉及一种sql自动优化方法、装置、计算机设备及存储介质。
背景技术
::脚本,是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。在软件开发的过程中,开发人员所编写的脚本质量因人而异,低质量的脚本在执行时给系统带来了极大的性能隐患。一般是系统在脚本执行出现性能问题后,才会去排查和修复脚本所导致的问题。由于脚本众多,无法及时定位具体导致问题出现的脚本,导致了对低质量的脚本进行修改和优化的效率低下。技术实现要素:本申请提供了一种sql自动优化方法、装置、计算机设备及存储介质,旨在解决现有技术中众多脚本在执行时,无法及时定位具体导致问题出现的脚本,导致了对低质量的脚本进行修改和优化的效率低下的问题。第一方面,本申请提供了一种sql自动优化方法,其包括:当前脚本为执行状态时,根据当前脚本中所设置的系统性能指标监控项采集当前系统性能指标参数;若当前系统性能指标参数超出预设的指标预警值,将当前脚本记录至指定路径;获取当前脚本的执行计划;若当前脚本的执行计划中缺少索引,自动添加索引至当前脚本;若当前脚本的索引失效,通过强制索引进行脚本修复,得到修复后脚本。第二方面,本申请提供了一种sql自动优化装置,其包括:指标参数获取单元,用于当前脚本为执行状态时,根据当前脚本中所设置的系统性能指标监控项采集当前系统性能指标参数;超标脚本记录单元,用于若当前系统性能指标参数超出预设的指标预警值,将当前脚本记录至指定路径;执行计划获取单元,用于获取当前脚本的执行计划;索引自动添加单元,用于若当前脚本的执行计划中缺少索引,自动添加索引至当前脚本;脚本修复单元,用于若当前脚本的索引失效,通过强制索引进行脚本修复,得到修复后脚本。第三方面,本申请又提供了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请提供的任一项所述的sql自动优化方法。第四方面,本申请还提供了一种存储介质,其中所述存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行本申请提供的任一项所述的sql自动优化方法。本申请提供一种sql自动优化方法、装置、计算机设备及存储介质。该方法在当前脚本为执行状态时,根据当前脚本中所设置的系统性能指标监控项采集当前系统性能指标参数;若当前系统性能指标参数超出预设的指标预警值,将当前脚本记录至指定路径;获取当前脚本的执行计划;若当前脚本的执行计划中缺少索引,自动添加索引至当前脚本;若当前脚本的索引失效,通过强制索引进行脚本修复,得到修复后脚本。该方法能够及时监控系统性能,并且能对影响系统性能很大关系的sql脚本进行自动优化,实现快速发现性能问题并解决。附图说明为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例提供的一种sql自动优化方法的示意流程图;图2是本申请实施例提供的一种sql自动优化方法的子流程示意图;图3是本申请实施例提供的一种sql自动优化方法的另一子流程示意图;图4为本申请实施例提供的一种sql自动优化装置的示意性框图;图5为本申请实施例提供的一种sql自动优化装置的子单元示意性框图;图6为本申请实施例提供的一种sql自动优化装置的另一子单元示意性框图;图7为本申请实施例提供的一种计算机设备的示意性框图。具体实施方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。请参阅图1,图1是本申请实施例提供的一种sql自动优化方法的示意流程图。该方法应用于台式电脑、手提电脑、平板电脑等终端中。如图1所示,该方法包括步骤s101~s105。s101、当前脚本为执行状态时,根据当前脚本中所设置的系统性能指标监控项采集当前系统性能指标参数。在本实施例中,为了能在脚本执行的过程中实时获取当前脚本对系统性能的影响,则需要在当前脚本中增加系统性能指标监控项(系统性能指标监控项类似于参数获取语句,其作用是采集对应的指标参数,也即起到了实时监控获取系统对应的指标参数的作用),以监控系统的如下性能:吞吐量、执行性能、连接情况、缓冲池使用情况。即当前脚本中包括至少一条语句,语句的作用是采集当前系统性能指标参数(当前系统性能指标参数包括上述列举的参数,即吞吐量、执行性能、连接情况、缓冲池使用情况)。系统性能指标监控项起到了在脚本执行过程中实时监控系统性能指标的作用,避免了用户在脚本执行工程中需手动开启任务查看器才能查看系统性能指标的问题。在一实施例中,所述当前系统性能指标参数包括:吞吐量、sql脚本执行性能参数、服务器连接情况参数、缓冲池使用情况参数。如图2所示,该步骤s101包括以下子步骤:s1011、通过内部计数器进行已执行语句的计数,得到吞吐量;s1012、通过统计出现错误的sql语句数量,或统计超过可配置的长查询限制的查询数量,得到sql脚本执行性能参数;s1013、通过统计当前开放的连接数量、当前运行的连接数量、由服务器错误导致的失败连接数、尝试与服务器进行连接结果失败的次数、或由最大连接数限制导致的失败连接数中任意一个,得到服务器连接情况参数;s1014、通过统计缓冲池中的总页数、缓冲池中已使用页数所占的比率、缓冲池发送的请求数、或缓冲池无法满足的请求数中任意一个,得到缓冲池使用情况参数。在本实施例中,监控吞吐量时,通过名称为questions的内部计数器进行已执行语句(由客户端发出)计数;通过统计com_select语句或writes语句的总量来计算吞吐量;例如,通过以下指令,查询诸如questions或com_select服务器状态变量的值:showglobalstatuslike"questions"。监控sql脚本执行性能参数时,主要是查询出现错误的sql语句数量,及超过可配置的long_query_time限制的查询数量。上述两个指标都可从性能模式下的events_statements_summary_by_digest表格中得到。监控连接情况参数时,通过threads_connected语句查询当前开放的连接,通过threads_running语句查询当前运行的连接,通过connection_errors_internal语句查询由服务器错误导致的失败连接数,通过aborted_connects语句查询尝试与服务器进行连接结果失败的次数,通过connection_errors_max_connections语句查询由max_connections限制导致的失败连接数。监控缓冲池使用情况参数时,通过innodb_buffer_pool_pages_total语句查询缓冲池中的总页数,通过缓冲池使用率语句查询缓冲池中已使用页数所占的比率,通过innodb_buffer_pool_read_requests语句查询向缓冲池发送的请求数,通过innodb_buffer_pool_reads语句查询缓冲池无法满足的请求数。通过执行当前脚本中预先写入的对应指令或对应语句时,就能对当前系统性能指标参数进行精准监控,并能根据所采集的当前系统性能指标参数判断系统当前性能存在隐患时,及时对用户进行报警并自动进行修复。s102、若当前系统性能指标参数超出预设的指标预警值,将当前脚本记录至指定路径。在一实施例中,若在吞吐量、sql脚本执行性能参数、服务器连接情况参数、或缓冲池使用情况参数中有至少一个超出对应预设的指标预警值,判定当前系统性能指标参数超出预设的指标预警值。在本实施例中,指定路径为预先设置的用于存储数据的一块或多块区域所对应路径(脚本也可以视为数据),例如在脚本所执行执行机器上存储介质选定一定存储空间用作存储脚本,也即只要满足当前系统性能指标参数超出预设的指标预警值的条件,就将当前脚本记录至指定路径。由于在脚本运行过程中会影响系统的多项系统性能指标,上述列举的多个性能指标中,可对每一个性能指标都对应设置一个指标预警值,还可对其中比较重要的几个性能指标设置重要指标标识(如吞吐量、当前运行的连接、服务器错误导致的失败连接数、缓冲池中的总页数),上述具有重要指标标识的指标中有一个或多个一旦超出对应指标预警值,则视为当前脚本的质量低下,需要对其进行优化或修复。如果除了上述设置重要指标标识的系统性能指标以外的其他指标超出指标预警值,则只进行系统提示(如通过桌面弹出框进行弹窗报警提示,在弹窗内显示具体是哪几个指标超出指标预警值,而且显示这几个指标的当前值,该弹窗在显示了指定时间后不再显示),不进行优化脚本的提示。也就是至少要有一个被设置重要指标标识的系统性能指标超出指标预警值,才视为真正的超出指标预警值,并需要将当前脚本记录至指定路径。s103、获取当前脚本的执行计划。在本实施例中,执行计划是数据库内部对sql语句分析后决定的执行路径和执行步骤。一个执行计划由若干基本操作组成,例如遍历整张表、利用索引、执行一个嵌套循环或hash连接等等,上述所有的基本操作都有一个输出即结果集。若有当前系统性能指标参数超出预设的指标预警值,为了具体分析当前脚本的具体执行情况,需要查看当前脚本的执行计划,从执行计划中看出当前脚本执行过程中各当前系统性能指标参数的具体取值。本申请中执行计划采用利用索引的方式进行基本操作。其中,获取当前脚本的执行计划通过以下三条语句:explainplanfor待查看的sql语句;commit;select*fromtable(dbms_xplan.display);explainplanfor是用于查看待查看的sql语句的执行计划的语句,commit为提交语句,select*fromtable(dbms_xplan.display)是查看dbms_xplan.display表中数据的语句。通过查看执行计划可以获取当前脚本的索引情况。s104、若当前脚本的执行计划中缺少索引,自动添加索引至当前脚本。在一实施例中,通过动态管理视图来判断当前脚本的执行计划是否缺乏索引。在本实施例中,判断当前脚本的执行计划是否缺乏索引时,通过dmv(dynamicmanagementviews,动态管理视图)来判断当前脚本的执行计划是否缺乏索引,更具体的是通过如下的动态管理视图来实现:sys.dm_db_missing_index_detailssys.dm_db_missing_index_groupssys.dm_db_missing_index_group_statssys.dm_db_missing_index_columns(index_handle)sys.dm_db_missing_index_details上述dmv记录了当前数据库下所有的missingindex的信息,其针对的是数据库服务器从启动以来所有运行的语句,而不是针对某一个查询。其中,由sys.dm_db_missing_index_details返回的信息会在查询优化器优化查询时更新,因而不是持久化的。缺失索引信息只保留到重新启动数据库服务器前。如果数据库管理员要在服务器回收后保留缺失索引信息,则应定期制作缺失索引信息的备份副本,即在指定路径存储缺失索引信息的备份副本确保数据库服务器重启后也能使用;sys.dm_db_missing_index_columns(index_handle)则返回与缺少索引(不包括空间索引)的数据库表列有关的信息,sys.dm_db_missing_index_columns是一个动态管理函数,index_handle是唯一地标识缺失索引的整数。sys.dm_db_missing_index_groups返回有关特定缺失索引组中包含的缺失索引(不包括空间索引)的信息。sys.dm_db_missing_index_group_stats则返回缺失索引组的摘要信息,不包括空间索引。在一实施例中,通过fn_index_createindexname函数对当前脚本自动添加索引。其中,fn_index_createindexname函数包括有三个输入参数:@equality_columns@equality_columns@index_handle该函数的目的是为每个期望创建的索引都创建一个唯一名称。其中,拼接@equality_columns和@equality_columns两个输入变量,如果拼接后所得结果超过120个字符,那就截取至第120个字符。在对当前脚本自动添加索引,判断索引是否生效时,通过explain解释命令查看索引是否生效。其中,具体使用时在select语句前加上explain即可判断索引是否生效,如:explainselectsurname,first_nameforma,bwherea.id=b.id。在脚本中添加了索引后,且在索引生效后就能完成对当前脚本的自动优化,且这一优化过程是在判断当前系统性能指标参数超出预设的指标预警值而进行系统报警时立即进行的修复,起到了实时修复的功能,避免了在故障后才从多条sql语句定位故障产生原因而导致的修复效率实时性低的问题。s105、若当前脚本的索引失效,通过强制索引进行脚本修复,得到修复后脚本。如图3所示,该步骤s105包括以下子步骤:s1051、获取所选定的数据库优化器;其中,所述数据库优化器为基于规则的优化器、基于成本的优化器、或选择性的优化器中的一种;s1052、通过rebuild指令重建当前脚本的索引;s1053、通过hint指令强制使用索引,得到修复后脚本。在本实施例中,据库优化器是预先选定的,当需要采用全表扫描模式时则选用选择性的优化器,当无需采用全表扫描模式时则选用基于成本的优化器或基于规则的优化器。通过alterindex索引名rebuild(例如alterindexrecord_entityidrebuild,其中record_entityid为索引名)语句重建当前脚本的索引;通过给该语句加上hint后,强制其使用'record_entityid'这个索引。更具体的是在select关键字后面,加上“/*+index(表名称,索引名称)*/”的方式,强制数据库优化器用上该索引,以对脚本进行修复,实现了及时发现sql脚本的问题并快速自动修复。可见,该方法能够及时监控系统性能,并且能对影响系统性能很大关系的sql脚本进行自动优化,实现快速发现性能问题并解决。本申请实施例还提供一种sql自动优化装置,该sql自动优化装置用于执行前述任一项sql自动优化方法。具体地,请参阅图4,图4是本申请实施例提供的一种sql自动优化装置的示意性框图。sql自动优化装置100可以安装于台式电脑、平板电脑、手提电脑、等终端中。如图4所示,sql自动优化装置100包括指标参数获取单元101、超标脚本记录单元102、执行计划获取单元103、索引自动添加单元104、脚本修复单元105。指标参数获取单元101,用于当前脚本为执行状态时,根据当前脚本中所设置的系统性能指标监控项采集当前系统性能指标参数。在本实施例中,为了能在脚本执行的过程中实时获取当前脚本对系统性能的影响,则需要在当前脚本中增加系统性能指标监控项(系统性能指标监控项类似于参数获取语句,其作用是采集对应的指标参数,也即起到了实时监控获取系统对应的指标参数的作用),以监控系统的如下性能:吞吐量、执行性能、连接情况、缓冲池使用情况。即当前脚本中包括至少一条语句,语句的作用是采集当前系统性能指标参数(当前系统性能指标参数包括上述列举的参数,即吞吐量、执行性能、连接情况、缓冲池使用情况)。系统性能指标监控项起到了在脚本执行过程中实时监控系统性能指标的作用,避免了用户在脚本执行工程中需手动开启任务查看器才能查看系统性能指标的问题。在一实施例中,所述当前系统性能指标参数包括:吞吐量、sql脚本执行性能参数、服务器连接情况参数、缓冲池使用情况参数。如图5所示,所述指标参数获取单元101包括以下子单元:第一参数获取单元1011,用于通过内部计数器进行已执行语句的计数,得到吞吐量;第二参数获取单元1012,用于通过统计出现错误的sql语句数量,或统计超过可配置的长查询限制的查询数量,得到sql脚本执行性能参数;第三参数获取单元1013,用于通过统计当前开放的连接数量、当前运行的连接数量、由服务器错误导致的失败连接数、尝试与服务器进行连接结果失败的次数、或由最大连接数限制导致的失败连接数中任意一个,得到服务器连接情况参数;第四参数获取单元1014,用于通过统计缓冲池中的总页数、缓冲池中已使用页数所占的比率、缓冲池发送的请求数、或缓冲池无法满足的请求数中任意一个,得到缓冲池使用情况参数。在本实施例中,监控吞吐量时,通过名称为questions的内部计数器进行已执行语句(由客户端发出)计数;通过统计com_select语句或writes语句的总量来计算吞吐量;例如,通过以下指令,查询诸如questions或com_select服务器状态变量的值:showglobalstatuslike"questions"。监控sql脚本执行性能参数时,主要是查询出现错误的sql语句数量,及超过可配置的long_query_time限制的查询数量。上述两个指标都可从性能模式下的events_statements_summary_by_digest表格中得到。监控连接情况参数时,通过threads_connected语句查询当前开放的连接,通过threads_running语句查询当前运行的连接,通过connection_errors_internal语句查询由服务器错误导致的失败连接数,通过aborted_connects语句查询尝试与服务器进行连接结果失败的次数,通过connection_errors_max_connections语句查询由max_connections限制导致的失败连接数。监控缓冲池使用情况参数时,通过innodb_buffer_pool_pages_total语句查询缓冲池中的总页数,通过缓冲池使用率语句查询缓冲池中已使用页数所占的比率,通过innodb_buffer_pool_read_requests语句查询向缓冲池发送的请求数,通过innodb_buffer_pool_reads语句查询缓冲池无法满足的请求数。通过执行当前脚本中预先写入的对应指令或对应语句时,就能对当前系统性能指标参数进行精准监控,并能根据所采集的当前系统性能指标参数判断系统当前性能存在隐患时,及时对用户进行报警并自动进行修复。超标脚本记录单元102,用于若当前系统性能指标参数超出预设的指标预警值,将当前脚本记录至指定路径。在一实施例中,若在吞吐量、sql脚本执行性能参数、服务器连接情况参数、或缓冲池使用情况参数中有至少一个超出对应预设的指标预警值,判定当前系统性能指标参数超出预设的指标预警值。在本实施例中,指定路径为预先设置的用于存储数据的一块或多块区域所对应路径(脚本也可以视为数据),例如在脚本所执行执行机器上存储介质选定一定存储空间用作存储脚本,也即只要满足当前系统性能指标参数超出预设的指标预警值的条件,就将当前脚本记录至指定路径。由于在脚本运行过程中会影响系统的多项系统性能指标,上述列举的多个性能指标中,可对每一个性能指标都对应设置一个指标预警值,还可对其中比较重要的几个性能指标设置重要指标标识(如吞吐量、当前运行的连接、服务器错误导致的失败连接数、缓冲池中的总页数),上述具有重要指标标识的指标中有一个或多个一旦超出对应指标预警值,则视为当前脚本的质量低下,需要对其进行优化或修复。如果除了上述设置重要指标标识的系统性能指标以外的其他指标超出指标预警值,则只进行系统提示(如通过桌面弹出框进行弹窗报警提示,在弹窗内显示具体是哪几个指标超出指标预警值,而且显示这几个指标的当前值,该弹窗在显示了指定时间后不再显示),不进行优化脚本的提示。也就是至少要有一个被设置重要指标标识的系统性能指标超出指标预警值,才视为真正的超出指标预警值,并需要将当前脚本记录至指定路径。执行计划获取单元103,用于获取当前脚本的执行计划。在本实施例中,执行计划是数据库内部对sql语句分析后决定的执行路径和执行步骤。一个执行计划由若干基本操作组成,例如遍历整张表、利用索引、执行一个嵌套循环或hash连接等等,上述所有的基本操作都有一个输出即结果集。若有当前系统性能指标参数超出预设的指标预警值,为了具体分析当前脚本的具体执行情况,需要查看当前脚本的执行计划,从执行计划中看出当前脚本执行过程中各当前系统性能指标参数的具体取值。本申请中执行计划采用利用索引的方式进行基本操作。其中,获取当前脚本的执行计划通过以下三条语句:explainplanfor待查看的sql语句;commit;select*fromtable(dbms_xplan.display);explainplanfor是用于查看待查看的sql语句的执行计划的语句,commit为提交语句,select*fromtable(dbms_xplan.display)是查看dbms_xplan.display表中数据的语句。通过查看执行计划可以获取当前脚本的索引情况。索引自动添加单元104,用于若当前脚本的执行计划中缺少索引,自动添加索引至当前脚本。在一实施例中,通过动态管理视图来判断当前脚本的执行计划是否缺乏索引。在本实施例中,判断当前脚本的执行计划是否缺乏索引时,通过dmv(dynamicmanagementviews,动态管理视图)来判断当前脚本的执行计划是否缺乏索引,更具体的是通过如下的动态管理视图来实现:sys.dm_db_missing_index_detailssys.dm_db_missing_index_groupssys.dm_db_missing_index_group_statssys.dm_db_missing_index_columns(index_handle)sys.dm_db_missing_index_details上述dmv记录了当前数据库下所有的missingindex的信息,其针对的是数据库服务器从启动以来所有运行的语句,而不是针对某一个查询。其中,由sys.dm_db_missing_index_details返回的信息会在查询优化器优化查询时更新,因而不是持久化的。缺失索引信息只保留到重新启动数据库服务器前。如果数据库管理员要在服务器回收后保留缺失索引信息,则应定期制作缺失索引信息的备份副本,即在指定路径存储缺失索引信息的备份副本确保数据库服务器重启后也能使用;sys.dm_db_missing_index_columns(index_handle)则返回与缺少索引(不包括空间索引)的数据库表列有关的信息,sys.dm_db_missing_index_columns是一个动态管理函数,index_handle是唯一地标识缺失索引的整数。sys.dm_db_missing_index_groups返回有关特定缺失索引组中包含的缺失索引(不包括空间索引)的信息。sys.dm_db_missing_index_group_stats则返回缺失索引组的摘要信息,不包括空间索引。在一实施例中,通过fn_index_createindexname函数对当前脚本自动添加索引。其中,fn_index_createindexname函数包括有三个输入参数:@equality_columns@equality_columns@index_handle该函数的目的是为每个期望创建的索引都创建一个唯一名称。其中,拼接@equality_columns和@equality_columns两个输入变量,如果拼接后所得结果超过120个字符,那就截取至第120个字符。在对当前脚本自动添加索引,判断索引是否生效时,通过explain解释命令查看索引是否生效。其中,具体使用时在select语句前加上explain即可判断索引是否生效,如:explainselectsurname,first_nameforma,bwherea.id=b.id。在脚本中添加了索引后,且在索引生效后就能完成对当前脚本的自动优化,且这一优化过程是在判断当前系统性能指标参数超出预设的指标预警值而进行系统报警时立即进行的修复,起到了实时修复的功能,避免了在故障后才从多条sql语句定位故障产生原因而导致的修复效率实时性低的问题。脚本修复单元105,用于若当前脚本的索引失效,通过强制索引进行脚本修复,得到修复后脚本。如图6所示,所述脚本修复单元105包括以下子单元:优化器选定单元1051,用于获取所选定的数据库优化器;其中,所述数据库优化器为基于规则的优化器、基于成本的优化器、或选择性的优化器中的一种;重建索引单元1052,用于通过rebuild指令重建当前脚本的索引;强制索引单元1053,用于通过hint指令强制使用索引,得到修复后脚本。在本实施例中,据库优化器是预先选定的,当需要采用全表扫描模式时则选用选择性的优化器,当无需采用全表扫描模式时则选用基于成本的优化器或基于规则的优化器。通过alterindex索引名rebuild(例如alterindexrecord_entityidrebuild,其中record_entityid为索引名)语句重建当前脚本的索引;通过给该语句加上hint后,强制其使用'record_entityid'这个索引。更具体的是在select关键字后面,加上“/*+index(表名称,索引名称)*/”的方式,强制数据库优化器用上该索引,以对脚本进行修复,实现了及时发现sql脚本的问题并快速自动修复。可见,该装置能够及时监控系统性能,并且能对影响系统性能很大关系的sql脚本进行自动优化,实现快速发现性能问题并解决。上述sql自动优化装置可以实现为一种计算机程序的形式,该计算机程序可以在如图7所示的计算机设备上运行。请参阅图7,图7是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备500设备可以是终端。该终端可以是平板电脑、笔记本电脑、台式电脑、个人数字助理等电子设备。参阅图7,该计算机设备500包括通过系统总线501连接的处理器502、存储器和网络接口505,其中,存储器可以包括非易失性存储介质503和内存储器504。该非易失性存储介质503可存储操作系统5031和计算机程序5032。该计算机程序5032包括程序指令,该程序指令被执行时,可使得处理器502执行一种sql自动优化方法。该处理器502用于提供计算和控制能力,支撑整个计算机设备500的运行。该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序5032被处理器502执行时,可使得处理器502执行一种sql自动优化方法。该网络接口505用于进行网络通信,如发送分配的任务等。本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备500的限定,具体的计算机设备500可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。其中,所述处理器502用于运行存储在存储器中的计算机程序5032,以实现如下功能:当前脚本为执行状态时,根据当前脚本中所设置的系统性能指标监控项采集当前系统性能指标参数;若当前系统性能指标参数超出预设的指标预警值,将当前脚本记录至指定路径;获取当前脚本的执行计划;若当前脚本的执行计划中缺少索引,自动添加索引至当前脚本;若当前脚本的索引失效,通过强制索引进行脚本修复,得到修复后脚本。在一实施例中,处理器502还执行如下操作:所述当前系统性能指标参数包括吞吐量、sql脚本执行性能参数、服务器连接情况参数、缓冲池使用情况参数;通过内部计数器进行已执行语句的计数,得到吞吐量;通过统计出现错误的sql语句数量,或统计超过可配置的长查询限制的查询数量,得到sql脚本执行性能参数;通过统计当前开放的连接数量、当前运行的连接数量、由服务器错误导致的失败连接数、尝试与服务器进行连接结果失败的次数、或由最大连接数限制导致的失败连接数中任意一个,得到服务器连接情况参数;通过统计缓冲池中的总页数、缓冲池中已使用页数所占的比率、缓冲池发送的请求数、或缓冲池无法满足的请求数中任意一个,得到缓冲池使用情况参数。在一实施例中,处理器502还执行如下操作:若吞吐量、sql脚本执行性能参数、服务器连接情况参数、及缓冲池使用情况参数中至少一个超出对应预设的指标预警值,判定当前系统性能指标参数超出预设的指标预警值。在一实施例中,处理器502还执行如下操作:通过动态管理视图来判断当前脚本的执行计划是否缺乏索引。在一实施例中,处理器502还执行如下操作:通过fn_index_createindexname函数对当前脚本自动添加索引。在一实施例中,处理器502还执行如下操作:获取所选定的数据库优化器;其中,所述数据库优化器为基于规则的优化器、基于成本的优化器、或选择性的优化器中的一种;通过rebuild指令重建当前脚本的索引;通过hint指令强制使用索引,得到修复后脚本。本领域技术人员可以理解,图7中示出的计算机设备的实施例并不构成对计算机设备具体构成的限定,在其他实施例中,计算机设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,计算机设备可以仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图7所示实施例一致,在此不再赘述。应当理解,在本申请实施例中,处理器502可以是中央处理单元(centralprocessingunit,cpu),该处理器502还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。在本申请的另一实施例中提供一种存储介质。该存储介质可以为存储介质。该存储介质存储有计算机程序,其中计算机程序包括程序指令。该程序指令被处理器执行时实现:当前脚本为执行状态时,根据当前脚本中所设置的系统性能指标监控项采集当前系统性能指标参数;若当前系统性能指标参数超出预设的指标预警值,将当前脚本记录至指定路径;获取当前脚本的执行计划;若当前脚本的执行计划中缺少索引,自动添加索引至当前脚本;若当前脚本的索引失效,通过强制索引进行脚本修复,得到修复后脚本。在一实施例中,该程序指令被处理器执行时实现:所述当前系统性能指标参数包括吞吐量、sql脚本执行性能参数、服务器连接情况参数、缓冲池使用情况参数;通过内部计数器进行已执行语句的计数,得到吞吐量;通过统计出现错误的sql语句数量,或统计超过可配置的长查询限制的查询数量,得到sql脚本执行性能参数;通过统计当前开放的连接数量、当前运行的连接数量、由服务器错误导致的失败连接数、尝试与服务器进行连接结果失败的次数、或由最大连接数限制导致的失败连接数中任意一个,得到服务器连接情况参数;通过统计缓冲池中的总页数、缓冲池中已使用页数所占的比率、缓冲池发送的请求数、或缓冲池无法满足的请求数中任意一个,得到缓冲池使用情况参数。在一实施例中,该程序指令被处理器执行时实现:若吞吐量、sql脚本执行性能参数、服务器连接情况参数、及缓冲池使用情况参数中至少一个超出对应预设的指标预警值,判定当前系统性能指标参数超出预设的指标预警值。在一实施例中,该程序指令被处理器执行时实现:通过动态管理视图来判断当前脚本的执行计划是否缺乏索引。在一实施例中,该程序指令被处理器执行时实现:通过fn_index_createindexname函数对当前脚本自动添加索引。在一实施例中,该程序指令被处理器执行时实现:获取所选定的数据库优化器;其中,所述数据库优化器为基于规则的优化器、基于成本的优化器、或选择性的优化器中的一种;通过rebuild指令重建当前脚本的索引;通过hint指令强制使用索引,得到修复后脚本。所述存储介质可以是前述设备的内部存储单元,例如设备的硬盘或内存。所述存储介质也可以是所述设备的外部存储设备,例如所述设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储介质还可以既包括所述设备的内部存储单元也包括外部存储设备。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。在本申请所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,也可以将具有相同功能的单元集合成一个单元,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1