统计的起因是ETL表空间使用了150G,老大觉得这个数量太大了,要揪出是哪些表的原因。开始觉得这个任务很简单,因为已经用过了一些系统表了,然而,到了操作间才发现,syscat.tables表里面根本就没有我想像中的size字段。问了好几个人都说不知道,也不奇怪,做为程序员很少使用这个表的。又不愿意跑回来问老大,也上不了网查资料,只好翻来覆去的看那些系统表。后来发现syscat.tables表中最有可能描绘大小的是NPAGES和FPAGES。后来下来搜索,果然,大小就是用NPAGES*PAGESIZE就可以了。只是,那时候还是没有明白这些含义。还好刚刚又找到了一点东西解决了困扰我一天的问题:
● CARD-指出表中数据行的数量
● NPAGES-指出包含数据的页面总量
● FPAGES-指出分配给这个表的页面总量
● OVERFLOW-指出溢出行的数量
当这些值为负1的时候,表示没有可用的统计信息。要更新统计信息,可以使用runstats工具:
runstats on table tablename with distribution and detailed indexes all
要使用RUNSTATS工具必须有以下权限之一:SYSADM,SYSCTRL,SYSMAINT,表上的DBADMCONTROL特权或者载入权限。RUNSTATS工具没有任何输出显示,只能查询系统编目表来看到它的结果。我没有使用这个工具,在没有授权的情况下怕对所有的表进行runstats会对系统性能造成影响,所以这次我统计的结果会有误差。
ETL表中NPAGES最大为1142144,在syscat.tablespaces中得知每页为8192,换算发现,最大的ETL占用空间大概在8.7G,前十个大小的表空间就占用了50G左右。而历史表空间占用更是大,最大的表是ETL的十倍。
阅读(4350) | 评论(0) | 转发(0) |