reorgchk,检查tableindex是否需要重组。reorg重组,重新放置数据位置。runstats统计信息,可以优化查询器一个完整的日常维护规范可以帮助DBA理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常、安全、高效运行,防止一些错误重复发生。由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用合理的ACCESSPLAN至关重要。DB2优化器使用目录统计信息来确定任何给定查询的最佳访问方案。如果有关表或索引的统计信息已过时或者不完整,则会导致优化器选择不是最佳的方案,并且会降低执行查询的速度。当数据库里某个表中的记录变化量很大时,需要在表上做REORG操作来优化数据库性能一、完整的REORG表的过程值得注意的是,针对数据库对象的大量操作,如反复地删除表,存储过程,会引起系统表中数据的频繁改变,在这种情况下,也要考虑对系统表进行REORG操作。一个完整的REORG表的过程应该是由下面的步骤组成的:RUNSTATS-REORGCHK-REORG-RUNSTATS-BIND或REBIND注:执行下面命令前要先连接数据库1RUNSTATS由于在第二步中REORGCHK时可以对指定的表进行RUNSTATS操作(在REORGCHK时指定UPDATESTATISTICS),所以第一步事实上是可以省略的。2REORGCHK在对表数据进行许多更改之后,逻辑上连续的数据可能会位于不连续的物理数据页上,在许多插入操作创建了溢出记录时尤其如此。按这种方式组织数据时,数据库管理器必须执行其他读操作才能访问顺序数据。另外,在删除大量行后,也需要执行其他的读操作。表重组操作会整理数据碎片来减少浪费的空间,并对行进行重新排序以合并溢出记录,从而加快数据访问速度并最终提高查询性能。还可以指定根据特定索引来重新排序数据,以便查询时通过最少次数据读取操作就可以访问数据。下列任何因素都可能指示用户应该重组表:1)自上次重组表之后,对该表进行了大量的插入、更新和删除活动。2)对于使用具有高集群率的索引的查询,其性能发生了明显变化。3)在执行RUNSTATS命令以刷新统计信息后,性能没有得到改善。4)REORGCHK命令指示需要重组表(注意:在某些情况下,REORGCHK总是建议重组表,即使在执行了重组后也是如此)。例如,如果使用32KB页大小,并且平均记录长度为15字节且每页最多包含253条记录,则每页具有32700-(15x253)=28905个未使用字节。这意味着大约88%的页面是可用空间。用户应分析REORGCHK的建议并针对执行重组所需的成本平衡利益。5)db.tb_reorg_req(需要重组)运行状况指示器处于ATTENTION状态。此运行状况指示器的集合详细信息描述通过重组可获得好处的表和索引的列表。REORGCHK命令返回有关数据组织的统计信息,并且可以建议您是否需要重组特定表。然而,定期或在特定时间对目录统计信息表运行特定查询可以提供性能历史记录,该记录使用户可以发现可能具有更广性能隐含的趋势。DB2V9.1引入了自动重组功能,可以对表和索引进行自动重组。自动重组通过使用REORGCHK公式来确定何时需要对表进行重组。它会定期评估已经更新了统计信息的表,以便了解是否需要重组。REORGCHK命令的语法如下:.-UPDATESTATISTICS--.-REORGCHK--+--------------------+-----------------------------'-CURRENTSTATISTICS-'.-ONTABLEUSER-----------------.--+-------------------------------+---------------------------'-ON--+-SCHEMA--schema-name---+-'|.-USER-------.|'-TABLE--+-SYSTEM-----+-'+-ALL--------+'-table-name-'下面我们来看一下各个选项的含义:UPDATESTATISTICS:更新表的统计数据,根据该统计数据判断是否需要重组表。CURRENTSTATISTICS:根据当前表统计数据判断是否需要重组表。TABLEtable_name:对单个表进行分析。TABLEALL:对数据库所有的表进行分析。TABLESYSTEM:对系统表进行分析。TABLEUSER:对当前用户模式下的所有表进行分析。如果数据库中数据量比较大,在生产系统上要考虑REORGCHK的执行时间可能较长,需安排在非交易时间执行。可以分为对系统表和用户表两部分分别进行REORGCHK:1)针对系统表进行REORGCHKdb2reorgchkupdatestatisticsontablesystem使用UPDATESTATISTICS参数指定数据库首先执行RUNSTATS命令。2)针对用户表进行REORGCHKdb2reorgchkupdatestatisticsontableuserREORGCHK是根据统计公式计算表是否需要重整。对于每个表有3个统计公式,对索引有3个统计公式(版本8开始有5个公式),如果公式计算结果该表需重整,在输出的REORG字段中相应值为*,否则为-。reorgchk所使用的度量的考虑因素包括:(当查看reorgchk工具的输出时,找到用于表的F1、F2和F3这几列,以及用于索引的F4、F5、F6、F7和F8这几列。如果这些列中的任何一列有星号(*),则说明当前的表和/或索引超出了阈值。)F1:属于溢出记录的行所占的百分比。当这个百分比大于5%时,在输出的F1列中将有一个星号(*)。F2:数据页中使用了的空间所占的百分比。当这个百分比小于70%时,在输出的F2列上将有一个星号(*)。F3:其中含有包含某些记录的数据的页所占的百分比。当这个百分比小于80%时,在输出的F3列上将有一个星号(*)。F4:群集率,即表中与索引具有相同顺序的行所占的百分比。当这个百分比小于80%时,那么在输出的F4列上将有一个星号(*)。F5:在每个索引页上用于索引键的空间所占的百分比。当这个百分比小于50%时,在输出的F5列上将有一个星号(*)。F6:可以存储在每个索引级的键的数目。当这个数字小于100时,在输出的F6列上将有一个星号(*)。F7:在一个页中被标记为deleted的记录ID(键)所占的百分比。当这个百分比大于20%时,在输出的F7列上将有一个星号(*)。F8:索引中空叶子页所占的百分比。当这个百分比大于20%时,在输出的F8列上将有一个星号(*)。下面是执行的部分结果db2reorgchkupdatestatisticsontableuser执行RUNSTATS....表统计信息:F1:100*OVERFLOW/CARD5F2:100*(EffectiveSpaceUtilizationofDataPages)70F3:100*(RequiredPages/TotalPages)80SCHEMANAMECARDOVNPFPACTBLKTSIZEF1F2F3REORG----------------------------------------------------------------------------------------DB2INST1STAFF---------*-...索引统计信息:F4:CLUSTERRATIO或正常化的CLUSTERFACTOR80F5:100*(KEYS*(ISIZE+9)+(CARD-KEYS)*5)/((NLEAF-NUMEMPTYLEAFS)*INDEXPAGESIZE)50F6:(100-PCTFREE)*((INDEXPAGESIZE-96)/(ISIZE+12))**(NLEVELS-2)*(INDEXPAGESIZE-96)/(KEYS*(ISIZE+9)+(CARD-KEYS)*5)100F7:100*(NUMRIDSDELETED/(NUMRIDSDELETED+CARD))20F8:100*(NUMEMPTYLEAFS/NLEAF)20SCHEMANAMECARDLEAFELEAFLVLSISIZENDELKEYSF4F5F6F7F8REORG-------------------------------------------------------------------------------------------------表:DB2INST1.STAFFDB2INST1ISTAFF-----------------...从上面的例子来看,对于表DB2INST1.STAFF,根据统计公式F2计算结果,有必要对表进行REORG。3、对需要重组的表进行重组(REORGTABLE)DB2V9可以对表和索引进行自动重组。要进行高效率的数据访问和获得最佳工作负载性能,具有组织良好的表数据是很关键的。在对表数据进行许多更改之后,逻辑上连续的数据可能会位于不连续的物理数据页上,在许多插入操作创建了溢出记录时尤其如此。按这种方式组织数据时,数据库管理器必须执行其他读操作才能访问顺序数据。另外,在删除大量行后,也需要执行其他的读操作。表重组操作会整理数据碎片来减少浪费的空间,并对行进行重新排序以合并溢出记录,从而加快数据访问速度并最终提高查询性能。还可以指定根据特定索引来重新排序数据,以便查询通过最少次数据读取操作就可以访问数据。既可重组系统目录表,也可以重组数据库表。由RUNSTATS收集的统计信息与其他信息一起来显示表中的数据分布情况。特别是,通过分析这些统计信息可以知道何时需要执行哪种类型的重组。自动重组通过使用REORGCHK公式来确定何时需要对表进行重组。它会定期评估已经更新了统计信息的表,以便了解是否需要重组。如果需要重组,则它会在内部调度对表进行传统重组。这将要求执行应用程序功能而不对正在重组的表进行写访问。可以使用auto_reorg、auto_tbl_maint和auto_maint数据库配置参数来启用或禁用自动重组功能部件。在分区数据库环境中,确定执行自动重组和启动自动重组是在目录分区上完成的。只需要在目录分区上启用数据库配置参数,就将在目标表所在的所有数据库分区上运行重组。如果用户不太确定何时以及如何重组表和索引,则可以将自动重组作为整个数据库维护方案的一部分。如果是DB2V8.2.2以前的版本,是没有自动重组功能的。如果你的数据库是DB2V8.2.2以前的版本,或者想在DB2V8.2.2以后的版本里手工运行重组表,可以使用命令完成。手工重组可以使用REORG命令来完成。以脱机方式重组表是整理表碎片的最快方法。重组可减少表所需的空间量并提高数据访问和查询性能。必须具有SYSADM、SYSCTRL、SYSMAINT或DBADM权限,或者必须具有对表的CONTROL权限才能重组表。必须具有数据库连接才能重组表。标识需要重组的表之后,可以对这些表运行REORG实用程序,并且可以选择对在这些表上定义的任何索引运行该实用程序。REORGTABLE命令的语法如下:-REORGTABLE--table-name----+--------------------+------------'-INDEX--index-name--'-----+-----------------------+--------------------------------'-USE--tablespace-name--'执行REORG可以考虑分为表上有索引和没有索引两种情况:1)如果表上有索引如表名为DB2INST1.STAFF,索引名为DB2INST1.ISTAFF,命令如下:db2reorgtabledb2inst1.staffindexdb2inst1.istaffusetempspace1建议REORG时使用USE参数指定数据重排时使用