LMT下extent的分配

如果表空间存在多个数据文件,那么extent在扩展的时候是如何决定在那个extent文件分配空间的呢?


下面做一个试验来说明这个问题:
本实验以本地管理的表空间为例。

--建立系统管理的本地表空间
SQL> create tablespace tbs_system datafile 'E:ORACLEORADATAORACLE9Itbs_system01.dbf' size 2112k,'E:ORACLEORADATAORACLE9Itbs_system02.dbf' size 2112k,'E:ORACLEORADATAORACLE9Itbs_system03.dbf' size 2112k,'E:ORACLEORADATAORACLE9Itbs_system04.dbf' size 2112k;

Tablespace created

--建立统一尺寸的本地表空间
SQL> create tablespace tbs_uniform datafile 'E:ORACLEORADATAORACLE9Itbs_uniform01.dbf' size 2112k,'E:ORACLEORADATAORACLE9Itbs_uniform02.dbf' size 2112k,'E:ORACLEORADATAORACLE9Itbs_uniform03.dbf' size 2112k,'E:ORACLEORADATAORACLE9Itbs_uniform04.dbf' size 2112k uniform size 64k;

Tablespace created

--建立一个基于系统管理表空间的表
SQL> create table t_system tablespace tbs_system as select * from item where rownum<15000;

Table created

SQL> select extent_id,blocks ,file_id from dba_extents where segment_name='T_SYSTEM';

EXTENT_ID BLOCKS FILE_ID
---------- ---------- ----------
0 8 10
1 8 10
2 8 10
3 8 10
4 8 10
5 8 10
6 8 10
7 8 10
8 8 10
9 8 10
10 8 10
11 8 10
12 8 10
13 8 10
14 8 10
15 8 10
16 128 11
17 128 12
18 128 13
19 128 10

EXTENT_ID BLOCKS FILE_ID
---------- ---------- ----------
20 128 11
21 128 12

22 rows selected

--从查询结果可以看出,在前16个extent前(每个extent大小是64k),extent都在同一个数据文件中;从17个extent(1m)开始,extent在同一个表空间的数据文件中循环分配。

--建立基于统一尺寸本地表空间的表
SQL> create table t_uniform tablespace tbs_uniform as select * from item where rownum<15000;

Table created

SQL> select extent_id,blocks ,file_id from dba_extents where segment_name='T_UNIFORM';

EXTENT_ID BLOCKS FILE_ID
---------- ---------- ----------
0 8 14
1 8 15
2 8 16
3 8 17
4 8 14
5 8 15
6 8 16
7 8 17
8 8 14
9 8 15
10 8 16
11 8 17
12 8 14
13 8 15
14 8 16
15 8 17
16 8 14
17 8 15
18 8 16
19 8 17

EXTENT_ID BLOCKS FILE_ID
---------- ---------- ----------
20 8 14
21 8 15
22 8 16
23 8 17
24 8 14
25 8 15
26 8 16
27 8 17
28 8 14
29 8 15
30 8 16
31 8 17
32 8 14
33 8 15
34 8 16
35 8 17
36 8 14
37 8 15
38 8 16
39 8 17
40 8 14
--从以上查询结果可以看出,在统一尺寸的表空间下,extent从一开始就在同一表空间下的各个数据文件中循环扩展。

经过测试,在DMT下,oracle在数据文件中扩展extent时也是趋于循环的。
我们可以利用oracle的这一特性,不用分区、不用在操作系统级做条带化,只需要在建立表空间时多添加几个数据文件(各个数据文件位于不同的磁盘中),就可以实现简单的条带化。

总结:
如果一个表空间存在多个数据文件,且多个数据文件都有可用的空间,则
1、如果是系统管理的本地表空间,为了使所有小区在一起,以避免在需要文件中分配大量小区而导致在删除对象时而产生的碎片,oracle会把对象的前16个extent(64k)都分配在同一个数据文件中;从第17个extent开始才循环在同一个表空间的各个数据文件中扩展。
2、如果是统一尺寸的本地管理表空间,则不用担心碎片问题,extent从一开始就在多个数据文件中循环分配。

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

转载于:http://blog.itpub.net/231499/viewspace-63747/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值