CN102262636B - 生成数据库分区执行计划的方法及装置 - Google Patents

生成数据库分区执行计划的方法及装置 Download PDF

Info

Publication number
CN102262636B
CN102262636B CN 201010190138 CN201010190138A CN102262636B CN 102262636 B CN102262636 B CN 102262636B CN 201010190138 CN201010190138 CN 201010190138 CN 201010190138 A CN201010190138 A CN 201010190138A CN 102262636 B CN102262636 B CN 102262636B
Authority
CN
China
Prior art keywords
subregion
data object
statistical information
database
executive plan
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN 201010190138
Other languages
English (en)
Other versions
CN102262636A (zh
Inventor
王晓征
肖爱元
李杰毅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Mobile Group Zhejiang Co Ltd
Original Assignee
China Mobile Group Zhejiang Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China Mobile Group Zhejiang Co Ltd filed Critical China Mobile Group Zhejiang Co Ltd
Priority to CN 201010190138 priority Critical patent/CN102262636B/zh
Publication of CN102262636A publication Critical patent/CN102262636A/zh
Application granted granted Critical
Publication of CN102262636B publication Critical patent/CN102262636B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种生成数据库分区执行计划的方法及装置,包括:获取数据库分区统计信息量满足预设条件的分区作为非标准分区;根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计信息;根据分区的数据对象的分区统计信息量生成执行计划。应用本发明,可以降低数据库维护成本、提高数据库执行效率。

Description

生成数据库分区执行计划的方法及装置
技术领域
本发明涉及数据库技术,特别涉及一种生成数据库分区执行计划的方法及装置。
背景技术
现在的数据库,无论是用于数据仓库或操作数据存储,都包含丰富的海量数据对象信息,因而,数据库性能的优劣对用户及时查找和展示用户需要的信息起着非常重要的作用,其中,执行计划是影响数据库性能的一大关键因素,执行计划是由数据库中基于成本的优化器(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语法,将执行计划固定,全部采用索引扫描的方式,使其不按照分区差异进行变化,以有效提高大数据量分区的执行计划的效率。
随着信息化系统发展的加快,以及集群系统的大范围使用,数据库规模及复杂程度呈现日益增长的趋势,特别是对于电信,金融等重要行业的数据中心,其核心业务系统的数据库规模已经达到10T级。对于如此大规模的数据库系统,以上通过针对每一条涉及到数据对象的SQL进行设置的方法,均需要对每一条访问到该类数据对象的SQL进行人为的手工处理,而由于目前复杂多变的应用数据库,其访问数据库的SQL条数已经远远超过想象,靠人工手动的对每一条涉及到此类数据对象的SQL进行针对性处理,已经不切实际,处理效率低下,存在较多的盲区、漏洞以及不确定性,使得执行的可靠性不高;进一步地,修改SQL,需要大规模地修改数据库的应用程序,增加了数据库维护成本。
发明内容
有鉴于此,本发明的主要目的在于提出一种生成数据库分区执行计划的方法,降低数据库维护成本、提高数据库执行效率。
本发明的另一目的在于提出一种生成数据库分区执行计划的装置,降低数据库维护成本、提高数据库执行效率。
为达到上述目的,本发明提供了一种生成数据库分区执行计划的方法,该方法包括:
获取数据库分区统计信息量满足预设条件的分区作为非标准分区;
根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;
更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;
将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计信息;
根据分区的数据对象的分区统计信息量生成执行计划。
所述分区统计信息量包括:分区字节大小、物理片段大小、分区块数、数据片段块数、索引片段块数、分区记录行数以及索引记录数中的一个或其任意组合。
所述预设条件包括:分区的物理片段大小小于10兆、且该分区的物理片段大小与数据库中最大三个分区的片段大小的平均值之比小于0.01;或,
分区的分区记录行数小于1000条、且该分区的分区记录行数与数据库中最大三个分区的分区记录行数的平均值之比小于0.01。
通过调用数据库中的dbms_stats.set_table_stats系统程序包更新所述选取的预定比率的数据对象中存在主键或唯一性约束的字段。
在所述更新数据库中存储的非标准分区的分区统计信息后,进一步包括:数据库查询所述非标准分区的分区统计信息量是否满足预设条件,如果不满足,执行所述根据分区的数据对象的分区统计信息量生成执行计划的步骤。
进一步包括:删除插入非标准分区的虚拟化数据对象。
进一步包括:锁定存储的分区统计信息量。
一种生成数据库分区执行计划的装置,该装置包括:分区划分模块、分区模块、分区统计信息量获取模块、数据对象量计算模块、数据对象虚拟化模块、执行计划生成模块,其中,
分区划分模块,用于将数据库中数据对象按照预设规则进行划分,输出至分区模块;
分区模块,用于分别存储分区划分模块划分的数据对象;
分区统计信息量获取模块,用于获取分区模块中数据对象的分区统计信息量,如果分区统计信息量不满足预设条件,将该分区统计信息量信息输出至数据对象量计算模块;
数据对象虚拟化模块,用于根据接收的需要选取的数据对象量,从标准分区中选取预定比率的数据对象,并更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象,输出至相应的分区模块中,并触发执行计划生成模块;
执行计划生成模块,用于根据接收的触发信息,从分区统计信息量获取模块中获取触发信息对应的分区模块的分区统计信息量,根据分区统计信息量生成执行计划。
所述分区模块进一步用于在获知执行计划生成模块为该分区模块生成索引扫描的执行计划后,删除插入的虚拟化数据对象。
由上述的技术方案可见,本发明提供的一种生成数据库分区执行计划的方法及装置,通过获取数据库分区统计信息量满足预设条件的分区作为非标准分区;根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计信息;根据分区的数据对象的分区统计信息量生成执行计划。这样,采用数据对象虚拟化与分区统计信息量虚拟化相结合的方式,非标准分区采用标准化执行计划,可以避免多版本执行计划共享造成的一系列连锁问题;进一步地,通过对非标准分区进行标准化处理,避免了人工的SQL级手工处理,降低了数据库维护成本,能够保证后续各种业务SQL的稳定访问,增强了数据库整体运行稳定性。
附图说明
图1为本发明实施例生成数据库分区执行计划的方法流程示意图。
图2为本发明实施例生成数据库分区执行计划的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
实际应用中,在数据库参数CURSOR_SHARING设置为FORCE的情况下,由于数据库默认将分区的执行计划进行共享,对于小分区和初始分区,如果采用共享的索引扫描的执行计划,其执行代价与使用单分区全表扫描的代价,相差大概在毫秒级,举例来说,对于只有少量记录的小分区或者初始分区,使用单分区全表扫描的代价为3,实际处理时间大概为0.01秒,使用索引扫描的代价为5,实际处理时间大概为0.015秒,执行效率上感知差异较小;而对于大分区,如果采用共享的单分区全表扫描的执行计划,其执行代价与使用索引扫描的代价,则相差巨大。
本发明实施例中,基于上述考虑,如果对数据库中的分区进行标准化处理,即对于不同的分区,都产生同样的基于索引扫描的标准执行计划,这样,可以最大限度地避免由于共享了错误的执行计划而引起的问题;而且,后续所有访问数据对象的SQL,都能够按照标准分区产生的标准执行计划执行查询和搜索,无需人为手工对SQL进行调控,可以降低人工处理的盲区及不确定性,降低数据库维护成本、提高数据库执行的可靠性以及执行效率。
现有技术中,考虑到数据库基于分区的数据对象的分区统计信息自动生成执行计划,如果分区的数据对象量较少,则数据库为分区提供的分区空间也较小,因而,为该分区生成单分区全表扫描的执行计划。本实施例中,如果分区的数据对象量较少,考虑从大分区中提取一定量的数据对象,并对其进行相应处理后插入到该数据对象量较小的分区中,对该分区进行扩展,这样,数据库在检测到该分区的数据对象的分区统计信息满足预先设定的索引扫描的条件后,自动生成索引扫描的执行计划,这样,与大分区的索引扫描的执行计划相一致。即以大分区为基准,对小分区、初始分区等分区,进行分区统计信息的虚拟化处理,通过分区统计信息的虚拟化,引导该分区产生统一的执行计划。以避免单纯进行分区统计信息设置,由于分区统计信息可能与实际片段(segment)大小等指标不符,数据库中的CBO判断该分区统计信息无效并将该统计信息忽略,从而不能产生统一的执行计划。
所应说明的是,本发明实施例中,数据库具有为大分区自动生成索引扫描的执行计划的功能,例如,对于分区的分区统计信息量超过预设条件时,自动生成索引扫描的执行计划,而对于小于预设条件的分区,自动为该分区生成单分区全表扫描的执行计划,对于数据库不具有为大分区自动生成索引扫描的执行计划功能的情况,不属于本发明实施例的讨论范围。
图1为本发明实施例生成数据库分区执行计划的方法流程示意图。参见图1,该流程包括:
步骤101,获取数据库分区统计信息量满足预设条件的分区作为非标准分区;
本步骤中,对数据库进行分区划分与现有技术相同,每一分区对应一个分区统计信息或分区统计信息量,在此不再赘述。
本实施例中,将具有索引扫描的执行计划的分区称为标准分区,其数据对象的分区统计信息量大于或等于预设条件;将不具有索引扫描的执行计划的分区称为非标准分区,获取数据库各分区中分区统计信息量满足预设条件的分区也就是获取数据库中的非标准分区。
本步骤中,预先设定的阈值可以根据数据库中大分区的数据对象的分区统计信息确定,其值可以为数据库为该分区自动生成索引扫描的执行计划所需的最小的数据对象的分区统计信息量。
举例来说,设Pi(i=1,2,…,n)表示数据库中第i个分区,n为分区总个数;
Bi(i=1,2,…,n)表示分区Pi的物理片段(segment)大小;
Bmax表示分区Pi(i=1,2,…,n)中最大三个分区的segment大小的平均值;
Ri(i=1,2,…,n)表示分区Pi的分区记录行数;
Rmax表示分区Pi(i=1,2,…,n)中最大三个分区的分区记录行数的平均值;
预设条件可以为:某一分区的物理segment大小小于10兆(M)、且该分区的物理segment大小与数据库中最大三个分区的segment大小的平均值之比小于0.01,其判断公式的表达式为:
Bi<10M且
Figure BSA00000143172800082
如果满足公式(1),则判断该分区为非标准分区。
当然,实际应用中,预设条件也可以为:某一分区的分区记录行数小于1000条、且该分区的分区记录行数与数据库中最大三个分区的分区记录行数的平均值之比小于0.01,其公式表达式为:
Ri<10M且
Figure BSA00000143172800084
如果满足该条件,则该分区为非标准分区。
上述式中,预设条件涉及的具体数值可以根据实际需要确定。
步骤102,根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;
本步骤中,预定比率可以根据数据库自动生成索引扫描的执行计划所需的最小的数据对象的分区统计信息量以及非标准分区中包含的数据对象的分区统计信息量确定,举例来说,如果数据库自动生成索引扫描的执行计划所需的最小的数据对象的分区统计信息量(物理片段)为10M,即预设条件为10M,具有索引扫描执行计划的标准分区A的数据对象的分区统计信息量(物理片段)为2000M,数据库中的一个分区B的数据对象的分区统计信息量(物理片段)为1M,数据库中最大三个分区的segment大小的平均值为2000M,则通过判断,该分区B为非标准分区,预定比率可以设置为0.0045,即(10-1)/2000。也就是该分区原有的分区统计信息量与预定比率的数据对象的统计信息量之和满足预设条件。
当然,实际应用中,也可以随机生成预定比率的数据对象,而无需从具有索引扫描执行计划的分区中选取,但需要保证生成的预定比率的数据对象与数据库中原有的数据对象不相同,以避免在数据对象查询时发生异常。
数据库从标准分区中随机选取预定比率的数据对象。
步骤103,更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象;
本步骤中,可以通过构建序列,用以替换选取的数据对象中存在主键,或者唯一性约束的字段,例如,选取的预定比率的数据对象为10个记录数,其存在主键或唯一性约束的字段为用户手机号码,则本步骤中,构建一个序列(例如,0,1,…,9),使用该序列分别替换10个记录数中的用户手机号码,即用0替换第一个记录数中的用户手机号码、用1替换第二个记录数中的用户手机号码等,生成虚拟化数据对象。此操作可以调用数据库中的dbms_stats.set_table_stats系统程序包来实现,以将非标准分区的分区统计信息,设置为与标准分区一致的标准分区统计信息,以保证非标准分区在后续的增长过程中,不会出现执行计划异常,以及数据库查询中出现的查询冲突,其程序段执行代码如下:
begin
  dbms_stats.set_table_stats(ownname  =>′owner′,
                                  tabname  =>′TAB_A′,
                                  partname=>′PAR_B′,
                                  numrows  =>20000000,
                                  numblks =>30000);
end;
步骤104,将虚拟化数据对象插入非标准分区中;
本实施例中,利用表(数据库)中标准分区中的已有数据,虚拟出标准分区预定比率(例如,1%等)的数据对象(样本数据),经过虚拟化处理后,插入到非标准分区中,使非标准分区的数据片段(data segment)及索引片段(index segment)的块(blocks),字节(bytes)等各项空间指标适当地扩展,以满足自动生成索引扫描的执行计划所需的最小的数据对象的分区统计信息量(预设条件),避免出现数据库发现统计信息与空间使用指标不符合,造成统计信息失效的情况。例如,非标准分区实际block数为100,自动生成索引扫描的执行计划所需的最小的数据对象的block数为100000,如果不引入虚拟化数据对象对该分区进行扩展,使其block数达到100000,则即使将该分区的block数设置为大于自动生成索引扫描的执行计划所需的最小的数据对象的block数,但oracle数据库的智能分析器检测到实际的block数仅为100,判断该统计信息是不准确的,无效的。
结合步骤103和步骤104再举一实施例,以TAB_A为例,假设PAR_A是标准分区,已经存在2000W数据对象,PAR_B为非标准分区,暂时没有数据对象。从PAR_A中取20W数据对象,在不影响数据主键及唯一性冲突的前提下,伪装为PAR_B中的数据,即进行虚拟化处理:将原有数据对象的主键或唯一性字段,替换成预先定义的序列,插入PAR_B中,这样,可以避免PAR_A中的该数据对象与插入PAR_B中的数据对象相一致而导致查询冲突,使得PAR_B的表分区及索引分区物理blocks,bytes等指标均进行了适当真实的增长以满足标准分区生成执行计划的条件。
步骤103和步骤104的程序段执行代码如下:
--产生Rs
create table TAB_A_TEMP
as select t.*,rownum id  from TAB_A t where rownum<200001;
--产生Rw
update TAB_A_TEMP set PART_ID=′PAR_B′,key_a=Si;
……
commit;
--将Rw插入Pi
insert into TAB_A select*from FAB_A_TEMP;
commit;
步骤105,更新数据库中存储的非标准分区的分区统计信息;
本步骤中,在插入虚拟化数据后,需要更新数据库中存储的该分区的分区统计信息,即通过手工或程序执行的方式更新数据库数据字典中该分区的相关参数。
具体来说,通过调用数据库中dbms_stats系统包,对非标准分区进行分区统计信息量收集。即在前述的PAR_B中存在一定的虚拟化数据对象后,手工执行DBMS_STATS.GATHER_TABLE_STATS,对PAR_B及其索引进行分区统计信息量收集并更新,以便触发数据库重新生成执行计划,使得后续如果有应用访问PAR_B,则ORACLE CBO优化器会依照重新生成的标准分区的执行计划,进行索引扫描。其程序段执行代码如下:
begin
  DBMS_STATS.GATHER_TABLE_STATS(ownname=>′owner′,
                           tabname           =>′TAB_A′,
                           partname          =>′PAR_B′,
                           estimate_percent=>1,
                           no_invalidate    =>false,
                           force             =>true,
                           cascade           =>true,
                           degree            =>10);
end;
实际应用中,对于有多个非标准分区的数据库,可以从一个标准分区中选取预定数量的数据对象,进行虚拟化处理后分别插入不同的非标准分区中,虚拟化处理既可以使用同一序列替换原有数据对象的主键或唯一性字段,也可以分别构建不同序列,分别替换原有数据对象的主键或唯一性字段。
本步骤中,数据库查询到分区的分区统计信息量不满足预设条件,触发执行步骤106。
步骤106,根据分区的数据对象的分区统计信息量生成执行计划。
本步骤中,由于数据对象的虚拟化作用,ORACLE CBO优化器根据虚拟数据对象的分区统计信息量,将对非标准分区也产生与标准分区一致的执行计划。根据分区的数据对象的分区统计信息生成执行计划属于现有技术,具体可参见相关技术文献,在此不再赘述。
至此,该生成数据库分区执行计划的方法流程结束。
实际应用中,对于插入非标准分区的虚拟化数据对象,由于并非为数据库非标准分区实际存在的数据对象,对于后续的SQL查询,一般不会查询到该虚拟化数据对象,因而,如果将其存储在分区中,将会引起查询效率的降低,以及消耗分区的存储资源,本实施例中,在数据库根据分区的数据对象的统计信息量生成执行计划后,可以删除该插入的虚拟化数据对象,即执行步骤107。
步骤107,删除插入非标准分区的虚拟化数据对象;
本步骤中,通过调用数据库中的DBMS_STATS.LOCK_TABLE_STATS程序包,将插入非标准分区的虚拟化数据对象删除,以节约分区的存储资源,提高查询效率。
步骤108,锁定存储的分区统计信息量。
本步骤中,为保证分区统计信息的持续有效性,对其进行锁定,以避免自动分析进程对相关数据对象进行扫描并修改数据字典中关于该非标准分区的分区统计信息的相关信息,防止在该非标准分区的增长过程中分区统计信息出现被修改的情况,从而影响其有效性。
步骤107和步骤108的程序段执行代码如下:
begin
  DBMS_STATS.LOCK_TABLE_STATS(ownname=>′owner′,
                         tabname=>′TAB_A′);
end;
delete from TAB_A where PART_ID=′PAR_B′;
commit;
由上述可见,本发明实施例的生成数据库分区执行计划的方法,通过从标准分区选取预定比率的数据对象,将选取的数据对象的主键或唯一性约束的字段进行替换后生成虚拟化数据对象,并插入到非标准分区中以扩展非标准分区的空间,使其满足自动生成索引扫描的执行计划所需的最小的数据对象的分区统计信息量,数据库根据分区的数据对象的分区统计信息量自动生成执行计划。这样,通过采用数据对象虚拟化与分区统计信息量虚拟化相结合的方式,非标准分区采用标准化执行计划,可以避免多版本执行计划共享造成的一系列连锁问题;进一步地,通过对非标准分区进行标准化处理,避免了人工的SQL级手工处理,降低了数据库维护成本,能够保证后续各种业务SQL的稳定访问,增强了数据库整体运行稳定性;而且,由于数据库SQL存在可共享的执行计划,不需要执行硬解析步骤,可以有效降低数据库硬解析对资源的消耗;同时,标准化处理操作集中在数据库分区层面,可控度高,实现了非常态数据分布的分区统计信息标准化管理。
图2为本发明实施例生成数据库分区执行计划的装置结构示意图。参见图2,该装置包括:分区划分模块、分区模块、分区统计信息量获取模块、数据对象量计算模块、数据对象虚拟化模块、执行计划生成模块,其中,
分区划分模块,用于将数据库中数据对象按照预设规则进行划分,输出至分区模块;
本实施例中,分区划分模块根据时间或者业务规则对数据库中数据对象进行划分,并分配分区存储相应划分的数据对象。
分区模块,用于分别存储分区划分模块划分的数据对象;
分区统计信息量获取模块,用于获取分区模块中数据对象的分区统计信息量,如果分区统计信息量不满足预设条件,将该分区统计信息量信息输出至数据对象量计算模块;
本实施例中,如果分区统计信息量满足预设条件,则不作处理。
分区统计信息量包含分区字节大小、物理片段大小、分区块数、数据片段块数、索引片段块数、分区记录行数以及索引记录数等的一个或其任意组合。
预设条件包括:分区的物理片段大小小于10兆、且该分区的物理片段大小与数据库中最大三个分区的片段大小的平均值之比小于0.01;或,
分区的分区记录行数小于1000条、且该分区的分区记录行数与数据库中最大三个分区的分区记录行数的平均值之比小于0.01。
数据对象量计算模块,根据预设条件以及接收的分区统计信息量,计算需要选取的数据对象量,输出至数据对象虚拟化模块;
本实施例中,需要选取的数据对象量等于预设条件包含的分区统计信息量与接收的分区统计信息量之差,例如,预设条件规定的物理片段为10M,接收的分区统计信息量(物理片段)为1M,则需要选取的数据对象量(物理片段)为9M。
数据对象虚拟化模块,用于根据接收的需要选取的数据对象量,从标准分区中选取预定比率的数据对象,并更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象,输出至相应的分区模块中,并触发执行计划生成模块;
执行计划生成模块,用于根据接收的触发信息,从分区统计信息量获取模块中获取触发信息对应的分区模块的分区统计信息量,根据分区统计信息量生成执行计划。
较佳地,分区模块进一步用于在获知执行计划生成模块为该分区模块生成索引扫描的执行计划后,删除插入的虚拟化数据对象。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种生成数据库分区执行计划的方法,其特征在于,该方法包括:
获取数据库分区统计信息量满足预设条件的分区作为非标准分区;
根据非标准分区的分区统计信息量以及预设条件,从具有索引扫描执行计划的标准分区中选取预定比率的数据对象;
更新选取的预定比率的数据对象中存在主键或唯一性约束的字段,生成虚拟化数据对象,具体为:构建序列,用以替换选取的数据对象中存在主键,或者唯一性约束的字段,生成虚拟化数据对象;
将虚拟化数据对象插入非标准分区中并更新数据库中存储的非标准分区的分区统计信息;
根据分区的数据对象的分区统计信息量生成执行计划。
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所述的装置,其特征在于,所述分区模块进一步用于在获知执行计划生成模块为该分区模块生成索引扫描的执行计划后,删除插入的虚拟化数据对象。
CN 201010190138 2010-05-25 2010-05-25 生成数据库分区执行计划的方法及装置 Active CN102262636B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010190138 CN102262636B (zh) 2010-05-25 2010-05-25 生成数据库分区执行计划的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010190138 CN102262636B (zh) 2010-05-25 2010-05-25 生成数据库分区执行计划的方法及装置

Publications (2)

Publication Number Publication Date
CN102262636A CN102262636A (zh) 2011-11-30
CN102262636B true CN102262636B (zh) 2012-10-10

Family

ID=45009266

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010190138 Active CN102262636B (zh) 2010-05-25 2010-05-25 生成数据库分区执行计划的方法及装置

Country Status (1)

Country Link
CN (1) CN102262636B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103365923B (zh) * 2012-03-30 2018-12-07 伊姆西公司 用于评估数据库的分区方案的方法和装置
CN104182540B (zh) * 2014-09-03 2017-10-27 北京国双科技有限公司 数据仓库中的索引统计信息处理方法及装置
CN107102995B (zh) * 2016-02-19 2020-02-21 华为技术有限公司 一种sql执行计划的确定方法及装置
CN111078670B (zh) * 2019-12-19 2023-06-20 上海达梦数据库有限公司 数据库执行计划清除方法、装置、设备和存储介质
CN111737281B (zh) * 2020-06-23 2023-09-01 北京奇艺世纪科技有限公司 数据库查询方法、装置、电子设备以及可读存储介质
US20220179861A1 (en) * 2020-12-08 2022-06-09 International Business Machines Corporation Scheduling query execution plans on a relational database

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1949223A (zh) * 2006-12-01 2007-04-18 金蝶软件(中国)有限公司 一种联机分析处理系统中多维数据读写的方法和装置
CN101183363A (zh) * 2006-11-13 2008-05-21 中兴通讯股份有限公司 一种利用系统表结构统一配置管理内存数据库的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7571192B2 (en) * 2005-06-15 2009-08-04 Oracle International Corporation Methods and apparatus for maintaining consistency during analysis of large data sets

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101183363A (zh) * 2006-11-13 2008-05-21 中兴通讯股份有限公司 一种利用系统表结构统一配置管理内存数据库的方法
CN1949223A (zh) * 2006-12-01 2007-04-18 金蝶软件(中国)有限公司 一种联机分析处理系统中多维数据读写的方法和装置

Also Published As

Publication number Publication date
CN102262636A (zh) 2011-11-30

Similar Documents

Publication Publication Date Title
CN102262636B (zh) 生成数据库分区执行计划的方法及装置
CN111460023B (zh) 基于Elasticsearch的业务数据处理方法、装置、设备及存储介质
CN110908997B (zh) 数据血缘构建方法、装置、服务器及可读存储介质
US7779008B2 (en) Parallel partition-wise aggregation
CN106611064B (zh) 分布式关系数据库的数据处理方法和装置
CN113419823B (zh) 一种适用于高并发事务的联盟链系统及其设计方法
CN104111958A (zh) 一种数据查询方法及装置
CN101086732A (zh) 一种海量数据管理方法
CN102063449A (zh) 提高数据库中数据对象统计信息可靠性的方法及装置
EP3373158B1 (en) Data storage method and coordinator node
US20180189337A1 (en) Method and system for storing time series data in a relational database
CN102054000A (zh) 数据查询方法、装置及系统
CN109299101B (zh) 数据检索方法、装置、服务器和存储介质
CN103177035A (zh) 一种在数据库中查询数据的装置及方法
CN103246745A (zh) 一种基于数据仓库的数据处理装置及方法
CN104111936A (zh) 数据查询方法和系统
CN103136263A (zh) 自动生成sql语句的方法
CN109388636A (zh) 业务数据插入数据库方法、装置、计算机设备及存储介质
CN109885642A (zh) 面向全文检索的分级存储方法及装置
CN104239470A (zh) 一种面向分布式环境的空间数据复合处理系统和方法
CN106919566A (zh) 一种基于海量数据的查询统计方法及系统
US8229946B1 (en) Business rules application parallel processing system
US20220215021A1 (en) Data Query Method and Apparatus, Computing Device, and Storage Medium
El-Helw et al. Optimization of common table expressions in mpp database systems
CN116450675A (zh) 基于元数据及相似度实现任务优化合并方法、系统及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant