DB2数据库优化

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于数据库优化有很多方法,这里针对数据库的runstat(运行统计)和reorg(重组)进行以下说明;

一、runstats:

1、runstats的作用:

一个SQL在写完并运行之后,其实我们只是告诉了DB2去做什么,而不是如何去做。而,具体的如何去做,就取决于优化器。优化器为了生成最优的执行计划,就得掌握当前的系统信息,目录中的统计信息等等。

runstats命令就是用来收集数据库对象的状态信息,这对优化器生成最优的执行计划至关重要。

2、什么时候需要runstats:

在给表创建一个index后,我们最好做一次runstat,否则可能index没有生效。不过有说法称在8.2版本以后的DB2中,会在INDEX之后自动进行runstats;

在对table做了一次reorg后,记得要做一次runstats。因为对表做reorg,会修改表的很多信息,比如高水位等,所以做一次runstats,可以更新统计信息。

当表里数据发生了比较大的变化,一般来说,大约表里面的数据量的10%-20%发生了变化,就应该作一次runstats。这些变化包括删除,修改,插入。对于一些非常大的表,比方在某些医院,出院明细账表非常巨大。这个时候,完整的对一个大表做runstats可能花费时间相当大,需要提前做好准备;

3、runstats的语法:

runstats on table [模式名].[表名] with distribution and detailed indexes all

你可以在所有列上,或者仅仅在某些列或列组(除了LONG和LOB列)上执行RUNSTA TS。如果没有指定特定列的子句,系统则会使用默认的ON ALL COLUMNS子句。

使用RUNSTA TS WITH DISTRIBUTION

当您已确定表中包含不是统一分布的数据时,可以运行包含WITH DISTRIBUTION子句的RUNSTA TS。目录统计信息表通常包含关于表中最高和最低值的信息,而优化器假定数据值是在两个端点值之间均匀分布的。然而,如果数据值彼此之间差异较大,或者群集在某些点上,或者是碰到许多重复的数据值,那么优化器就无法选择一个最佳的访问路径,除非收集了分布统计信息。使用WITH DISTRIBUTION子句还可以帮助查询处理没有参数标志符(parameter marker)或主机变量的谓词,因为优化器仍然不知道运行时的值是有许多行,还是只有少数行。

如果为单一索引进行runstats,可以使用:

runstats on table [模式名].[表名] for indexes [索引名]

4、图像界面下runstats;

首先在维护机上编目需要优化的的数据库;

连接数据库;

找到需要做runstats的表,右键,选择运行统计信息;

二、reorg

在对表数据进行许多更改之后,逻辑上连续的数据可能会位于不连续的物理数据页上,在许多插入操作创建了溢出记录时尤其如此。按这种方式组织数据时,数据库管理器必须执行其他读操作才能访问顺序数据。另外,在删除大量行后,也需要执行其他的读操作。

表重组操作会整理数据碎片来减少浪费的空间,并对行进行重新排序以合并溢出记录,从而加快数据访问速度并最终提高查询性能。还可以指定根据特定索引来重新排序数据,以便查询时通过最少次数据读取操作就可以访问数据。

三、什么情况下必须做数据库优化;

1、表中数据量有10%的变化(增加或减少);

2、给表增加索引后;

3、更新表结构后;

四、数据库优化的步骤:

RUNSTA TS -> REORGTABLE -> REORGINDEX -> RUNSTA TS

五、用命令优化整个数据库

1、停止业务,或者夜间通知客户端程序会有停顿现象;

2、连接数据库,执行gen_export.db2脚本;

3、生成runstats.db2;reorg.db2;reorgidx.db2三个脚本;

4、依次执行runstats.db2-- reorg.db2—reorgidx--db2runstats.db2;

相关文档
最新文档