[发明专利]生成数据库分区执行计划的方法及装置有效
申请号: | 201010190138.4 | 申请日: | 2010-05-25 |
公开(公告)号: | CN102262636A | 公开(公告)日: | 2011-11-30 |
发明(设计)人: | 王晓征;肖爱元;李杰毅 | 申请(专利权)人: | 中国移动通信集团浙江有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京德琦知识产权代理有限公司 11018 | 代理人: | 王一斌;王琦 |
地址: | 310006 浙江省*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 生成 数据库 分区 执行 计划 方法 装置 | ||
技术领域
本发明涉及数据库技术,特别涉及一种生成数据库分区执行计划的方法及装置。
背景技术
现在的数据库,无论是用于数据仓库或操作数据存储,都包含丰富的海量数据对象信息,因而,数据库性能的优劣对用户及时查找和展示用户需要的信息起着非常重要的作用,其中,执行计划是影响数据库性能的一大关键因素,执行计划是由数据库中基于成本的优化器(CBO,Cost-basedOptimizer)根据解析得到的用户输入的参数自动生成用以查询数据对象的结构化查询语言(SQL,Structured Query Language),根据SQL查询数据库中预先存储的数据对象统计信息,选择代价最小的访问路径,根据访问路径找到相应的数据对象,并将该数据对象信息返回给用户的自动执行方式。数据库自动生成的执行计划的恰当与否,会对全数据库的性能产生非常大的影响,例如,如果涉及数据库核心大表的执行计划出错,将可能引发一连串的连锁反应,导致数据库性能急剧下降,甚至能够耗尽数据库资源,造成宕机。
随着数据库应用系统的日渐复杂,数据库中数据对象量也越来越多,数据对象的设计也越来越细化,以数据对象,也就是表为例,在电信级核心数据库(表)中,由于数据量巨大,如果以包含全部数据对象的数据库生成执行计划,将使得查询效率十分低下,因此,本领域技术人员提出的改进方法是根据时间或者业务规则等引入分区技术,将数据库中的数据对象分为多个分区,数据库为每个分区对应生成一个执行计划,例如,根据时间规则引入的分区技术,按照一定的时间间隔(每日、每周、每月等)将表分为多个分区,由于相同时间间隔内的数据对象量不同,各分区的数据对象统计信息也各不相同,因而,生成多个版本的执行计划,这样,通过将原数据量巨大的单表拆分为合理大小的多个分区,以保证表执行的高效性,提高查询效率。
现有技术中,数据对象包含的分区统计信息量包含分区字节(bytes)大小、物理片段(segment)大小、分区块(block)数、数据片段(data segment)块数、索引片段(index segment)块数、分区记录行数、索引记录数等信息,随着分区技术的引入,不同分区之间,由于数据对象量差异,数据对象分布的不同,各分区中包含的数据对象量不同,使得每个分区对应的数据对象的分区统计信息也不同,从而导致生成的执行计划也可能不同,这样,同一张表有可能产生多个版本的执行计划,例如,适合小分区及初始分区的单分区全表扫描计划、适合标准大分区的索引扫描计划等,举例来说,对于表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,因此,在数据库参数CURSOR_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语法,将执行计划固定,全部采用索引扫描的方式,使其不按照分区差异进行变化,以有效提高大数据量分区的执行计划的效率。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国移动通信集团浙江有限公司,未经中国移动通信集团浙江有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010190138.4/2.html,转载请声明来源钻瓜专利网。