wuyanhui328 发表于 2014-03-03 10:51

关于informix表使用空间大小问题的求助

我想统计一下informix数据库中用户表使用空间的情况,我的思路是:

1、查询表的记录条数count。

2、查询表结构占用的字节数(systables中的rowsize)

3、用 count * rowsize / ( 1024 * 1024 *1024 ) 算出使用大小,单位G。

我的疑问是:
1、informix中定义的字段是char(100),实际是2个字符。那么这个字段在informix中实际占用多少空间?100字节还是2字节。
2、我的这个算法对吗?informix存储是按字节存储吗?

谢谢了,高手们。

liaosnet 发表于 2014-03-03 11:05

回复 1# wuyanhui328


    1,char(100)中只使用2字节,空间占有用是100字节。。
    2,计算空间使用率的话,建议使用number of data page.

wuyanhui328 发表于 2014-03-03 11:39

我是想计算表占用了多少G的数据库空间,有什么好的办法吗?

liaosnet 发表于 2014-03-03 15:58

回复 3# wuyanhui328


    建表,然后查看表的 Maximum row size ,再 乘以 行数,基本上就是表的大小了(这个值实际上会低于表的实际空间大小)。

3sane 发表于 2014-03-06 19:35

回复 1# wuyanhui328

我认为这只是理论占用的最少值。表空间按EXT_PAGE分配后,新增未必全部使用,而删除也不会及时释放。
当进行数据库迁移时,如果使用TXT/ASCII类型,整形释放出来可是多个CHAR长度。
保守计算用PAGE吧。


   

lansworld 发表于 2014-06-26 11:23

简单的道理,一个空表,如果你分配的first extent size 如果是1G,一个数据也没有的话也占用1G的存储空间,rowsize*rownum的方法只能是估算值。
计算表实际占用大小话,建议使用number of data page.select trim(c.name) tbs_name, trim(a.tabname),count(*) extent_num,sum(a.size*c.pagesize/1024)table_size
from sysmaster:sysextents a,sysmaster:syschunks b,sysmaster:sysdbspaces c
where a.chunk = b.chknum andb.dbsnum = c.dbsnum
and a.tabname = 'table_name'
group by 1,2 order by 4 desc;
页: [1]
查看完整版本: 关于informix表使用空间大小问题的求助