ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Extent参数问题

Oracle Extent参数问题

原创 Linux操作系统 作者:regonly1 时间:2011-12-23 11:49:41 0 删除 编辑
      昨天碰到一个很奇怪的问题,一个表,原先有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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-10

  • 博文量
    257
  • 访问量
    1070144