【TechTarget中国原创】问:我的一个Oracle 10g中的表里有57亿条记录,并分成了500个区。该表所占用的磁盘空间比我想象的要大得多。
我给每个具体分区查询dba_partitions并得到avg_row_len = 27和num_rows = 411482598。也就相当于10.34 GB (Select 411482598 * 27 / Power (1024,3) From Dual)。表中的列块为1653190,相当于大小为12.61 GB (Select 1653190 * 8192 / Power (1024,3) From Dual)。所以到目前为止,我还是很高兴的。
现在我用表名和分区名查询dba_segments,得到 bytes = 26549944320。相当于大小为24.73GB,这是在dba_partitions中的两倍。这是为什么?有没有办法解决这个问题?
答:记住分段是由一个或多个扩展区域组成。这些扩展区域都有具体的大小。我们假设扩展区域大小为1MB且我的表里有两行数据,平均每行有1KB。你计算出来的整个大小为2KB,但是DBA_SEGMENTS显示表大小为1MB。这是因为分段中的扩展区不可能小于一个。如果你想分配更小的磁盘空间,你就需要重新用更小的扩展区创建表。