怎样用Oracle表扩展区分配更小磁盘空间

日期: 2009-03-05 作者:Brian Peasland翻译:April 来源: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)。所以到目前为止,我还是很高兴的。   现在我用表名和分区名……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

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。这是因为分段中的扩展区不可能小于一个。如果你想分配更小的磁盘空间,你就需要重新用更小的扩展区创建表。

作者

Brian Peasland
Brian Peasland

Techtarget旗下Searchoracle网站的资深专家,有16年IT行业经验、计算机科学硕士、专攻数据库方向,曾担任系统管理员等职。此外,他还获Oracle 7.3、8和8i的OCP数据库管理员证书,目前为SGT Inc.公司首席DBA。

翻译

April
April

相关推荐

  • Oracle的备份与恢复(下)

    热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成……

  • Oracle的备份与恢复(上)

    当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误操作等),数据库有时也可能遭到破坏……

  • Oracle 11g:备份与恢复的设计理念(下)

    出现存储空间管理问题DBA该怎样处理?存储空间管理问题从来不应该出现,但却经常出现。优秀的DBA会提前监视空间使用量,并在出现问题之前采取措施……

  • Oracle 11g:备份与恢复的设计理念(上)

    可能数据库管理员最重要的工作内容是确保数据库不丢失数据。Redo和undo机制保证了无论DBA(数据库管理员)做了什么,或没做什么,都不可能破坏数据库,(当然,我们假定没有物理损坏)……