专利名称::提高数据库中数据对象统计信息可靠性的方法及装置的制作方法
技术领域:
:本发明涉及数据库技术,特别涉及一种提高数据库中数据对象统计信息可靠性的方法及装置。
背景技术:
:现在的数据库,无论是用于数据仓库或操作数据存储,都包含丰富的海量数据对象信息,因而,一方面,及时查找和展示用户需要的信息是一个巨大的挑战,另一方面,从海量数据信息中查找得到的信息的可靠性(数据库查询质量)对于用户以及数据库运营商来说也很重要。以下以目前应用广泛的oracle数据库为例,对查询过程作简要介绍。图1为现有oracle数据库中结构化查询语言(SQLJtructuredQueryLanguage)语句的执行流程示意图,参见图1,该流程包括步骤101,接收用户输入的SQL语句,进行语法语义检查(syntaxcheck);本步骤中,检查此SQL语句的拼写是否符合语法,访问对象是否存在及该进行查询的用户是否具备相应的权限等。SQL语句分为数据定义语言(DDL,DataDefineLanguage)语句和数据操作语言(DML,DataManipulationLanguage)语句。其中,DML语句操作针对逻辑量,DDL操作针对物理量,详细描述可参见相关技术文献,在此不再赘述。步骤102,oracle数据库利用内部预先存储的算法对SQL语句进行解析(prase),生成解析树(parsetree),根据解析树生成执行计划;本步骤中,生成的执行计划包括表或索引的访问方式等。实际应用中,步骤102生成的执行计划的好坏(质量高低)直接决定了SQL语句执行效率的高低,而执行计划基本由基于成本的优化器(CBO,Cost-basedOptimizer)根据解析得到的解析树中参数查询数据库系统基表中预先存储的数据对象统计信息,选择代价最小的访问路径,根据访问路径找到相应的数据对象,并将该数据对象信息返回给用户;如果根据得到的解析树中参数查询不到数据库系统基表中预先存储的数据对象统计信息,则从数据对象库存储的数据对象中逐个查询,直到获取该参数对应的数据对象并将该数据对象信息返回给用户,其中,系统基表存储的数据对象统计信息用于数据对象库存储的数据对象的索引或访问路径。根据CBO优化规则,为了能对应用SQL语句进行解析,产生准确高效的执行计划,oracle数据库从系统基表中获取相关数据库底层的数据对象统计信息,该统计信息是由最近一次对数据对象进行分析时记录在系统基表。因而,在该分析后,如果对oracle数据库中数据对象进行了操作并改变了该数据对象统计信息,则在查询时将导致系统基表中存储的该数据对象统计信息不可用。因此,数据库底层数据对象统计信息可靠性的高低,将直接影响CBO产生执行计划的好坏。当前oracle数据库系统中,一般通过以下两种技术方案来实现数据对象统计信息的可靠性。技术方案一以时间维度为衡量标准,按照一定的时间间隔(每日、每周、每月等),制定oracle数据库的定时分析作业,在时间间隔到时,对数据库中存储的数据对象按照分析策略进行分析,获取相应的数据对象统计信息并对系统基表中存储的数据对象统计信息进行更新以保障查询时数据对象统计信息的相对准确。该以时间维度为衡量标准的技术方案适用于结构简单的单一型oracle数据库,其应用类型相对简单,数据库规模较小,无数据量激变。该技术方案应用较为广泛,是统计信息时效性的理论基础。但该技术方案使用定时分析技术,随着oracle数据库复杂度的增加,在不同类型的对象数据变化趋势差异明显的情况下,无法制定对所有对象数据均适用的时间间隔,使得系统基表中存储的数据对象统计信息得不到及时的更新,因而,在技术方案一的基础上,提出了下述技术方案二。技术方案二结合实际应用,根据数据对象业务逻辑的不同,以oracle数据库中具体业务数据的变化趋势及业务数据绝对变化量等为标准,对各个数据对象,有针对性的制定分析策略。例如,以oracle数据库中业务数据每增加100W条记录为标准,对oracle数据库分析一次,获取相应的数据对象统计信息并更新系统基表。该技术方案在技术方案一的基础上,结合应用业务数据的变化趋势进行分析,适用于应用类型相对复杂但系统规模相对较小(数据对象相对较少)的oracle数据库。通过对不同业务类型的数据对象,设计不同的业务数据绝对变化量,并定制不同的数据对象分析策略分析相应的数据对象,来保证各数据对象统计信息的相对及时更新以及查询时的相对准确。步骤103,oracle数据库根据执行计划执行SQL语句查询并返回查询结果。如前所述,oracle数据库首先查询系统基表,判断系统基表中是否存储有SQL语句对应的数据对象统计信息,如果是,获取数据对象访问路径,根据访问路径找到相应的数据对象;否则,从存储的数据对象库中逐个查询,直到获取该SQL语句对应的数据对象。由上述可见,现有的oracle数据库,在数据对象较少的情况下,通过定期或根据数据对象绝对变化量,对系统基表存储的数据对象统计信息进行更新,可以保障各数据对象统计信息的相对准确以及查询的命中率,从而有效降低了查询所需的时间。但随着信息技术的迅猛发展,oracle数据库系统需要处理的业务数据量、信息量越来越庞大,应用oracle数据库系统的结构设计越来越复杂,oracle数据库规模也随之与日俱增的情况下,基于数据对象业务逻辑的差异制定的业务数据绝对变化量等标准,如果预先设定的业务数据绝对变化量较小,则需要频繁更新,系统资源消耗大,维护成本高;如果预先设定的业务数据绝对变化量较大,当oracle数据库发生变化时,例如,将新的数据对象加入到oracle数据库中,或者对原有oracle数据库中的数据对象进行操作使其对应的数据对象统计信息发生变化,这时,由于无法保证及时对系统基表进行更新,容易造成信息疏漏及索引不正确,oracle数据库根据该未更新的系统基表对用户输入的信息进行查询,查询命中率低,数据对象统计信息可靠性低,增加了查询所需的时间。
发明内容有鉴于此,本发明的主要目的在于提出一种提高数据库中数据对象统计信息可靠性的方法,降低数据库维护成本、提高数据库中数据对象统计信息的查询命中率。本发明的另一目的在于提出一种提高数据库中数据对象统计信息可靠性的装置,降低数据库维护成本、提高数据库中数据对象统计信息的查询命中率。为达到上述目的,本发明提供了一种提高数据库中数据对象统计信息可靠性的方法,该方法包括A、接收数据对象,根据接收的数据对象信息以及预先存储的数据对象信息,获取数据对象绝对改变量以及数据对象相对改变量,并存储该接收的数据对象以及数据对象名称;B、判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值,如果是,执行C,否则,返回执行步骤A;C、调用预先设定的分析策略,对数据库中存储的数据对象进行可靠性扫描,获取与存储的数据对象名称相同的数据对象;D、调用分析程序对获取的数据对象进行处理,获取数据对象统计信息并更新存储数据对象统计信息的系统基表。所述数据对象相对改变量为自数据库上一次更新后发生变化的数据对象绝对改变量与数据库上一次更新时存储的数据对象量的比值。所述数据对象相对改变量包括相对物理改变量和相对逻辑改变量;所述数据对象绝对改变量包括绝对物理改变量、绝对逻辑改变量和结构改变量。所述相对逻辑改变量包括插入相对改变量、更新相对改变量以及删除相对改变量;所述相对物理改变量包括数据对象块相对改变量;所述绝对物理改变量包括数据对象块绝对改变量;所述绝对逻辑改变量包括插入绝对改变量以及删除绝对改变量;所述结构改变量为对系统基表执行增加/删除/修改字段操作以及添加新的索引信息导致的数据结构改变。所述插入相对改变量为自上次进行数据对象分析后,对数据对象进行插入操作的记录数与总的记录数的比值;所述更新相对改变量为自上次进行数据对象分析后,对数据库中原有数据对象进行更新操作的记录数与总的记录数的比值;所述删除相对改变量为自上次进行数据对象分析后,对数据库中原有数据对象进行删除操作的记录数与总的记录数的比值;所述数据对象块相对改变量为自上次进行数据对象分析后,数据对象块大小改变量与数据库中数据对象块总大小的比值。所述数据对象改变量阈值包括数据对象绝对改变量阀值和数据对象相对改变量阀值;所述判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值包括判断累计的数据对象绝对改变量是否超过预先设定的数据对象绝对改变量阈值、且累计的数据对象相对改变量是否超过预先设定的数据对象相对改变量阈值。所述判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值包括判断累计的插入绝对改变量是否超过预先设定的插入绝对改变量阈值、且累计的插入相对改变量是否超过预先设定的插入相对改变量阈值;或,判断累计的删除绝对改变量是否超过预先设定的删除绝对改变量阈值、且累计的删除相对改变量是否超过预先设定的删除相对改变量阈值;或,判断累计的更新相对改变量是否超过预先设定的更新相对改变量阈值;或,判断累计的数据对象块绝对改变量是否超过预先设定的数据对象块绝对改变量阈值、且累计的数据对象块相对改变量是否超过预先设定的数据对象块相对改变量阈值;或,判断数据对象自上次分析后,是否发生过数据定义语言操作。一种提高数据库中数据对象统计信息可靠性的装置,该装置包括数据对象统计信息可靠性检测单元、数据对象统计信息可靠性获取单元以及数据对象统计信息存储单元,其中,数据对象统计信息可靠性检测单元,用于根据当前操作的数据对象信息与预先存储的数据对象信息获取该数据对象改变量信息并存储该数据对象以及该数据对象名称,如果累计的数据对象改变量超过预先设定的数据对象改变量阈值,将存储的数据对象名称输出至数据对象统计信息可靠性获取单元;数据对象统计信息可靠性获取单元,用于按照预先设定的分析策略从存储的数据对象中获取与接收的数据对象名称相同的数据对象,获取相应的数据对象统计信息,发送至数据对象统计信息存储单元;数据对象统计信息存储单元,接收来自数据对象统计信息可靠性获取单元的数据对象统计信息并存储。所述数据对象统计信息可靠性检测单元包括数据对象接收模块、数据对象存储模块、数据对象处理模块、数据对象名称存储模块、数据对象发送模块以及数据对象改变量阈值存储模块,其中,数据对象接收模块,用于接收数据对象,输出至数据对象处理模块;数据对象处理模块,用于根据接收的数据对象以及数据对象存储模块存储的相应数据对象信息,获取数据对象改变量信息,将该数据对象输出至数据对象存储模块并将该数据对象名称输出至数据对象名称存储模块;判断累计的数据对象改变量是否超过数据对象改变量阈值存储模块存储的数据对象改变量阈值,如果是,从数据对象存储模块中获取与数据对象名称存储模块存储的数据对象名称相同的数据对象,输出至数据对象发送模块;数据对象存储模块,预先存储有数据对象,用于接收数据对象处理模块输出的数据对象,更新相应数据对象;数据对象发送模块,用于将接收的数据对象发送至外部的数据对象统计信息可靠性获取单元;数据对象改变量阈值存储模块,用于存储数据对象改变量阈值。由上述的技术方案可见,本发明提供的一种提高数据库中数据对象统计信息可靠性的方法及装置,接收数据对象,根据接收的数据对象信息以及预先存储的数据对象信息,获取数据对象绝对改变量以及数据对象相对改变量,并存储该接收的数据对象以及数据对象名称;判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值,如果否,返回执行接收数据对象的步骤,如果是,调用预先设定的分析策略,对数据库中存储的数据对象进行可靠性扫描,获取与存储的数据对象名称相同的数据对象;调用分析程序对获取的数据对象进行处理,获取数据对象统计信息并更新存储数据对象统计信息的系统基表。这样,通过引入数据对象相对改变量,与数据对象绝对改变量结合使用,以数据对象实时变化为依据,及时发现并自动处理变化的数据对象,最大限度的保证了数据对象统计信息与实际状况的偏差在可靠范围内;同时,降低了数据库维护成本、提高了数据库中数据对象统计信息的查询命中率。图1为现有oracle数据库中结构化查询语言语句的执行流程示意图。图2为本发明实施例的提高数据库中数据对象统计信息可靠性的方法流程示意图。图3为本发明实施例的提高数据库中数据对象统计信息可靠性的装置结构示意图。图4为本发明实施例数据对象统计信息可靠性检测单元结构示意图。具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。现有技术中,无论是技术方案一还是技术方案二,都只适用于数据对象变化较少的数据库,并按照一定的时间间隔制定定时分析作业、或以业务数据绝对变化量为标准更新分析策略,因而,在数据对象变化较多时,其维护成本高,且在数据库发生变化时,不能及时更新分析策略,使得数据库系统基表中数据对象统计信息的查询命中率较低,增加了查询数据库数据对象所需时间。上述时间维度的绝对量以及业务数据变化趋势的绝对量等均是基于某种绝对量的改变。但是,在实际生产中,由于数据库中基准数据对象量的不同,使得相同数据对象绝对量的改变可能对不同的数据库产生截然不同的效果。例如,有A、B两个数据库,A数据库原有1亿个数据对象,B数据库原有300万(W)个数据对象,假设两个数据库在3天时间内,均新增数据对象100W,此时,无论时间绝对量(3天)的改变、或是数据对象绝对量(100W)的改变,对两个数据库的影响都是迥然不同的A数据库新增100W数据对象后,其数据对象改变率仅为(100W/1亿),对数据库系统基表中存储的数据对象统计信息查询命中率基本无影响,不需要为此更新分析策略,因而,无需重新采集数据对象统计信息;而对于B数据库,其数据对象改变率超过30%(100W/300W),因而,如果不对系统基表的分析策略进行更新,将使得数据对象统计信息查询命中率进一步降低,即需要重新采集数据对象统计信息以保障查询命中率。如前所述,在用户进行查询时,数据库根据用户输入的查询关键词进行分析、处理后,从系统基表中获取相关数据对象统计信息,这些数据对象统计信息是由最近一次对数据对象分析时记录在系统基表中的。因而,如果用户输入的查询关键词是数据库最近一次对数据对象分析后更新的数据对象,则在系统基表中查询的命中率为零,需要从数据库存储的数据对象中逐个查询,由于从数据库数据对象中查询所需的时间要远远大于从系统基表中进行查询所需的时间,增加了查询所需的时间。对于数据库来说,由于数据对象总是在不断变化(数据对象的新增、更新、删除等)的,因此在对数据对象分析前,记录的数据对象统计信息总是有一定程度的滞后性,下面描述中,将这种记录的数据对象统计信息与实际的数据对象统计信息的比值称之为数据对象相对改变量,即需要更新的数据对象改变量与数据库上一次更新时存储的数据对象量的比值。实际应用中,随着数据库的持续运行以及数据对象的新增、更新、删除等操作,数据对象相对改变量会越来越大,而随着数据对象相对改变量的逐渐增大,系统基库中的数据对象统计信息的可靠性就越来越低,使得CBO可能因此产生不恰当的执行计划,导致数据库整体可靠性降低。因而,如果设置一个合理的数据对象相对改变量阀值,针对不同的数据对象绝对改变量,设置相应的数据对象相对改变量阀值,在数据对象相对改变量达到数据对象相对改变量阀值时,及时对数据库中需要更新的数据对象进行重新分析,使其在系统基表中相关的数据对象统计信息及时得到更新,这样,就可以保障数据对象统计信息的可靠性,从而提高数据库整体可靠性。本发明实施例中,基于oracle数据库中数据对象绝对改变量以及数据对象相对改变量,通过准实时采集oracle数据库底层数据对象,获取各种数据对象绝对改变量以及相对改变量,提出评估oracle数据库底层数据对象绝对改变量以及数据对象相对改变量的算法,用来作为更新当前oracle数据库系统基表中数据对象统计信息的可靠性的依据,并建立自动分析队列对需要更新的数据对象进行分析处理,最终实现全oracle数据库所有数据对象统计信息的实时高可靠性保障,提升oracle数据库稳定运行指标。所应说明的是,本实施例的技术方案不仅仅可以应用于oracle数据库,也可以应用于其它的数据库,其方法与应用于oracle数据库的方法相同,后续不再赘述。下面先对本发明实施例涉及的数据库不同的数据对象以及相应的数据对象相对改变量进行描述。数据对象绝对改变量包括数据对象绝对物理改变量(以下简称绝对物理改变量),数据对象绝对逻辑改变量(以下简称绝对逻辑改变量)以及结构改变量等;数据对象相对改变量包括数据对象相对物理改变量(以下简称相对物理改变量),数据对象相对逻辑改变量(以下简称相对逻辑改变量)等。其中,逻辑改变量包括插入(Insert)改变量、更新(Update)改变量以及删除(Delete)改变量。hsert改变量,用于记录自上次进行数据对象分析、并将数据对象统计信息记录在系统基表中后,对新数据对象进行insert操作的次数。一般来说,进行一次insert操作,就会增加一条数据对象记录,并且根据数据对象当前的状况,还可能会引起数据对象的物理空间扩展,因此,本实施例中,可以设置该Insert改变量在满足设定的条件时,并在有其它需要分析的数据对象时,优先对该^sert改变量对应的数据对象进行分析。Update改变量,用于记录自上次进行数据对象分析、并将数据对象的统计信息记录在系统基表中后,对oracle数据库中原有数据对象进行update操作的次数。—般来说,正常的更新操作,不会对数据对象的物理结构造成较大影响,但也不排除某些情况下,由于update前后数据对象值差异较大使得数据对象发生行迁移而对空间使用产生影响。因此,本实施例中,可以设置该Update改变量在满足设定的条件时,并在有其它需要分析的数据对象时,可以先对其他需要分析的数据对象进行分析。Delete改变量,用于记录自上次进行数据对象分析、并将数据对象的统计信息记录在系统基表中后,对oracle数据库中原有数据对象进行Delete操作的次数。由于该Delete操作会减少oracle数据库中数据对象的记录数,但是并不回收数据对象所占用的物理空间,容易造成实际数据对象数据量与数据对象空间占用量不成正比的现象,因此,本实施例中,可以设置该Delete改变量对应的数据对象进行分析的优先级与hsert改变量的优先级相同。所应说明的是,将上述hsert改变量、Update改变量以及Delete改变量分别与oracle数据库中记录的数据对象总量相比就可以得到相应的相对^sert改变量、相对Update改变量以及相对Delete改变量。上述hsert改变量、Update改变量以及Delete改变量三个改变量,均是通过oracle数据库中的DML操作产生的,统称为逻辑改变量,其中,insert操作对数据对象的物理空间扩展有较为明显的作用,delete操作会删除oracle数据库中的数据对象,但不会回收该数据对象所占用的物理空间,而update操作,一般情况下,对数据对象的影响不明显。因而,三个改变量对应的数据对象分析优先级中,Insert改变量分析优先级以及Delete改变量分析优先级较高,Update改变量分析优先级较低。由于逻辑改变量可以直接反映一个数据对象的物理空间改变情况,该物理改变量可以直接作为单独的数据对象统计信息可靠性评估标准。物理改变量包括数据对象所占用块(blocks)大小、字节数(bytes)大小等。本实施例中,物理改变量主要体现在数据对象物理段的改变上。在对数据对象进行统计信息收集时,oracle数据库会将当前数据对象的物理改变量(物理使用状况),例如,该数据对象所占用blocks大小,bytes大小等,记录在oracle数据库中相应的存储模块中。后续中,如果数据对象发生变动,会在另外的存储模块中记录该数据对象实时的物理使用状况,通过两个存储模块核心指标(物理使用状况)的对比,即可得到相应的物理改变量,并可根据一定算法(例如,将总的物理改变量与系统基表中初始记录的总数据对象的物理空间相比),计算出相对物理改变量。当然,实际应用中,前述的逻辑改变量也可能导致物理改变量的变化。由于物理改变量也可以直接反映一个数据对象的物理空间改变情况,该物理改变量可以直接作为单独的数据对象统计信息可靠性评估标准。结构改变量,用于记录数据对象的数据结构的改变,如对系统基表执行增加/删除/修改字段操作,添加新的索引信息等,也会导致数据对象统计信息可靠性的降低,在oracle数据库中,该类结构改变量操作统称为DDL操作。本实施例中,该类结构改变量,属于单一性的结构改变量,与物理改变量一样,可作为单独的数据对象统计信息可靠性评估标准。上述的物理改变量、逻辑改变量以及结构改变量,基本囊括了一个数据对象可能发生的各种改变。接着,再对本发明实施例涉及的数据对象相对改变量阈值进行描述。从上述数据对象可能发生的改变量分析中可以得出,三种类型的改变量(物理改变量、逻辑改变量以及结构改变量),均能单独影响统计信息的可靠性。因此,本实施例中,对三种类型改变量的检测评估采取相对独立的方式,如果任一类型的改变量,达到检测标准的数据对象相对改变量阀值,则认为需要对系统基表中的数据对象统计信息进行更新。本实施例中,与上述描述相对应,数据对象相对改变量阀值包括相对逻辑改变量阀值、相对物理改变量阀值以及结构改变量阀值,其中,相对逻辑改变量阀值,根据不同DML操作对数据对象的影响,为相对^sert改变量阀值、相对Update改变量阀值以及相对Delete改变量阀值分配不同的分析策略标准,也就是说,对于Delete操作和insert操作,既考虑绝对改变量,又考虑相对改变量;对于Update操作,仅考虑相对改变量。insert操作的分析策略标准具体实现逻辑为Insert绝对改变量大于50W次、且insert相对改变量大于3%;或者insert绝对改变量大于30W次、且insert相对改变量大于5%;或者insert绝对改变量大于IOW次、且insert相对改变量大于%;或者insert绝对改变量大于IW次、且insert相对改变量大于10%。也就说,设置的hsert绝对改变量阈值以及hsert相对改变量阀值分别为Insert操作次数大于50W次、且insert操作次数(记录数)超过oracle数据库中数据对象原有记录数的3%以上;或者insert操作次数大于30W次、且insert操作次数超过oracle数据库中数据对象原有记录数的5%以上;或者insert操作次数大于IOW次、且insert操作次数超过oracle数据库中数据对象原有记录数的7%以上;或者insert操作次数大于IW次、且insert操作次数超过oracle数据库中数据对象原有记录数的10%以上。符合上述条件中任意一条的数据对象,可以认为,频繁的insert操作已经大大降低了该数据对象统计信息的可靠性。当然,实际应用中,也可以根据实际需要设置、调整hsert改变量,并根据insert相对改变量设置相应的逻辑改变量阀值等级。上述inserts改变量阀值,即hsert绝对改变量阈值以及hsert相对改变量阀值的数学表达式如下(inserts>500000&(inserts/num_rows*100>3))|(inserts>300000&(inserts/num_rows*100>5))|(inserts>100000&(inserts/num_rows*100>7))|(inserts>10000&(inserts/num_rows*100>10))相应的数据库采集过滤代码实现如下SELECTa.table_owner,a.table_nameFROM(selectu.nametable_owner,o.nametable_name,m.inserts,m.updates,m.deletesfromsys.mon—mods_all$m,sys.obj$o,sys.tab$t,sys.user$uwhereo.obj#=m.obj#ando,obj#=t.obj#ando.owner#=u.user#unionallselectu.nametable_owner,o.nametable_name,m.inserts,m.updates,m.deletesfromsys.mon—mods_all$m,sys.obj$o,sys.user$uwhereo.owner#=u.user#ando.obj#=m.obj#ando.type#=19unionallselectu.nametable_owner,o.nametable_name,m.inserts,m.updates,m.deletesfromsys.mon_mods_all$m,sys.obj$o,sys.tabsubpart$tsp,sys.obj$o2,sys.user$uwhereo.obj#=m.obj#ando.owner#=u.user#ando.obj#=tsp.ob)j#ando2.obj#=tsp.pobj#)a,dba一tablesbwherea.table—namenotlike'BIN$%'anda.table—ownerlike'%XXX%'anda.table_owner—.b.owneranda.table—name=b.tablenameandb.last—analyzedisnotnulland((a.inserts>500000anda.inserts/b.num_rows*100>3)or(a.inserts>300000anda.inserts/b.num_rows*100>5)or(a.inserts>100000anda.inserts/b.num_rows*100>7)or(a.inserts>10000anda.inserts/b.num—rows*100>10));其中,tablejwner,table_name等变量可根据应用环境给予适当的赋值,并可以根据实际需要,从系统基表中读取其他项的信息执行过滤,以满足不同应用环境的需求。相应地,Delete操作的分析策略标准具体实现逻辑为Delete绝对改变量大于30W次、且Delete相对改变量大于3%;或者Delete绝对改变量大于20W次、且Delete相对改变量大于4%;或者Delete绝对改变量大于10W次、且Delete相对改变量大于5%;或者Delete绝对改变量大于IW次、且Delete相对改变量大于10%。也就说,Delete操作次数大于30W次、且delete操作次数超过oracle数据库中数据对象原有记录数3%以上;或者Delete操作次数大于20W次、且Delete操作次数超过oracle数据库中数据对象原有记录数4%以上;或者Delete操作次数大于10W次、且Delete操作次数超过oracle数据库中数据对象原有记录数5%以上;或者Delete操作次数大于IW次、且Delete操作次数超过oracle数据库中数据对象的原有记录数10%以上。与前述相同,符合上述条件中任意一条的数据对象,可以认为,频繁的Delete操作已经大大降低了该数据对象统计信息的可靠性。上述Delete改变量阀值的数学表达式如下(Deletes>300000&(Deletes/num_rows*100>3))|(Deletes>200000&(Deletes/num_rows*100>4))|(Deletes>100000&(Deletes/num_rows*100>5))|(Deletes>10000&(Deletes/num_rows*100>10))相应的数据库采集过滤代码实现如下SELECTa.table_owner,a.table_nameFROM(selectu.nametable_owner,o.nametable_name,m.inserts,m.updates,m.deletesfromsys.mon_mods_all$m,sys.obj$o,sys.tab$t,sys.user$uwhereo.obj#=m.obj#ando.obj#=t.obj#ando.owner#=u.user#unionallselectu.nametable_owner,o.nametable_name,m.inserts,m.updates,m.deletesfromsys.mon_mods—all$m,sys.obj$o,sys.user$uwhereo.owner#=u.user#ando.obj#=m.obj#ando.type#=19unionallselectu.nametable_owner,o.nametable—name,m.inserts,m.updates,m.deletesfromsys.mon_mods_all$m,sys.obj$o,sys.tabsubpart$tsp,sys.obj$o2,sys.user$uwhereo.obj#=m.obj#ando.owner#=u.user#ando.obj#=tsp.ot)j#ando2.obj#=tsp.pobj#)a,dba—tablesbwherea.table_namenotlike’BIN$%’anda.table_ownerlike'%XXX%'anda.table_owner-b.owneranda.table_name=b.table_nameandb.lastanalyzedisnotnulland((a.deletes>300000anda.deletes/b.num_rows*100>3)or(a.deletes>200000anda.deletes/b.num_rows*100>4)or(a.deletes>100000anda.deletes/b.numrows*100>5)or(a.deletes>10000anda.deletes/b.num—rows*100>10));对于Update操作,如前所述,由于其对数据对象统计信息的可靠性影响较小,因此,本实施例中,Update操作次数(记录数)仅考虑相对量的改变,只有当Update操作次数超过oracle数据库中数据对象原有记录数10%以上时,认为该频繁的Update操作已经大大降低了该数据对象统计信息的可靠性。当然,实际应用中,也可以综合考虑Update改变量以及Update相对改变量,并设置多级具体的实现逻辑。本实施例中,Update改变量阀值的数学表达式如下(Updates/num_rows*100>10)相应的数据库采集过滤代码实现如下SELECTa.table_owner,a.table_nameFROM(selectu.nametable_owner,o.nametable_name,m.inserts,m.updates,m.deletesfromsys.mon—mods_all$m,sys.obj$o,sys.tab$t,sys.user$uwhereo.obj#=m.obj#ando.obj#=t.obj#ando.owner#二u.user#unionallselectu.nametable_owner,o.nametable—name,m.inserts,m.updates,m.deletesfromsys.mon_mods_all$m,sys.obj$o,sys.user$uwhereo.owner#=u.user#ando.obj#=m.obj#ando.type#=19unionallselectu.nametable—owner,o.nametable_name,m.inserts,m.updates,m.deletesfromsys.mon—mods_all$m,sys.obj$ο,sys.tabsubpart$tsp,sys.obj$o2,sys.user$uwhereo.obj#=m.obj#ando.owner#=u.user#ando.obj#=tsp.obj#ando2.obj#=tsp.pobj#)a,dba—tablesbwherea.table_namenotlike'BIN$%'anda.table_ownerlike'%XXX%'anda.table_owner=b.owneranda.table_name=b.table_nameandb.last—analyzedisnotnullanda.updates/b.num_rows*100>10;物理改变量阀值,用于表征数据对象当前block数与存储模块中所记录的前次收集统计信息时block数差异的临界值。当数据对象当前block数或byte数与存储模块中所记录的前次收集统计信息时block数或byte数差异大于物理改变量阀值时,可以认为,物理blocks或byte的改变量,已经降低了统计信息的可靠性。根据经验值,以blocks为例,当数据对象blocks小于1000时,该数据对象可以被视为小对象,对数据库统计信息可靠性影响较小。因此,本实施例中,物理改变量阀值的具体实现逻辑为数据对象的物理blocks大于1000、且物理blocks的改变量超过该数据对象原有物理blocks的5%以上。物理改变量阀值的数学表达式如下(abs((blocks_in_stats_blocks_now)/blocks_in_stats)*100>5&blocks_now>1000)II(statsisnull&blocksnow>1000)相应地,数据库采集过滤代码实现如下selecta.owner,a.segment—name,a.blocksblk—now,nvl(decode(b.blocks,0,8,b.blocks),8)blk_in—stats,trunc((a.blocks-nvl(decode(b.blocks,0,8,b.blocks),8))*100/nvl(decode(b.blocks,0,8,b.blocks),8),2)Il’%’blk_chg_perfromdba—segmentsa,dba_tablesbwherea.segment_type='TABLE'anda.segment_namenotlike'BIN$%'anda.owner=b.owneranda.ownerlike'%XXX%'anda.segment_name=b.table—nameand(b.last_analyzedisnullorabs(a.blocks-b.blocks)*100/nvl(decode(b.blocks,0,8,b.blocks),8)>10)anda.blocks>1000orderbya.owner,trunc((a.blocks-nvl(decode(b.blocks,0,8,b.blocks),1))*100/nvl(decode(b.blocks,0,8,b.blocks),8),2)desc;与逻辑改变量阀值一样,对于table_0wner等变量,可根据实际应用需要进行赋值,并可以根据不同应用环境的需求,添力卩、删除相应的信息。此外,对于尚未收集过统计信息的新建数据对象,如果该数据对象物理blocks大于1000,也认为该数据对象降低了统计信息的可靠性。结构改变量阀值,对于该结构类型改变,统称为DDL操作,属于单一性的结构改变量,因此,阀值标准较为简单,其具体实现逻辑为判断数据对象自前次分析后,是否发生过DDL操作,如果是,该数据对象统计信息失效。结构改变量阀值的数学表达式如下Last_ddl_date>last_analyzed—date相应的数据库采集过滤代码实现如下权利要求1.一种提高数据库中数据对象统计信息可靠性的方法,其特征在于,该方法包括A、接收数据对象,根据接收的数据对象信息以及预先存储的数据对象信息,获取数据对象绝对改变量以及数据对象相对改变量,并存储该接收的数据对象以及数据对象名称;B、判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值,如果是,执行C,否则,返回执行步骤A;C、调用预先设定的分析策略,对数据库中存储的数据对象进行可靠性扫描,获取与存储的数据对象名称相同的数据对象;D、调用分析程序对获取的数据对象进行处理,获取数据对象统计信息并更新存储数据对象统计信息的系统基表。2.如权利要求1所述的方法,其特征在于,所述数据对象相对改变量为自数据库上一次更新后发生变化的数据对象绝对改变量与数据库上一次更新时存储的数据对象量的比值。3.如权利要求2所述的方法,其特征在于,所述数据对象相对改变量包括相对物理改变量和相对逻辑改变量;所述数据对象绝对改变量包括绝对物理改变量、绝对逻辑改变量和结构改变量。4.如权利要求3所述的方法,其特征在于,所述相对逻辑改变量包括插入相对改变量、更新相对改变量以及删除相对改变量;所述相对物理改变量包括数据对象块相对改变量;所述绝对物理改变量包括数据对象块绝对改变量;所述绝对逻辑改变量包括插入绝对改变量以及删除绝对改变量;所述结构改变量为对系统基表执行增加/删除/修改字段操作以及添加新的索引信息导致的数据结构改变。5.如权利要求4所述的方法,其特征在于,所述插入相对改变量为自上次进行数据对象分析后,对数据对象进行插入操作的记录数与总的记录数的比值;所述更新相对改变量为自上次进行数据对象分析后,对数据库中原有数据对象进行更新操作的记录数与总的记录数的比值;所述删除相对改变量为自上次进行数据对象分析后,对数据库中原有数据对象进行删除操作的记录数与总的记录数的比值;所述数据对象块相对改变量为自上次进行数据对象分析后,数据对象块大小改变量与数据库中数据对象块总大小的比值。6.如权利要求5所述的方法,其特征在于,所述数据对象改变量阈值包括数据对象绝对改变量阀值和数据对象相对改变量阀值;所述判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值包括判断累计的数据对象绝对改变量是否超过预先设定的数据对象绝对改变量阈值、且累计的数据对象相对改变量是否超过预先设定的数据对象相对改变量阈值。7.如权利要求6所述的方法,其特征在于,所述判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值包括判断累计的插入绝对改变量是否超过预先设定的插入绝对改变量阈值、且累计的插入相对改变量是否超过预先设定的插入相对改变量阈值;或,判断累计的删除绝对改变量是否超过预先设定的删除绝对改变量阈值、且累计的删除相对改变量是否超过预先设定的删除相对改变量阈值;或,判断累计的更新相对改变量是否超过预先设定的更新相对改变量阈值;或,判断累计的数据对象块绝对改变量是否超过预先设定的数据对象块绝对改变量阈值、且累计的数据对象块相对改变量是否超过预先设定的数据对象块相对改变量阈值;或,判断数据对象自上次分析后,是否发生过数据定义语言操作。8.一种提高数据库中数据对象统计信息可靠性的装置,其特征在于,该装置包括数据对象统计信息可靠性检测单元、数据对象统计信息可靠性获取单元以及数据对象统计信息存储单元,其中,数据对象统计信息可靠性检测单元,用于根据当前操作的数据对象信息与预先存储的数据对象信息获取该数据对象改变量信息并存储该数据对象以及该数据对象名称,如果累计的数据对象改变量超过预先设定的数据对象改变量阈值,将存储的数据对象名称输出至数据对象统计信息可靠性获取单元;数据对象统计信息可靠性获取单元,用于按照预先设定的分析策略从存储的数据对象中获取与接收的数据对象名称相同的数据对象,获取相应的数据对象统计信息,发送至数据对象统计信息存储单元;数据对象统计信息存储单元,接收来自数据对象统计信息可靠性获取单元的数据对象统计信息并存储。9.如权利要求8所述的装置,其特征在于,所述数据对象统计信息可靠性检测单元包括数据对象接收模块、数据对象存储模块、数据对象处理模块、数据对象名称存储模块、数据对象发送模块以及数据对象改变量阈值存储模块,其中,数据对象接收模块,用于接收数据对象,输出至数据对象处理模块;数据对象处理模块,用于根据接收的数据对象以及数据对象存储模块存储的相应数据对象信息,获取数据对象改变量信息,将该数据对象输出至数据对象存储模块并将该数据对象名称输出至数据对象名称存储模块;判断累计的数据对象改变量是否超过数据对象改变量阈值存储模块存储的数据对象改变量阈值,如果是,从数据对象存储模块中获取与数据对象名称存储模块存储的数据对象名称相同的数据对象,输出至数据对象发送模块;数据对象存储模块,预先存储有数据对象,用于接收数据对象处理模块输出的数据对象,更新相应数据对象;数据对象发送模块,用于将接收的数据对象发送至外部的数据对象统计信息可靠性获取单元;数据对象改变量阈值存储模块,用于存储数据对象改变量阈值。全文摘要本发明公开了一种提高数据库中数据对象统计信息可靠性的方法及装置,接收数据对象,根据接收的数据对象信息以及预先存储的数据对象信息,获取数据对象绝对改变量以及数据对象相对改变量,并存储该接收的数据对象以及数据对象名称;判断累计的数据对象绝对改变量以及数据对象相对改变量是否超过预先设定的数据对象改变量阈值,如果是,调用预先设定的分析策略,对数据库中存储的数据对象进行可靠性扫描,获取与存储的数据对象名称相同的数据对象;调用分析程序对获取的数据对象进行处理,获取数据对象统计信息并更新存储数据对象统计信息的系统基表。应用本发明,可以降低数据库维护成本、提高数据库中数据对象统计信息的查询命中率。文档编号G06F17/30GK102063449SQ20091023786公开日2011年5月18日申请日期2009年11月12日优先权日2009年11月12日发明者李杰毅,王晓征,肖爱元申请人:中国移动通信集团浙江有限公司