您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

Oracle 11gR2的延迟段功能

2024/4/16 18:34:10发布5次查看
为此,从11gr2开始,有一种新特性,叫延迟段,即延迟分配段空间。简单讲,默认将表(以及索引、lob)的物理空间分配推迟到第一条记
11gr2之前的版本中,当创建一张表时,会自动分配段空间,这样做有几个弊端:
1. 初始创建表时就需要分配空间,自然会占用一些时间,,如果初始化多张表,这种影响就被放大。
2. 如果很多表开始的一段时间都不需要,那么就会浪费这些空间。
注:使用特性的前提是compatible参数是11.2.0及以上。
实验:
1. 首先我们看下11g之前版本对表空间时段空间的分配:
sql> select version from v$instance;
version
-----------------
10.2.0.4.0
sql> create table tbl_seg(reg_id number, reg_name varchar2(200));
table created.
sql> select count(*) from user_segments where segment_name='tbl_seg';
count(*)
----------
1
sql> select count(*) from user_extents where segment_name='tbl_seg';
count(*)
----------
1
sql> select segment_name, segment_type, bytes, blocks, extents, initial_extent, next_extent, max_extents
2 from user_segments where segment_name='tbl_seg';
segment_name segment_type bytes blocks extents initial_extent next_extent max_extents
----------------------------- ---------- ---------- ---------- -------------- ----------- --------------------- ----------------- ------------------
tbl_seg table 65536 8 1 65536 2147483645
可以看到,tbl_seg表创建后,user_segments和user_extents已经有记录了,说明已经为tbl_seg分配了段和区的空间。1个extents的大小是64k。
2、接下来看下11g的分配:
[oracle@riserver1 ~]$ sqlplus / as sysdba
sql*plus: release 11.2.0.1.0 production on mon aug 4 07:53:24 2014
copyright (c) 1982, 2009, oracle. all rights reserved.
connected to:
oracle database 11g enterprise edition release 11.2.0.1.0 - 64bit production
with the partitioning, olap, data mining and real application testing options
sql> select version from v$instance;
version
-----------------
11.2.0.1.0
sql> create table tbl_seg(reg_id number, reg_name varchar2(200));
table created.
sql> select count(*) from user_segments where segment_name='tbl_seg';
count(*)
----------
1
sql> select count(*) from user_extents where segment_name='tbl_seg';
count(*)
----------
1
为什么仍分配了呢?
那么接下来使用非系统账户建表:
sql> create user user01 identified by user01;
user created.
sql> grant connect, resource to user01;
grant succeeded.
[oracle@riserver1 ~]$ sqlplus user01/user01
sql*plus: release 11.2.0.1.0 production on mon aug 4 08:32:06 2014
copyright (c) 1982, 2009, oracle. all rights reserved.
connected to:
oracle database 11g enterprise edition release 11.2.0.1.0 - 64bit production
with the partitioning, olap, data mining and real application testing options
sql> show user
user is user01
sql> select username,default_tablespace from user_users;
username default_tablespace
------------------------------ ------------------------------
user01 users
sql> create table tbl_seg(reg_id number, reg_name varchar2(200));
table created.
sql> select count(*) from user_segments where segment_name='tbl_seg';
count(*)
----------
0
sql> select count(*) from user_extents where segment_name='tbl_seg';
count(*)
----------
0
此时可以看到创建表后,段和区是没有分配空间的,那么插入记录: 
sql> insert into tbl_seg values(1, 'brdstn');
1 row created.
sql> select count(*) from user_segments where segment_name='tbl_seg';
count(*)
----------
1
sql> select count(*) from user_extents where segment_name='tbl_seg';
count(*)
----------
1
可以看到段和区已经分配了空间,user_segments和user_extents表均有了tbl_seg对应的记录。
3. 禁用延迟段:
可以禁用延迟段,是否使用延迟段是由deferred_segment_creation参数定义的,该参数可以在会话级别修改,如果想彻底删除延迟段,可以在spfile中修改,本次以及下次启动后就会一直生效了,例如:
sql> alter session set deferred_segment_creation=false;
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录