专利名称::生成数据库分区执行计划的方法及装置的制作方法
技术领域:
:本发明涉及数据库技术,特别涉及一种生成数据库分区执行计划的方法及装置。
背景技术:
:现在的数据库,无论是用于数据仓库或操作数据存储,都包含丰富的海量数据对象信息,因而,数据库性能的优劣对用户及时查找和展示用户需要的信息起着非常重要的作用,其中,执行计划是影响数据库性能的一大关键因素,执行计划是由数据库中基于成本的优化器(CBO,Cost-basedOptimizer)根据解析得到的用户输入的参数自动生成用以查询数据对象的结构化查询语言(SQL,StructuredQueryLanguage),根据SQL查询数据库中预先存储的数据对象统计信息,选择代价最小的访问路径,根据访问路径找到相应的数据对象,并将该数据对象信息返回给用户的自动执行方式。数据库自动生成的执行计划的恰当与否,会对全数据库的性能产生非常大的影响,例如,如果涉及数据库核心大表的执行计划出错,将可能引发一连串的连锁反应,导致数据库性能急剧下降,甚至能够耗尽数据库资源,造成宕机。随着数据库应用系统的日渐复杂,数据库中数据对象量也越来越多,数据对象的设计也越来越细化,以数据对象,也就是表为例,在电信级核心数据库(表)中,由于数据量巨大,如果以包含全部数据对象的数据库生成执行计划,将使得查询效率十分低下,因此,本领域技术人员提出的改进方法是根据时间或者业务规则等引入分区技术,将数据库中的数据对象分为多个分区,数据库为每个分区对应生成一个执行计划,例如,根据时间规则引入的分区技术,按照一定的时间间隔(每日、每周、每月等)将表分为多个分区,由于相同时间间隔内的数据对象量不同,各分区的数据对象统计信息也各不相同,因而,生成多个版本的执行计划,这样,通过将原数据量巨大的单表拆分为合理大小的多个分区,以保证表执行的高效性,提高查询效率。现有技术中,数据对象包含的分区统计信息量包含分区字节(bytes)大小、物理片段(segment)大小、分区块(block)数、数据片段(datasegment)块数、索引片段(indexsegment)块数、分区记录行数、索引记录数等信息,随着分区技术的引入,不同分区之间,由于数据对象量差异,数据对象分布的不同,各分区中包含的数据对象量不同,使得每个分区对应的数据对象的分区统计信息也不同,从而导致生成的执行计划也可能不同,这样,同一张表有可能产生多个版本的执行计划,例如,适合小分区及初始分区的单分区全表扫描计划、适合标准大分区的索引扫描计划等,举例来说,对于表TAB_A,通过分区技术被划分为两个分区PAR_A和PAR_B,其中PAR_A是小分区,包含几百条数据对象或记录,PAR_B是大分区,包含几十万条数据对象或记录,数据库根据各分区的分区统计信息,分别为PAR_A生成单分区全表扫描的执行计划,为PAR_B生成索引扫描的执行计划。也就是说,对于相同的SQL而言,如果访问PAR_A,执行计划采取单分区全表扫描是最合适的,其访问效率较高,而对于PAR_B,执行计划采取索引扫描是最合适的。然而,在现有数据库中,由于分区PAR_A和PAR_B都属表TAB_A,因此,在数据库参数⑶RS0R_SHARING设置为FORCE的情况下,数据库默认会将这两个分区的执行计划进行共享,也就是说,数据库将首次访问某一分区的执行计划作为后续访问其他分区的执行计划。例如,如果首先访问PAR_A,则后续访问PAR_B的SQL,可能将沿用PAR_A的单分区全表扫描的执行计划,这样,对于有大量数据的PART_B,数据库的执行效率将大大下降,甚至引起堵塞;当然,如果首先访问PAR_B,则后续访问PAR_A的SQL,可能将沿用PAR_B的索引扫描的执行计划,对于小分区和初始分区,如果采用索引扫描的执行计划,其执行代价与使用单分区全表扫描的代价,相差大概在毫秒级,因而,在执行效率上感知差异不大。针对上述执行计划共享引起的执行效率较低的技术问题,目前采用的处理技术有下两种第一种针对每一条涉及到数据对象的SQL,在SQL中使用提示(HINT),针对某一具体的SQL,使用提示,指定其所要采取的执行计划,即手工强制制定执行计划,在每条需要访问此类数据对象的SQL上,加上HINT,指定该数据对象的执行计划。第二种针对每一条涉及到数据对象的SQL,使用数据库提供的outline语法,将执行计划固定,全部采用索引扫描的方式,使其不按照分区差异进行变化,以有效提高大数据量分区的执行计划的效率。随着信息化系统发展的加快,以及集群系统的大范围使用,数据库规模及复杂程度呈现日益增长的趋势,特别是对于电信,金融等重要行业的数据中心,其核心业务系统的数据库规模已经达到IOT级。对于如此大规模的数据库系统,以上通过针对每一条涉及到数据对象的SQL进行设置的方法,均需要对每一条访问到该类数据对象的SQL进行人为的手工处理,而由于目前复杂多变的应用数据库,其访问数据库的SQL条数已经远远超过想象,靠人工手动的对每一条涉及到此类数据对象的SQL进行针对性处理,已经不切实际,处理效率低下,存在较多的盲区、漏洞以及不确定性,使得执行的可靠性不高;进一步地,修改SQL,需要大规模地修改数据库的应用程序,增加了数据库维护成本。
发明内容有鉴于此,本发明的主要目的在于提出一种生成数据库分区执行计划的方法,降低数据库维护成本、提高数据库执行效率。本发明的另一目的在于提出一种生成数据库分区执行计划的装置,降低数据库维护成本、提高数据库执行效率。为达到上述目的,本发明提供了一种生成数据库分区执行计划的方法,该方法包括获取数据库分区统计信息量满足预设条件的分区作为非标准分区;根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计信息;根据分区的数据对象的分区统计信息量生成执行计划。所述分区统计信息量包括分区字节大小、物理片段大小、分区块数、数据片段块数、索引片段块数、分区记录行数以及索引记录数中的一个或其任意组合。所述预设条件包括分区的物理片段大小小于10兆、且该分区的物理片段大小与数据库中最大三个分区的片段大小的平均值之比小于0.01;或,分区的分区记录行数小于1000条、且该分区的分区记录行数与数据库中最大三个分区的分区记录行数的平均值之比小于0.01。通过调用数据库中的dbmS_StatS.set_table_stats系统程序包更新所述选取的预定比率的数据对象中存在主键或唯一性约束的字段。在所述更新数据库中存储的非标准分区的分区统计信息后,进一步包括数据库查询所述非标准分区的分区统计信息量是否满足预设条件,如果不满足,执行所述根据分区的数据对象的分区统计信息量生成执行计划的步骤。进一步包括删除插入非标准分区的虚拟化数据对象。进一步包括锁定存储的分区统计信息量。一种生成数据库分区执行计划的装置,该装置包括分区划分模块、分区模块、分区统计信息量获取模块、数据对象量计算模块、数据对象虚拟化模块、执行计划生成模块,其中,分区划分模块,用于将数据库中数据对象按照预设规则进行划分,输出至分区模块;分区模块,用于分别存储分区划分模块划分的数据对象;分区统计信息量获取模块,用于获取分区模块中数据对象的分区统计信息量,如果分区统计信息量不满足预设条件,将该分区统计信息量信息输出至数据对象量计算模块;数据对象虚拟化模块,用于根据接收的需要选取的数据对象量,从标准分区中选取预定比率的数据对象,并更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象,输出至相应的分区模块中,并触发执行计划生成模块;执行计划生成模块,用于根据接收的触发信息,从分区统计信息量获取模块中获取触发信息对应的分区模块的分区统计信息量,根据分区统计信息量生成执行计划。所述分区模块进一步用于在获知执行计划生成模块为该分区模块生成索引扫描的执行计划后,删除插入的虚拟化数据对象。由上述的技术方案可见,本发明提供的一种生成数据库分区执行计划的方法及装置,通过获取数据库分区统计信息量满足预设条件的分区作为非标准分区;根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计信息;根据分区的数据对象的分区统计信息量生成执行计划。这样,采用数据对象虚拟化与分区统计信息量虚拟化相结合的方式,非标准分区采用标准化执行计划,可以避免多版本执行计划共享造成的一系列连锁问题;进一步地,通过对非标准分区进行标准化处理,避免了人工的SQL级手工处理,降低了数据库维护成本,能够保证后续各种业务SQL的稳定访问,增强了数据库整体运行稳定性。图1为本发明实施例生成数据库分区执行计划的方法流程示意图。图2为本发明实施例生成数据库分区执行计划的装置结构示意图。具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。实际应用中,在数据库参数⑶RS0R_SHARING设置为FORCE的情况下,由于数据库默认将分区的执行计划进行共享,对于小分区和初始分区,如果采用共享的索引扫描的执行计划,其执行代价与使用单分区全表扫描的代价,相差大概在毫秒级,举例来说,对于只有少量记录的小分区或者初始分区,使用单分区全表扫描的代价为3,实际处理时间大概为0.01秒,使用索引扫描的代价为5,实际处理时间大概为0.015秒,执行效率上感知差异较小;而对于大分区,如果采用共享的单分区全表扫描的执行计划,其执行代价与使用索引扫描的代价,则相差巨大。本发明实施例中,基于上述考虑,如果对数据库中的分区进行标准化处理,即对于不同的分区,都产生同样的基于索引扫描的标准执行计划,这样,可以最大限度地避免由于共享了错误的执行计划而引起的问题;而且,后续所有访问数据对象的SQL,都能够按照标准分区产生的标准执行计划执行查询和搜索,无需人为手工对SQL进行调控,可以降低人工处理的盲区及不确定性,降低数据库维护成本、提高数据库执行的可靠性以及执行效率。现有技术中,考虑到数据库基于分区的数据对象的分区统计信息自动生成执行计划,如果分区的数据对象量较少,则数据库为分区提供的分区空间也较小,因而,为该分区生成单分区全表扫描的执行计划。本实施例中,如果分区的数据对象量较少,考虑从大分区中提取一定量的数据对象,并对其进行相应处理后插入到该数据对象量较小的分区中,对该分区进行扩展,这样,数据库在检测到该分区的数据对象的分区统计信息满足预先设定的索引扫描的条件后,自动生成索引扫描的执行计划,这样,与大分区的索引扫描的执行计划相一致。即以大分区为基准,对小分区、初始分区等分区,进行分区统计信息的虚拟化处理,通过分区统计信息的虚拟化,引导该分区产生统一的执行计划。以避免单纯进行分区统计信息设置,由于分区统计信息可能与实际片段(segment)大小等指标不符,数据库中的CBO判断该分区统计信息无效并将该统计信息忽略,从而不能产生统一的执行计划。所应说明的是,本发明实施例中,数据库具有为大分区自动生成索引扫描的执行计划的功能,例如,对于分区的分区统计信息量超过预设条件时,自动生成索引扫描的执行计划,而对于小于预设条件的分区,自动为该分区生成单分区全表扫描的执行计划,对于数据库不具有为大分区自动生成索引扫描的执行计划功能的情况,不属于本发明实施例的讨论范围。图1为本发明实施例生成数据库分区执行计划的方法流程示意图。参见图1,该流程包括步骤101,获取数据库分区统计信息量满足预设条件的分区作为非标准分区;本步骤中,对数据库进行分区划分与现有技术相同,每一分区对应一个分区统计信息或分区统计信息量,在此不再赘述。7本实施例中,将具有索引扫描的执行计划的分区称为标准分区,其数据对象的分区统计信息量大于或等于预设条件;将不具有索引扫描的执行计划的分区称为非标准分区,获取数据库各分区中分区统计信息量满足预设条件的分区也就是获取数据库中的非标准分区。本步骤中,预先设定的阈值可以根据数据库中大分区的数据对象的分区统计信息确定,其值可以为数据库为该分区自动生成索引扫描的执行计划所需的最小的数据对象的分区统计信息量。举例来说,设Pi(i=1,2,…,η)表示数据库中第i个分区,η为分区总个数;BiG=1,2,…,η)表示分区Pi的物理片段(segment)大小;Bmax表示分区Pi(i=1,2,…,η)中最大三个分区的segment大小的平均值;Ri(i=1,2,…,η)表示分区Pi的分区记录行数;Rmax表示分EPi(i=1,2,…,η)中最大三个分区的分区记录行数的平均值;预设条件可以为某一分区的物理segment大小小于10兆(M)、且该分区的物理segment大小与数据库中最大三个分区的segment大小的平均值之比小于0.01,其判断公式的表达式为权利要求1.一种生成数据库分区执行计划的方法,其特征在于,该方法包括获取数据库分区统计信息量满足预设条件的分区作为非标准分区;根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计fn息;根据分区的数据对象的分区统计信息量生成执行计划。2.如权利要求1所述的方法,其特征在于,所述分区统计信息量包括分区字节大小、物理片段大小、分区块数、数据片段块数、索引片段块数、分区记录行数以及索引记录数中的一个或其任意组合。3.如权利要求2所述的方法,其特征在于,所述预设条件包括分区的物理片段大小小于10兆、且该分区的物理片段大小与数据库中最大三个分区的片段大小的平均值之比小于0.01;或,分区的分区记录行数小于1000条、且该分区的分区记录行数与数据库中最大三个分区的分区记录行数的平均值之比小于0.01。4.如权利要求1所述的方法,其特征在于,通过调用数据库中的dbmS_StatS.set_table_StatS系统程序包更新所述选取的预定比率的数据对象中存在主键或唯一性约束的字段。5.如权利要求1所述的方法,其特征在于,在所述更新数据库中存储的非标准分区的分区统计信息后,进一步包括数据库查询所述非标准分区的分区统计信息量是否满足预设条件,如果不满足,执行所述根据分区的数据对象的分区统计信息量生成执行计划的步马聚ο6.如权利要求1至5任一项所述的方法,其特征在于,进一步包括删除插入非标准分区的虚拟化数据对象。7.权利要求6所述的方法,其特征在于,进一步包括锁定存储的分区统计信息量。8.—种生成数据库分区执行计划的装置,其特征在于,该装置包括分区划分模块、分区模块、分区统计信息量获取模块、数据对象量计算模块、数据对象虚拟化模块、执行计划生成模块,其中,分区划分模块,用于将数据库中数据对象按照预设规则进行划分,输出至分区模块;分区模块,用于分别存储分区划分模块划分的数据对象;分区统计信息量获取模块,用于获取分区模块中数据对象的分区统计信息量,如果分区统计信息量不满足预设条件,将该分区统计信息量信息输出至数据对象量计算模块;数据对象虚拟化模块,用于根据接收的需要选取的数据对象量,从标准分区中选取预定比率的数据对象,并更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象,输出至相应的分区模块中,并触发执行计划生成模块;执行计划生成模块,用于根据接收的触发信息,从分区统计信息量获取模块中获取触发信息对应的分区模块的分区统计信息量,根据分区统计信息量生成执行计划。9.如权利要求8所述的装置,其特征在于,所述分区模块进一步用于在获知执行计划生成模块为该分区模块生成索引扫描的执行计划后,删除插入的虚拟化数据对象。全文摘要本发明公开了一种生成数据库分区执行计划的方法及装置,包括获取数据库分区统计信息量满足预设条件的分区作为非标准分区;根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计信息;根据分区的数据对象的分区统计信息量生成执行计划。应用本发明,可以降低数据库维护成本、提高数据库执行效率。文档编号G06F17/30GK102262636SQ201010190138公开日2011年11月30日申请日期2010年5月25日优先权日2010年5月25日发明者李杰毅,王晓征,肖爱元申请人:中国移动通信集团浙江有限公司