zoukankan      html  css  js  c++  java
  • db2 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的量。
  • 相关阅读:
    驱动编程杂谈
    mysql数据库之视图
    mysql编程
    添加内核编译选项
    内核编译遇到的一些问题
    jffs2和yaffs2文件系统
    宿主机挂载和使用嵌入式文件系统
    只读文件系统
    Makefile的简单编写
    UITableview delegate dataSource调用探究
  • 原文地址:https://www.cnblogs.com/dahaoran/p/9257779.html
Copyright © 2011-2022 走看看