博客
关于我
oracle 延迟分段创建
阅读量:757 次
发布时间:2019-03-23

本文共 1885 字,大约阅读时间需要 6 分钟。

DEFERRED段创建的默认行为及其在数据库管理中的应用

在数据库管理中,段的创建方式是一个关键操作。DEFERRED段创建是默认的行为,它意味着当一个表被创建时,段不会立即为表中的大对象(如CLOB、BLOB)创建分配存储空间,而是稍后作为离线操作进行。这一机制在某些情况下能够节省资源,但在其他情况下可能会引发资源不足的问题。

支持DEFERRED段创建的数据库对象对大对象的存储管理提供了一种灵活性。例如,在大规模数据加载或批量处理操作中,DEFERRED段创建允许用户在完成数据加载后再为表中的大对象分配存储空间,从而避免在大数据量快速加载过程中占用过多内存。

在实际应用中,DEFERRED段创建涉及以下几个关键步骤:

  • 表的初始创建

    使用CREATE TABLE语句创建一个表,此时段并不会为表中的大对象(如CLOB)创建存储分配。例如:

    CREATE TABLE tab1 (    id NUMBER,    clob_data CLOB,    CONSTRAINT tab1_pk PRIMARY KEY (id)) SEGMENT CREATION DEFERREDLOB(clob_data) STORE AS SECUREFILE tab1_clob_data;

    这里使用了SEGMENT CREATION DEFERRED参数,告知数据库在表创建完成后为CLOB类型的列创建段。

  • 插入数据与验证

    在插入数据到表中时,数据库仍然不会为CLOB列分配存储空间。通过检查USER_SEGMENTS视图可以直接验证当前用户对象所拥有的段:

    SELECT segment_name, segment_type FROM user_segments;

    此时,segment_nameSYS_cmos01(或其他默认值),segment_typePRIVATE,表示段尚未为大对象分配存储空间。

  • 分区表段的创建

    在大规模数据存储管理中,SEGMENT CREATION DEFERRED参数尤其有用。例如,分区表的结构通过明确的分区规则提高数据库性能。以下是一个分区表的创建示例:

    CREATE TABLE tab1 (    id NUMBER,    part_key DATE,    clob_data CLOB,    CONSTRAINT tab1_pk PRIMARY KEY (id)) SEGMENT CREATION DEFERREDLOB(clob_data) STORE AS SECURefile tab1_clob_dataPARTITION BY RANGE (part_key) (    PARTITION part_1 VALUES LESS THAN (TO_DATE('01/01/2021', 'DD/MM/YYYY')) TABLESPACE lh,    PARTITION part_2 VALUES LESS THAN (MAXVALUE) TABLESPACE lh);

    该示例使用了SEGMENT CREATION DEFERRED参数,确保段在表创建完成后根据分区规则自动为每个分区分配存储空间。

  • 分区表段的管理

    在实际应用中,需要定期检查并管理分区表的段。可以通过以下查询来验证分区表的段配置:

    SELECT segment_name, segment_type, partition_name FROM user_segments;

    此时,segment_typeUSERpartition_name为各个分区的名称(如part_1part_2)。

  • 需要注意的是,SEGMENT CREATION DEFERRED为默认行为,意味着如果没有明确指定SEGMENT CREATION IMMEDIATE,数据库会以DEFERRED方式管理段的创建。为了强制为大对象分配存储空间,可以在CREATE TABLE中使用SEGMENT CREATION IMMEDIATE参数。

    在实际数据库管理操作中,如需要删除表或分区表,可以使用DROP TABLE语句,并结合PURGE选项彻底清除相关数据:

    DROP TABLE tab1 PURGE;

    通过灵活运用SEGMENT CREATION DEFERREDSEGMENT CREATION IMMEDIATE参数,管理员可以根据具体需求优化数据库性能和资源利用率。在实际应用中,建议定期监控和管理大对象的段,防止存储资源耗尽或性能瓶颈的出现。

    转载地址:http://nrbzk.baihongyu.com/

    你可能感兴趣的文章
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>