设为首页收藏本站language 语言切换
查看: 2465|回复: 3
收起左侧

[注意] 【延迟段创建】Oracle 11gR2的延迟段创建(deferred segment creation)特性

[复制链接]
发表于 2012-2-20 18:23:13 | 显示全部楼层 |阅读模式
Oracle 11gR2的延迟段创建(deferred segment creation)特性是当我们创建数据库
段时,比如创建一张表,将不再预先分配初始化区,即不对新创建的段分配空间,这个特性一方面提高了性能,更重要的是降低了数据库的开销。


  以创建表为例给出此特性的特点。


1.确认数据库版本

sys@ora11g> select * from v$version;


BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production


2.以普通用户登录清理环境

sys@ora11g> conn sec/sec

Connected.

sec@ora11g> drop table t purge;


Table dropped.


3.创建空表T

sec@ora11g> create table t as select * from dba_objects where 0=1;


Table created.


4.通过查看执行计划观察延迟段创建特性

1)防干扰,预先执行第一遍

sec@ora11g> select * from t;


no rows selected


2)开启AUTOTRACE对SQL执行的统计信息跟踪

sec@ora11g> set autot trace stat


3)查看稳定的执行计划统计信息结果

sec@ora11g> select * from t;


no rows selected



Statistics

----------------------------------------------------------

          0  recursive calls

          0  db block gets

          0  consistent gets

          0  physical reads

          0  redo size

       1183  bytes sent via SQL*Net to client

        409  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          0  rows processed


神奇的效果出现了,可见,此时“consistent gets”显示为“0”,表明在扫描T表的过程中没有扫描到任何块。在早期版本中新表创建后会初始化分配一个数据块,执行计划中“consistent gets”一般会显示为“3”。

可见此时的T表创建成功后并没有分配初始化的存储空间,即验证了延迟段创建特性。


5.通过查看区分配情况观察延迟段创建特性

sec@ora11g> set autot off

sec@ora11g> select extent_id,bytes,blocks from user_extents where segment_name = 'T';


no rows selected


可见此时T表没有分配任何区。


6.测试初始化数据后的效果

sec@ora11g> insert into t select * from dba_objects where rownum=1;


1 row created.


sec@ora11g> rollback;


Rollback complete.


sec@ora11g> select extent_id,bytes,blocks from user_extents where segment_name = 'T';


EXTENT_ID      BYTES     BLOCKS

---------- ---------- ----------

         0      65536          8


可见,此时即便初始化的数据被回滚,T表也同样被初始化完毕。

表明,只有在第一次使用表T的时候,空间才给初始化完成。


7.同样过程与早期Oracle版本行为对比

这里以Oracle 10gR2为例进行演示。

1)确认版本

sys@ora10g> select * from v$version;


BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE    10.2.0.1.0      Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production


2)同样方法创建T表

sys@ora10g> conn sec/sec

Connected.

sec@ora10g> drop table t purge;


Table dropped.


sec@ora10g> create table t as select * from dba_objects where 0=1;


Table created.


3)开启AUTOTRACE功能,查看执行计划统计信息

sec@ora10g> select * from t;


no rows selected


sec@ora10g> set autot trace stat

sec@ora10g> select * from t;


no rows selected



Statistics

----------------------------------------------------------

          0  recursive calls

          0  db block gets

          3  consistent gets

          0  physical reads

          0  redo size

        995  bytes sent via SQL*Net to client

        370  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          0  rows processed


此时“consistent gets”值为“3”。表明在创建表T的同时空间已被初始化。


4)查看T表区的分配情况

sec@ora10g> set autot off;

sec@ora10g> select extent_id,bytes,blocks from user_extents where segment_name = 'T';


EXTENT_ID      BYTES     BLOCKS

---------- ---------- ----------

         0      65536          8


可见,T表的初始化区已经被分配。


8.小结

  Oracle 11gR2的延迟段创建(deferred segment creation)特性是Oracle向着更简单,更完美进化的体现,降低不必要的开销是根本。


Good luck.


secooler


-- The End --

发表于 2012-6-22 00:13:06 | 显示全部楼层
我绝对支持您,今日强帖
沙发 2012-6-22 00:13:06 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-1-24 19:07:01 | 显示全部楼层
呵呵
板凳 2013-1-24 19:07:01 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-3-5 15:43:16 | 显示全部楼层
看帖子的要发表下看法
地板 2013-3-5 15:43:16 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-3 07:00 , Processed in 0.062631 second(s), 12 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表