一种数据库执行计划的局部修正方法

文档序号:6546682阅读:169来源:国知局
一种数据库执行计划的局部修正方法
【专利摘要】本发明公开了一种数据库执行计划的局部修正方法,包括如下步骤:a)通过任务调度层定义采集任务、任务调度频率及启用时间点,并定时连接到目标数据库;b)通过所述采集任务定位高频次SQL及其涉及的相关数据表,并提取高频次SQL执行信息及相关数据表的统计信息保存至历史信息采集库;c)当异常等待事件超过预设阈值时,对问题会话上的SQL及其涉及的相关数据表进行拆分,每个数据表通过匹配历史信息采集库,选择该数据表上的历史执行计划,对现有执行计划进行局部修正。本发明通过匹配历史的数据量和历史执行计划对现有执行计划进行局部修正,从而能够及时对当前执行计划进行修正,使数据库保持高效运行,有效地避免热点块问题。
【专利说明】一种数据库执行计划的局部修正方法
【技术领域】
[0001]本发明涉及一种数据库执行计划处理方法,尤其涉及一种数据库执行计划的局部修正方法。
【背景技术】
[0002]移动行业的核心业务系统(营业、账务、计费)是对终端用户有明显感知的业务系统。由于这些系统承载的是移动最核心的业务,且在线处理事务量大,数据交互频繁,对系统的高可用性、实时性要求都十分高,是对性能指标要求十分严格的业务系统。但从另一方面来说,移动业务为适应广大客户群体的需要,又源源不断的变更原有业务、推出新业务,应用开发部门就必须不断发布新的应用版本配合业务的发展需要。所以,移动核心业务系统不仅仅是一个性能要求高的在线系统,还是一个在接受频繁变更冲击中依然要求性能稳定的在线系统。另外,伴随着移动业务的快速发展,业务数据量持续快速增长,是对性能带来冲击的又一个因素。如何保证业务系统的性能优越,又如何保证在不断的变更中依然保持性能稳定,这是现在面对的一个很重要的课题。现实中,对于一个技术框架固定、数据库架构稳定的业务系统,保证数据库保持高性能运转,提供支撑服务,快速地定位和解决性能问题,成为当前非常重要的课题。
[0003]在数据库的性能指标中,CPU的使用率是最为重要的指标,而在运维过程中,除业务量突增的情况之外,CPU资源突然被耗尽,往往是某些数据库会话同时出现latch:cachebuffers chains的异常等待事件,目前一般是以自动监控异常等待事件,当超过阀值时,以告警的方式通知DBA,DBA通过自动化脚本或者手工及时进行处理,使产生异常等待的SQL执行恢复正常,消除异常等待,释放CPU资源。
[0004]请参见图1,现有数据库自动监控异常处理流程如下:
[0005]I) DBA部署程序实时监控数据库等待事件latch:cache buffers chains,当超过阀值时自动告警,一般以短信或者值班人员电话等方式通知DBA ;
[0006]2)通过异常等待会话,找到该会话相关SQL,并在系统性能视图中定位SQL基线,以基线执行计划替换当前执行计划,验证异常等待是否消除;
[0007]3)如果异常等待消除则流程结束,如果未消除则对SQL相关表进行表分析,并重置执行计划;
[0008]4)如果异常等待消除则流程结束,如果未消除则需手工进行处理,各表数据量及索引,凭经验判断,手工指定hint尝试找到最佳执行计划,并将此执行计划通过profile进行绑定;
[0009]5)如果异常等待消除则流程结束,如果未消除则重复步骤4)直至问题解决。
[0010]移动核心业务系统数据库在运行过程中,以下情况导致数据表中的数据量不断变化:1)前台业务数据:在业务高峰增长迅速。2)历史数据:在月末会从业务表到历史表进行搬迁。3)账单及抵扣数据:在月初月结出账时会急剧增多。4)接口数据及批处理数据:经常插入删除,数据量变化非常频繁。[0011]由于数据库的统计信息采集窗口通常为一天一次,当数据量突变时,统计信息不能反映当前数据量的真实情况,导致指定错误的执行计划,出现热点块问题,浪费CPU资源。
[0012]由上可见,目前的处理方式存在以下技术缺点:
[0013]I)基线处理不够准确:当以基线取代当前执行计划时,基线在目前不一定是最优的执行计划。
[0014]2)处理不够及时:当数据量达到上千万的时候,表分析耗时会严重耽误故障处理黄金时间。且为了提高速度,采样比例也会较低,直方图会存在一定误差。手工处理时耗时会更多。
[0015]3)对人的依赖高:为缩短业务受影响的时长,需要维护人员快速作出处理,所以对维护人员的技术水平也存在依赖。如果做出错误的判断,可能不但解决不了原有的问题,还可能引出新的性能问题。

【发明内容】

[0016]本发明所要解决的技术问题是提供一种数据库执行计划的局部修正方法,当数据量变化而执行计划未及时改变发生故障时,能够及时对当前执行计划进行修正,使数据库保持高效运行,有效地避免热点块问题。
[0017]本发明为解决上述技术问题而采用的技术方案是提供一种数据库执行计划的局部修正方法,包括如下步骤:a)通过任务调度层定义采集任务、任务调度频率及启用时间点,并定时连接到目标数据库山)通过所述采集任务定位高频次SQL及其涉及的相关数据表,并提取高频次SQL执行信息及相关数据表的统计信息保存至历史信息采集库;c)当异常等待事件超过预设阈值时,对问题会话上的SQL及其涉及的相关数据表进行拆分,每个数据表通过匹配历史信息采集库,选择该数据表上的历史执行计划,对现有执行计划进行局部修正。
[0018]上述的数据库执行计划的局部修正方法,其中,所述步骤b)中提取高频次SQL执行信息及相关数据表的统计信息的过程如下:bl)获取预设频次阀值,从数据库动态性能视图中得到超过该频次阀值的SQL ;b2)通过SQL_ID提取SQL文本,并获取SQL中相关数据表山3)通过数据表名得到各数据表的统计信息;b4)通过SQL_ID得到当前SQL执行计划的Outline信息,并按照各数据表进行拆分,得到各数据表当前访问方式。
[0019]上述的数据库执行计划的局部修正方法,其中,所述步骤c)中匹配过程如下:cl)从SQL中获取所有关联数据表,确定数据表之间的关联方式,并计算两表的关联匹配度;c2)继续确定已匹配关联表的访问方式是否相同;c3)所述SQL中所有关联数据表除去已匹配表为目前待匹配的剩余表,对所述剩余表再进行单表匹配度计算;c4)最后确定已匹配单表的访问方式是否相同。
[0020]上述的数据库执行计划的局部修正方法,其中,所述数据表的访问方式包括全表扫描方式或者索引扫描方式,所述索引扫描方式包括唯一索引扫描、范围索引扫描、跳跃索引扫描、索引全扫描以及索引快速扫描。
[0021]上述的数据库执行计划的局部修正方法,其中,所述SQL中所有关联数据表包括嵌套循环关联表、哈希关联表以及归并关联表。[0022]上述的数据库执行计划的局部修正方法,其中,所述单表匹配度Ml计算如下:M1=abs (A-Al)/A ;其中,A为当前数据量,Al为历史数据量;如果所述单表匹配度Ml小于预设阈值,则确定该数据表为已匹配单表。
[0023]上述的数据库执行计划的局部修正方法,其中,所述两表的关联匹配度M2计算如下:M2 = (abs (A-Al)/A) +(abs (B-Bl)/B);其中,A为第一数据表当前数据量,Al为第一数据表历史数据量,B为第二数据表当前数据量,BI为第二数据表历史数据量;如果所述两表的匹配度M2小于预设阈值,则确定所述两个数据表为已匹配关联表。
[0024]上述的数据库执行计划的局部修正方法,其中,所述预设阈值为0.1。
[0025]上述的数据库执行计划的局部修正方法,其中,所述问题会话上的SQL及其涉及的相关数据表的获取如下:首先进行数据库当前热点块定位,接着通过系统视图定位到热点表和热点索引,再将热点索引转换为对应的表,结合热点表得到问题会话上的SQL涉及的所有相关数据表。
[0026]本发明对比现有技术有如下的有益效果:本发明提供的数据库执行计划的局部修正方法,通过任务调度、信息采集和局部修正三层架构,对问题会话上的SQL涉及相关表进行拆解,每个表通过匹配历史的数据量,选择该表上的历史执行计划,对现有执行计划进行局部修正,保证修正后的执行计划对于目前各表数据量最为适合,对维护人员的业务水平、技术能力均不存在依赖,从而能够及时对当前执行计划进行修正,使数据库保持高效运行,有效地避免热点块问题。
【专利附图】

【附图说明】
[0027]图1为现有数据库自动监控异常处理流程示意图;
[0028]图2为本发明数据库执行计划的局部修正架构示意图;
[0029]图3为本发明数据库任务调配及信息采集示意图;
[0030]图4为本发明数据库历史数据获取流程示意图;
[0031]图5为本发明SQL Outline信息分类示意图;
[0032]图6为本发明数据库SQL执行和相关数据表匹配流程示意图;
[0033]图7为本发明数据库执行计划的局部修正流程示意图。
【具体实施方式】
[0034]下面结合附图和实施例对本发明作进一步的描述。
[0035]图2为本发明数据库执行计划的局部修正架构示意图;图3为本发明数据库任务调配及信息采集示意图。
[0036]请参见图2和图3,本发明提供的数据库执行计划的局部修正方法包括如下步骤:
[0037]a)通过任务调度层定义采集任务、任务调度频率及启用时间点,并定时连接到目标数据库;
[0038]b)通过所述采集任务定位高频次SQL及其涉及的相关数据表,并提取高频次SQL执行信息及相关数据表的统计信息保存至历史信息采集库;
[0039]c)当异常等待事件超过预设阈值时,对问题会话上的SQL及其涉及的相关数据表进行拆分,每个数据表通过匹配历史信息采集库,选择该数据表上的历史执行计划,对现有执行计划进行局部修正。
[0040]本发明提供的数据库执行计划的局部修正方法,包括任务调度、信息采集和局部修正三层架构,各层主要功能如下:
[0041]1、任务调配层:
[0042]该层主要负责任务的管理,主要有任务的创建、更新、删除、查询和调度等操作。定义采集任务,可定义定时任务调用信息采集层对移动核心库进行采集。具体过程如下:
[0043]I)首先定义采集任务,定义任务调度频率及启用时间点。
[0044]2)通过查询任务调配库,判断是否已配置采集任务,已配置则跳过,否则创建任务调度策略。
[0045]3)任务创建后,自动发起监控进程,定时连接到目标数据库,统计信息及Outline信息并保存至信息采集库。
[0046]4)任务完成后登记至任务调配库。
[0047]2、信息采集层:
[0048]采集流程如图4所示,包括如下过程:
[0049]I)任务调度进程从任务调配库中取出连接信息,连接至目标数据库。
[0050]2)目标数据连接成功后返回成功标志,如果失败则返回错误码及错误信息。
[0051]3)获取输入数据:预设频次阀值(X次/秒),超过频次阀值的被认为是高频次SQL。
[0052]4)从数据库动态性能视图中得到相关SQL,以SQL_ID为唯一标识。
[0053]5)通过SQL_ID提取SQL文本,并获取SQL中相关数据表。
[0054]6)通过数据表名得到各表的统计信息。
[0055]7)通过SQL_ID,得到当前SQL执行计划的Outline信息,并按照各数据表进行拆分,得到各数据表当前访问方式,如全表扫描方式或者索引扫描方式,所述索引扫描方式包括唯一索引扫描、范围索引扫描、跳跃索引扫描、索引全扫描以及索引快速扫描等,如图5所示。
[0056]8)将采集到的信息保存至信息采集库。
[0057]9)采集成功返回至任务调配库,任务结束。
[0058]3、执行计划修正层
[0059]当latch: cache buffers chains的异常等待事件个数超过阀值时,信息采集库中的信息进行执行计划修正。执行计划修正流程中,是否用信息采集库中的Outline来修正当前执行计划取决于当前数据量与历史统计信息是否匹配。如下是核心的公式演算:
[0060]单表的匹配度Ml:是指某表当前数据量与历史数据量的差占当前数据量的比例。如果一个表中的当前数据有80000,某时间点历史数据量为85000,那么匹配度为abs (80000-85000)/80000 = 0.0625。匹配度越接近于0,则匹配度越好。
[0061]Ml = abs (A-Al)/A
[0062]两表关联匹配度M2:在考虑两表关联时,需要考虑两个表组合的匹配度。
[0063]M2 = (abs (A-Al) /A) + (abs (B-Bl) /B)
[0064]当匹配度位于O与阀值的开区间时,则认为是匹配的。若有多个在区间内,则取最接近于O的。阀值默认为0.1,可视情况针对每个表做调整。[0065]本发明提供的数据库执行计划的局部修正方法,匹配历史的数据量和历史执行计划的流程如图6所示,包括如下过程:
[0066]I)从SQL中获取所有关联表,并计算量表关联的匹配度;所述SQL中所有关联数据表包括嵌套循环关联表、哈希关联表以及归并关联表。
[0067]2)通过匹配算法确定表关联的方式,并确定已匹配关联表的访问方式。
[0068]3)该SQL中所有表除去已匹配表为目前待匹配的剩余表,针对这些表进行匹配度计算,并通过匹配算法确定表的访问方式。
[0069]执行计划局部修正如图7所示,包括如下步骤:
[0070]I)输入信息采集库中采集到的信息:高频次SQL Outline信息及相关表历史统计信息。
[0071]2)当异常等待latch:cache buffers chains超过预设阀值时自动进行修正工作。
[0072]3)首先进行数据库当前热点块定位,通过系统视图再定位到热点对象(表和索引),热点索引再转换为对应的表,结合热点表得到相关表的列表,即将两者相加并去除重复表。
[0073]4)遍历相关表的列表,当前数据量与信息采集库中的历史统计信息进行匹配,将匹配上对应的Outline从信息采集库中取出。
[0074]5)从异常等待会话中取出SQL,提取SQL ID。通过分解历史执行计划得到局部最优outline,通过所述最优Outline对该SQL进行执行计划修正,并用profile固定执行计划。
[0075]某核心业务系统,在某日9点,出现48个latch: cache buffers chains异常等待会话,CPU使用率超过90%,采用本发明提供的数据库执行计划的局部修正方法进行紧急处理,CPU资源迅速释放,CPU使用率降到50%以下。
[0076]虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。
【权利要求】
1.一种数据库执行计划的局部修正方法,其特征在于,包括如下步骤: a)通过任务调度层定义采集任务、任务调度频率及启用时间点,并定时连接到目标数据库; b)通过所述采集任务定位高频次SQL及其涉及的相关数据表,并提取高频次SQL执行信息及相关数据表的统计信息保存至历史信息采集库; c)当异常等待事件超过预设阈值时,对问题会话上的SQL及其涉及的相关数据表进行拆分,每个数据表通过匹配历史信息采集库,选择该数据表上的历史执行计划,对现有执行计划进行局部修正。
2.如权利要求1所述的数据库执行计划的局部修正方法,其特征在于,所述步骤b)中提取高频次SQL执行信息及相关数据表的统计信息的过程如下: bl)获取预设频次阀值,从数据库动态性能视图中得到超过该频次阀值的SQL ; b2)通过SQL_ID提取SQL文本,并获取SQL中相关数据表; b3)通过数据表名得到各数据表的统计信息; b4)通过SQL_ID得到当前SQL执行计划的Outline信息,并按照各数据表进行拆分,得到各数据表当前访问方式。
3.如权利要求2所述的数据库执行计划的局部修正方法,其特征在于,所述步骤c)中匹配过程如下: Cl)从SQL中获取所有关联数据表,确定数据表之间的关联方式,并计算两表的关联匹配度; c2)继续确定已匹配关联表的访问方式是否相同; c3)所述SQL中所有关联数据表除去已匹配表为目前待匹配的剩余表,对所述剩余表再进行单表匹配度计算; c4)最后确定已匹配单表的访问方式是否相同。
4.如权利要求3所述的数据库执行计划的局部修正方法,其特征在于,所述数据表的访问方式包括全表扫描方式或者索引扫描方式,所述索引扫描方式包括唯一索引扫描、范围索引扫描、跳跃索引扫描、索引全扫描以及索引快速扫描。
5.如权利要求3所述的数据库执行计划的局部修正方法,其特征在于,所述SQL中所有关联数据表包括嵌套循环关联表、哈希关联表以及归并关联表。
6.如权利要求3所述的数据库执行计划的局部修正方法,其特征在于,所述单表匹配度Ml计算如下:M1 = abs (A-Al)/A ;其中,A为当前数据量,Al为历史数据量;如果所述单表匹配度Ml小于预设阈值,则确定该数据表为已匹配单表。
7.如权利要求3所述的数据库执行计划的局部修正方法,其特征在于,所述两表的关联匹配度M2计算如下:M2= (abs (A-Al)/A) +(abs (B-Bl)/B);其中,A为第一数据表当前数据量,Al为第一数据表历史数据量,B为第二数据表当前数据量,BI为第二数据表历史数据量;如果所述两表的匹配度M2小于预设阈值,则确定所述两个数据表为已匹配关联表。
8.如权利要求6或7所述的数据库执行计划的局部修正方法,其特征在于,所述预设阈值为0.1。
9.如权利要求3所述的数据库执行计划的局部修正方法,其特征在于,所述问题会话上的SQL及其涉及的相关数据表的获取如下:首先进行数据库当前热点块定位,接着通过系统视图定位到热点表和热点索引,再将热点索引转换为对应的表,结合热点表得到问题会话上的SQL涉及的所有 相关数据表。
【文档编号】G06F17/30GK103984726SQ201410206908
【公开日】2014年8月13日 申请日期:2014年5月16日 优先权日:2014年5月16日
【发明者】程永新, 宋辉, 张玉颖 申请人:上海新炬网络技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1