脱机reorg需要一定的空间,这个空间与目标所在的数据表空间、索引表空间、以及临时表空间均有关,各空间需求的大小与表和索引所占用的数据页和索引页相关。(1)执行reorg操作如: reorg table tabschema.tabname,可以理解成四个步骤:1、排序2、构建3、替换4、重建索引当执行第1,2,3步时,使用目标表所在的数据表空间,将在数据表空间中建立目标表的影子副本。此时,数据表空间会增长,增长量为目标表实际大小:Npages*表空间页大小。Npages:表示目标表有效数据页,Npages可通过如下方式获得,但未必精确,最好先收集一下统计信息(runstats)。db2 "select substr(tabname,1,20),Npages,Fpages,card from syscat.tables"1,2,3结束后,数据表空间碎片整理完成,空间回收。当执行第4步时,使用系统临时表空间,有几个索引顺序重建几次。此时,系统临时表空间会增长,增长量为单个索引占用的大小,约为:nleaf*索引表空间页大小。nleaf:表示有效索引页,nleaf可通过如下方式获得,但未必精确,最好先收集一下统计信息(runstats)。db2 "select substr(tabname,1,20),substr(indname,1,18),nleaf,indcard from syscat.indexes"4结束后,reorg table完成。(2)对索引执行reorg操作如:db2 reorg indexes all for table tabschema.tabname一般一张表有多个索引,将对多个索引一个一个地依次进行reorg操作,最后统一替换。表空间使用情况:系统临时表空间会增长,增长量为单个索引占用的大小,约为:nleaf*索引表空间页大小。索引表空间会增长,增长量为一张表中所有索引占用的大小。例如对一张表的3个索引进行reorg操作,可以看到如下现象:索引表空间立即降到一个值:A,系统临时表空间增长,增长"nleaf*索引表空间页大小"后下降至初始大小,同时索引表空间增长"nleaf*索引表空间页大小",系统临时表空间又增长,增长"nleaf*索引表空间页大小"后又下降至初始大小,同时索引表空间在第一次增长的基础上又增长"nleaf*索引表空间页大小",系统临时表空间再增长,增长"nleaf*索引表空间页大小"后再下降至初始大小,同时索引表空间再前两次增长的基础上再增长"nleaf*索引表空间页大小",最后,索引表空间直接降到一个值:A,系统临时表空间回收。(3)对表执行reorg操作如:db2 reorg table tabschema.tabname use tempspace1对表和索引均进行reorg操作均在系统临时表空间中进行先对数据页reorg,再对索引页reorg数据页reorg需要的系统临时表空间为:Npages*表空间页大小一般一张表有多个索引,索引reorg将一个一个依次顺序进行,单个索引的索引页reorg需要的系统临时表空间为:nleaf*索引表空间页大小(4)在线对表做reorg时,表空间使用非常少。一般为表空间的extent size(一般为32k),多个并发的话,就要多个extent size。知道reorg怎样使用表空间之后,我们在做reorg时就要注意各个空间是否预留足够,预留多少算足够呢?可以按一下方法推算:(1)离线不指定临时表空间reorg table(目前常用的)数据表空间预留最大Npages的量,最大的Npages*表空间页大小,最大的表对应的Npages可通过以下sql获得db2 "select substr(tabname,1,20),Npages,Fpages,card from syscat.tables order by Npages desc fetch first 10 rows only"临时表空间预留最大nleaf的量,最大的nleaf*表空间页大小,最大的索引对应的nleaf可通过以下sql获得db2 "select substr(tabname,1,20),substr(indname,1,18),nleaf,indcard from syscat.indexes order by nleaf desc fetch first 10 rows only"(2)reorg indexes all索引表空间预留单个表中含有的所有nleaf的量db2 "select substr(tabname,1,20),substr(indname,1,18),nleaf,indcard from syscat.indexes where tabname=''"临时表空间预留最大nleaf的量(3)离线指定临时表空间reorg table use tempspace临时表空间预留最大Npages的量和最大nleaf的量以上是一个时间点只对一张表进行reorg,但同一时间多张表并行reorg时,就要算多个表的空间了。建议,所有的数据表空间和索引表空间的使用量控制在50%以下,这样就不用担心数据和索引的表空间溢出了。对于临时表空间,建议至少有最大nleaf的量。