Oracle中的延迟段创建(DEFERRED_SEGMENT_CREATION)

0    809    1

Tags:

👉 本文共约1870个字,系统预计阅读时间或需8分钟。

目录

    在Oracle 11.2中,当创建一个空表或者空分区时,为了加快创建速度,Oracle并不会立即分配初始段和空间,实际的表段(Table Segement)被延迟到第一行数据插入时创建。延迟段创建特性通过DEFERRED_SEGMENT_CREATION参数控制,默认为TRUE,表示开启该功能。延迟段创建可以节省空间,加快初始化过程,是面向性能和资源的一个优化。可以通过修改参数DEFERRED_SEGMENT_CREATION来关闭这个特性:

    该参数为动态参数,不需要重启数据库。可以通过如下的SQL语句找到所有的空表(未分配任何区的表):

    延迟段创建的限制条件有:

    ① 延迟段创建不支持的表类型包括:索引组织表(Index-Organized Tables)、簇表(Clustered Tables)、全局临时表(Global Temporary Tables)、会话级临时表(Session-Specific Temporary Tables)、内部表(Internal Tables)、Typed表(Typed Tables)、AQ表(AQ Tables)和外部表(External Tables)。

    ② 用户SYS、SYSTEM、PUBLIC、OUTLN和XDB下的表不支持延迟段创建。

    ③ 延迟段创建不支持位图连接索引(Bitmap Join Indexes)和域索引(Domain Indexes)。

    ④ 延迟段创建不支持字典管理表空间(Dictionary-Managed Tablespace,DMT)。

    ⑤ 延迟段创建不支持SYSTEM表空间。

    ⑥ 延迟段创建从Oracle 11.2.0.2版本开始才开始支持分区和子分区。

    在创建表的时候,当SEGEMENT CREATION为IMMEDIATE时,Oracle会为表建立段(SEGMENT),当SEGEMENT CREATION为DEFERRED时,Oracle不会为空表建立段,如下所示:

    可以看到,在SEGEMENT CREATION为IMMEDIATE的情况下,Oracle为T_TEST_2建立了段,在SEGEMENT CREATION为DEFERRED的情况下,Oracle没有为表T_TEST_3建立段,当向没有分配段的空表中插入信息时,Oracle会自动为空表建立段。需要注意的是,未分配任何区(EXTENT)的表,在DBA_SEGMENTS视图中是查不到的。若使用不加DROP ALL STROAGE的TRUNCATE语句,则分配的段只是缩小到最初分配的大小,并没有完全回收段,如下所示:

    本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
    AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
    验证码:
    获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

    标签:

    Avatar photo

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表回复