reorg到底需要多少表空间(转)
Posted dahaoran
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了reorg到底需要多少表空间(转)相关的知识,希望对你有一定的参考价值。
脱机reorg需要一定的空间,这个空间与目标所在的数据表空间、索引表空间、以及临时表空间均有关,各空间需求的大小与表和索引所占用的数据页和索引页相关。 (1)对表执行reorg操作如:db2 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的量。
以上是关于reorg到底需要多少表空间(转)的主要内容,如果未能解决你的问题,请参考以下文章