Oracle Extent参数问题

      昨天碰到一个很奇怪的问题,一个表,原先有1000w+的数据。然后我做了truncate,检查后发现,仍然站了1g+的空间,再truncate了几次,还是没有变化。我以为是truncate了另外一个用户了,但是仔细一看,没错啊。一时急了,直接把表drop掉了。不过在drop之前,我先备份了表结构,重建总可以了吧。
      在重建的时候,我发现了问题的原因。原来这个表的initial达到了1g+,正好是查看的大小。难怪怎么截断都不行呢。于是将initial参数改为1m,minextents也改为1m,创建后占用空间就减少为1m了。
      所以,影响表占用空间大小的不仅仅只有数据,初始化参数也有非常大的影响力。如果Initial参数设置过大,则表的初始段也会变得非常大。浪费了大量的空间。
案例:
drop table aaa purge;
create table aaa(aa int) storage(initial 1m minextents 100000 next 100 maxextents unlimited pctincrease 0) tablespace zh;

查询其大小:
SQL> select segment_name, round(bytes/1024/1024, 4) "size(M)" from user_segments where segment_name = 'AAA';
/
 
SEGMENT_NAME                                                                        size(M)
-------------------------------------------------------------------------------- ----------
AAA                                                                                     784
 
具体Oracle还有更复杂的机制,等以后有时间可以深入研究一下。比如下面的情况:
drop table aaa purge;
create table aaa(aa int) storage(initial 1m minextents 10 next 10 maxextents unlimited pctincrease 0) tablespace zh;

查询发现:
SQL> select segment_name, bytes, blocks, extents from user_segments where segment_name = 'AAA';
 
SEGMENT_NAME                                            BYTES     BLOCKS    EXTENTS
------------------------------------------                    ---------- ---------- ----------
AAA                                                                     2097152        256          2
 
不是建表时指定的初始化参数,这是为何?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12932950/viewspace-713839/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12932950/viewspace-713839/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值