ITPub博客

首页 > Linux操作系统 > Linux操作系统 > talbespace之extent

talbespace之extent

原创 Linux操作系统 作者:lelepapa 时间:2011-11-06 00:07:53 0 删除 编辑

oracle自动管理的extent的时候,一般一个表如果小于1M,则extent大小为8blocks,如果表的大小大于1M小于64M的时候extent将会变为128blocks 也就是1M。如果表的大小大于64M的时候,oracle分配的extent将会是1024blocks也就是8M;这个可以做个试验得到

SQL> create table t as select * from dba_objects;

表已创建。
SQL> select bytes,blocks from dba_extents where segment_name='T';

     BYTES     BLOCKS
---------- ----------
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8

     BYTES     BLOCKS
---------- ----------
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128

已选择21行。

前16个extent大小均为64K,证明小于1M时候都是按照8block进行分配的。

我们继续插入数据得到

SQL> insert into t select * from t;

已创建394344行。

SQL> select bytes,blocks from dba_extents where segment_name='T';

     BYTES     BLOCKS
---------- ----------
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8

     BYTES     BLOCKS
---------- ----------
     65536          8
     65536          8
     65536          8
     65536          8
     65536          8
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128

     BYTES     BLOCKS
---------- ----------
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128

     BYTES     BLOCKS
---------- ----------
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128

     BYTES     BLOCKS
---------- ----------
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128

     BYTES     BLOCKS
---------- ----------
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128

     BYTES     BLOCKS
---------- ----------
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128
   1048576        128

     BYTES     BLOCKS
---------- ----------
   1048576        128
   1048576        128
   8388608       1024
   8388608       1024
   8388608       1024

已选择82行。

可以看到如果表大于64M的话,分配extent则是按照1024block,也就是8M进行分配的

这样的话如果一个表空间还有空间,但是没有8M连续空间的话,则不能进行分配空间给这样的表。

以上都是因为tablespace的属性allocate为system。我们可以指定uniform来让oracle根据我们的要求进行extent分配

SQL> create tablespace test1 datafile 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TES
T01.dbf' size 10M uniform;

表空间已创建。

SQL> create table tt tablespace test1 as select * from dba_objects where 1<0;

表已创建。

---我们可以看到uniform的默认值也就是extent的大小为128blocks也就是1M;

SQL> select bytes,blocks from dba_extents where segment_name='TT' and wner='TE
T';

     BYTES     BLOCKS
---------- ----------
   1048576        128

当然我们还可以指定uniform的大小。不过一旦这个指定了之后貌似不能修改

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

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

注册时间:2011-10-26

  • 博文量
    11
  • 访问量
    14001