一种Oracle统计信息自动收集方法

文档序号:9350065阅读:2371来源:国知局
一种Oracle统计信息自动收集方法
【技术领域】
[0001]本发明涉及一种数据库统计信息收集方法,尤其涉及一种Oracle统计信息自动收集方法。
【背景技术】
[0002]统计信息指Oracle数据库优化器(optimizer)统计信息,统计信息描述了 Oracle数据库对象的物理特性,比如表中有多少条记录,占用多大的磁盘空间等,就是一个更加详细描述数据库和数据库对象的集合。
[0003]当Oracle 数据库工作在 CBO (Cost Based Optimizer)模式下(Oracle 数据库 1g以上版本默认并推荐使用该模式),优化器根据数据字典中记录的对象统计信息,评估SQL语句不同执行计划的成本,从而找到最优的执行计划,使得SQL语句的执行效率最高。
[0004]统计信息的准确性对于Oracle数据库执行计划有显著影响,如果统计信息中记录的对象属性(比如表的数据行数量)与实际情况存在较大偏差(一般见于统计信息更新不及时),会导致Oracle数据库优化器选择错误的执行计划,轻则引起SQL语句执行时间变长,重则可能由于过度消耗系统资源,从而引发数据库整体处理能力下降甚至无法正常处理业务请求。
[0005]现有通用的处理方法是:
[0006]1、Oracle数据库系统使用默认的统计收集策略收集统计信息
[0007]2、数据库管理员手工(或通过shell脚本)收集特定数据库对象的统计信息
[0008]3、使用Oracle数据库的统计信息动态采样功能
[0009]4、数据比对方法,即扫描数据库所有表的数据行数(rows),之后与现有的统计信息进行比较,如果差异较大,则进行统计信息收集
[0010]上述方法一般适用于数据量较小、业务负载不高、业务类型较单一的情况,但在TB以上级别的大数据量、高业务压力,以及同时进行联机事务处理和数据分析业务类型混合的业务场景下无法保证Oracle数据库统计信息收集的准确性与完整性。现有技术的缺点如下:
[0011 ] 1、默认的统计信息收集作业可能影响正常的业务处理。OracIe默认的统计信息收集策略会在工作日每天晚上22点到第二天早上6点,及周末全天,自动收集没有统计信息的和统计信息过旧的对象的统计信息。收集统计信息过程需要消耗大量系统资源,但在此时间窗口内,并非所有业务系统都处于业务闲时,所以在该时间段内执行统计收集作业会造成严重的资源争用,影响正常的业务处理。
[0012]2、采用默认收集策略,统计信息收集的完整性不可控。由于默认的时间窗口范围有限,在数据库对象多、数据量大、数据量变化大的情况下会出现规定时间段内无法完成所需对象的统计信息收集操作。在此情况下,数据库对象的统计信息可能长期得不到更新,影响SQL语句的执行效率。数据库管理员可以手工修改并延长作业的时间窗口,但又可能会出现作业的时间窗口与后续业务高峰重合,产生资源争用。
[0013]3、采用统计信息动态采样方法,在频繁访问某一对象的时候导致性能下降。所谓动态采样即为:对于没有统计信息的表,Oracle会在执行SQL语句之前对语句涉及到的对象做一次统计信息收集操作。该方法可以得到相对准确的执行计划,但每次执行均需要做动态统计信息收集,在对象访问频繁的情况下,大量的重复采样操作会消耗的过多不必要的系统资源,影响系统运行效率。
[0014]4、手工或Shell脚本进行特定对象的统计信息收集。可在一定程度上缓解默认策略带来的问题,但仍有局限性,比如:1、只能收集指定对象统计信息。2、无法自动识别新增对象,无法自动识别并定义收集粒度及限定资源消耗。3、需要根据对象变化经常修改脚本,维护成本大,效率不高。

【发明内容】

[0015]本发明所要解决的技术问题是提供一种Oracle统计信息自动收集方法,能够自动、正确、高效的收集Oracle统计信息,提高Oracle数据库运行的效率、稳定性以及业务的连续性。
[0016]本发明为解决上述技术问题而采用的技术方案是提供一种Oracle统计信息自动收集方法,其中,包括如下步骤:a)将数据库表设计为分区表,并按照业务特点划分为不同的统计收集类型山)操作系统定期调度数据库存储过程,输入数据库表属主、表名或分区名称进行不同粒度的统计信息收集;c)所述数据库存储过程根据输入数据库表属主、表名或分区名称,查找相应的统计收集类型并完成数据库表对象的统计信息收集。
[0017]上述的Oracle统计信息自动收集方法,其中,所述步骤a)将数据库表划分为如下的统计收集类型:全表收集:收集所有分区信息;按周期收集:收集周期的长短与预估的数据库表对象的行数成反比。
[0018]上述的Oracle统计信息自动收集方法,其中,所述步骤a)对数据库表按如下周期划分统计收集类型:
[0019]按当前月分区:需要收集当前月的统计信息;
[0020]按上月分区:需要收集上一个月的统计信息;
[0021]按当前旬分区:每月三个分区,收集当前日期所在分区的统计信息;
[0022]按上旬分区:每月三个分区,收集当前日期前一个旬分区的统计信息;
[0023]按当前日分区:需要收集当前日的统计信息;
[0024]按前一日分区:需要收集前一日的统计信息。
[0025]上述的Oracle统计信息自动收集方法,其中,所述步骤c)还包括根据收集到的数据库表对象的行数统计信息对收集周期进行实时调整;对于统计收集类型为全表收集的数据库表,当收集到的数据库表对象的统计行数超过预设阀值时,更新统计收集类型为按当前月分区。
[0026]上述的Oracle统计信息自动收集方法,其中,所述步骤a)预先将所有数据库表的属主、表名、分区名称及其统计收集类型记录存储在数据字典表;所述步骤b)使用操作系统命令crontab,在指定时间点运行主脚本来定期调度数据库存储过程,所述主脚本输入数据库表属主、表名和分区名称进行单表统计信息收集,所述主脚本输入数据库表属主进行多表统计信息收集。
[0027]上述的Oracle统计信息自动收集方法,其中,所述主脚本通过扫描数据字典表获取匹配的数据库表的属主、表名和分区名称;对于多表统计信息收集,所述主脚本通过扫描数据字典表获取匹配的属主下所有数据库表。
[0028]上述的Oracle统计信息自动收集方法,其中,对于单表统计信息收集,如果所述主脚本通过扫描数据字典表后无法获取匹配的数据库表的属主、表名和分区名称,则判定输入数据库表为新增的数据库表;接着,进一步判断所述新增数据库表是否为用户数据表,若是则对该用户数据表进行全表收集,并更新数据字典表。
[0029]本发明对比现有技术有如下的有益效果:本发明提供的Oracle统计信息自动收集方法,将数据库表设计为分区表,新增、修改、删除等操作仅针对当前或某些特定分区,查询及统计根据不同的统计收集类型分别实现,从而能够方便基于属主、表、分区等粒度进行统计信息收集,提高Oracle数据库运行的效率、稳定性以及业务的连续性。
【附图说明】
[0030]图1为本发明Oracle统计信息自动收集流程示意图;
[0031]图2为本发明Oracle统计信息自动收集方法的数据库存储过程示意图。
【具体实施方式】
[0032]下面结合附图和实施例对本发明作进一步的描述。
[0033]图1为本发明Oracle统计信息自动收集流程示意图。
[0034]请参见图1,本发明提供的Oracle统计信息自动收集方法,包括如下步骤:
[0035]a)将数据库表设计为分区表,并按照业务特点划分为不同的统计收集类型;
[0036]b)操作系统定期调度数据库存储过程,输入数据库表属主、表名或分区名称进行不同粒度的统计信息收集;
[0037]c)所述数据库存储过程根据输入数据库表属主、表名或分区名称,查找相应的统计收集类型并完成数据库表对象的统计信息收集。
[0038]本发明联合使用操作系统级别计划任务以及调用数据库内部处理方法,依据每套Oracle数据库的表结构及业务特点,将数据库表划分为小表(数据量IG以下)、大表(数据量IG以上)、不按时间分区的分区表、按天分区的分区表、按10天分区的分区表、按月分区的分区表等不同类别,根据业务特点制定相应的统计信息收集策略,并根据模版和框架编写存储过程,通过脚本自动调度运行。本发明通过自动的计划任务、自定义数据库脚本及存储过程等处理方法,可以针对Oracle数据库对象的统计信息进行自动、高效的收集,预防性能问题的发生,减少人工干预,减少系统的运维成本,提高系统的易用性、稳定性和可用性。
[0039]本发明的整体架构包括以下四个重要组成部分:
[0040]a)策略部分,根据业务变更进行更新,生成并更新策略字典表(以下简称“字典表,,);
[0041]b)操作系统级别计划任务(负责定期调度);
[0042]c)主脚本(负责调用存储过程,负责传入数据库库表属主及策略类型);
[0043]d)数据库存储过程(根据输入变量进行相应数据库表等对象的统计信息收集)。
[0044]整体流程及相互调用关系如下:
[0045]1、数据库表的业务访问策略:
[0046]在数据库物理设计阶段,会根据业务访问数据的规则对数据库表进行设计,例如:将数据库表设计为分区表,新增、修改、删除等操作仅针对当前或某些特定分区,查询及统计操作涉及多个分区。
[0047]2、策略字典表
[0048]初次使用本方案时,需要根据业务的访问策略梳理并生成策略字典表,在字典表中将数据库表按照业务特点划分为不同类型(TYPE)。如果业务对数据的访问方式有变更,也需要对该字典表进行同步更新,例如:
[0049]1:全表收集:非分区表、收集所有分区信息
[0050]2:按月分区,需要收集当前月的统计信息
[0051]3:按月分区,需要收集上一个月的统计信息
[
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1