问:我的一个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中国
问:我的一个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。这是因为分段中的扩展区不可能小于一个。如果你想分配更小的磁盘空间,你就需要重新用更小的扩展区创建表。
作者
Techtarget旗下Searchoracle网站的资深专家,有16年IT行业经验、计算机科学硕士、专攻数据库方向,曾担任系统管理员等职。此外,他还获Oracle 7.3、8和8i的OCP数据库管理员证书,目前为SGT Inc.公司首席DBA。
翻译
相关推荐
-
Oracle的备份与恢复(下)
热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成……
-
Oracle的备份与恢复(上)
当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(包括机器故障、介质故障、误操作等),数据库有时也可能遭到破坏……
-
Oracle 11g:备份与恢复的设计理念(上)
可能数据库管理员最重要的工作内容是确保数据库不丢失数据。Redo和undo机制保证了无论DBA(数据库管理员)做了什么,或没做什么,都不可能破坏数据库,(当然,我们假定没有物理损坏)……
-
Oracle 11g:备份与恢复的设计理念(下)
出现存储空间管理问题DBA该怎样处理?存储空间管理问题从来不应该出现,但却经常出现。优秀的DBA会提前监视空间使用量,并在出现问题之前采取措施……