db2中获取某个表/索引占用空间的大小

db2中获取某个表/索引占用空间的大小
    在数据库运维中,经常会遇到需要统计db2表大小的问题。在db2中提供了3种方法已供我们选择。分别为db2pd -tcbstats、admin_get_tab_info表函数和SYSIBMADM.ADMINTABINFO系统管理视图。
     1、db2pdde tcbstats可以查看表的tcb信息,其中datasize字段用来表示表的页数,乘以页大小即为表的大小。使用该方法时,只有该表被访问过才会显示出来。
     具体使用命令为db2pd -tcbstats。 
     
     2、Reorgchk结果中,npages代表页数,乘以页大小就是表的大小,但Reorgchk需要执行runstats,对于大表来说,需要的时间较长。

     3、SYSIBMADM.ADMINTABINFO管理视图,db2 9版本引入,可以获得表的大小和状态信息,以kb为计量单位。
      通过命令db2 describe table SYSIBMADM.ADMINTABINFO ,可以看到表的字段信息。
      通过命令
      SELECT (DATA_OBJECT_P_SIZE + INDEX_OBJECT_P_SIZE + LONG_OBJECT_P_SIZE +
              LOB_OBJECT_P_SIZE + XML_OBJECT_P_SIZE) AS TOTAL_P_SIZE
      FROM SYSIBMADM.ADMINTABINFO
      WHERE TABNAME = '表名' 统计表所占用的物理空间大小,包括数据、索引、大对象和xml空间大小。
      SYSIBMADM.ADMINTABINFO 中几个字段值得注意:DATA_OBJECT_L_SIZE和DATA_OBJECT_P_SIZE。其中DATA_OBJECT_L_SIZE代表表的逻辑大小(KB),DATA_OBJECT_P_SIZE为表的物理大小(KB)。逻辑大小和物理大小的差别是什么呢?想想一下,我们往某张表插入很多数据,然后删除一些数据,但表占据的空间并不会释放,当新的数据插入时,仍然会使用这些空间。实际占用的空间叫做逻辑空间,分配过的空间叫物理空间,逻辑空间可能会小于物理空间,这两者的差异可以通过reorg来消除。
    除此之外,SYSIBMADM.ADMINTABINFO视图提供了其他几个有用的字段,如REORG_PENDING,INPLACE_REORG_STATUS,LOAD_STATUS等,详细解释,请参看信息中心。

    4、admin_get_info表函数返回结果与SYSIBMADM.ADMINTABINFO管理视图类似。
     
    我统计使用的是SELECT TABNAME,SUM(DATA_OBJECT_P_SIZE)/1024 FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO('模式','表名')) AS T GROUP BY TABNAME;

    使用此语句,统计速度要比SYSIBMADM.ADMINTABINFO快很多。


db2查看表占磁盘空间大小

1、查看数据库页大小
db2 get db cfg
2、收集表状态信息
db2 runstats on table schema.table_name
3、查询数据表占用页的数量
select tabname, npages from syscat.tables where tabname = 'table_name'
4、计算表占用磁盘空间大小
表占用磁盘空间大小 = 数据页大小 * 页数量
查看表占磁盘空间大小:select tabname, npages*16384/(1024*1024) from syscat.tables where tabname = 'XXXXXX'

db2 v9以上查看表占磁盘逻辑空间大小:select sum(x.DATA_OBJECT_P_SIZE+x.INDEX_OBJECT_P_SIZE+x.LOB_OBJECT_P_SIZE+x.LONG_OBJECT_P_SIZE+x.XML_OBJECT_P_SIZE) from SYSIBMADM.ADMINTABINFO x where TABNAME='XXXXXXX';
select TABNAME,sum(x.DATA_OBJECT_P_SIZE+x.INDEX_OBJECT_P_SIZE+x.LOB_OBJECT_P_SIZE+x.LONG_OBJECT_P_SIZE+x.XML_OBJECT_P_SIZE) from SYSIBMADM.ADMINTABINFO x group by TABNAME;
db2 v9以上查看数据库占用空间大小:db2 "call SYSPROC.GET_DBSIZE_INFO(?,?,?,10)"

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值