zoukankan      html  css  js  c++  java
  • Oracle数据库学习_Oracle分区表的分区占用空间为什么是8M?如何修改分区的初始空间?

    现象一描述:

    在oracle12c下创建一个分区表T_A_TRADING,新建一个分区P1,P1里没有任何纪录时,查user_segments表发现 PARTITION_name='P1'结果返回Null,说明此时P1是没有分配空间的。

    现象二描述:

    当给分区P1仅插入一条记录时,查user_segments表发现 PARTITION_name='P1'结果返回:

    segment_name  partition_name  (bytes/1024/1024)

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

    T_A_TRADING  P20200220     8

    发现这个分区占用的空间达到了8M,尽管只有一条记录。

    原因分析:

    上面两种现象的发生是由oracle12C的延迟段特性造成的,下面详细介绍一下这个特性的由来和用法。

    11gR2之前的版本中,当创建一张表时,会自动分配段空间。

    • 创建普通表时,每个分区默认占用空间大小为0.0625m(64k)。
    • 创建分区表时,每个分区默认占用空间大小为8M,是由_partition_large_extents参数控制,可以算是11.2.0.2开始的一个新特性,为了减少extent数量,提高分区表性能,而设置的一个参数,默认为true,即分区表的每个extent为8M。
    • 创建普通索引和分区索引的默认大小也是64k,由系统参数_index_partition_large_extents控制(true-开;false-关),默认为true。

    这样做有几个弊端:

    1. 初始创建表时就需要分配空间,自然会占用一些时间,如果初始化多张表,这种影响就被放大。

    2. 如果很多表开始的一段时间都不需要,那么就会浪费这些空间。

    3. 如果数据量较大,而且数据分布较为均匀,建议设置_partition_large_extents为true。

    为此,从11gR2开始,有一种新特性,叫延迟段,即延迟分配段空间。简单讲,默认将表(以及索引、LOB)的物理空间分配推迟到第一条记录插入到表中时。即有实际的数据插入表中时,再为每个对象初始化空间分配。延迟段是否开启由系统参数deferred_segment_creation决定(true-开;false-关)。

    修改分区初始空间的办法:

    一、可以通过修改这个系统参数来改变分区的初始空间。

    参数修改语句:

    alter system set "_parition_large_extents"=false scope = both

    有人指出,这个修改需要修改数据库的安装指导和统装脚本,然后再加上这个参数的修改才行。

    有位博主测试过这种方法,最后他发现_partition_large_extents参数确实是能够控制分区表的extent大小,链接:https://www.cnblogs.com/wcwen1990/p/6656545.html。

    我没有试过这种方法,感觉危险系数较高。。。

    二、指定分区表分区初始大小,参考非分区表的初始空间很小,为64K。

    create table t_testuser
    (
    operateid number(20) not null,
    logtime date default cast(current_timestamp at time zone '00:00' as date) not null
    )

    -- 创建分区
    partition by range(logtime)
    (
    partition beforedata values less than (to_date('2019-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')),
    partition P20190110 values less than (to_date('2019-01-10 00:00:00','yyyy-mm-dd hh24:mi:ss')),
    partition P20190115 values less than (to_date('2019-01-15 00:00:00','yyyy-mm-dd hh24:mi:ss')),
    partition P20190120 values less than (to_date('2019-01-20 00:00:00','yyyy-mm-dd hh24:mi:ss'))
    )
    tablespace ring  --一般方法建分区使用默认的初始空间8M,不用加后面的设置语句;
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
    );

  • 相关阅读:
    到具体某一天的倒计时
    angular2 2种方式----获取子组件的类属性和类方法
    页面刷新
    angular父子组件传值
    div垂直居中,文字垂直居中!!!
    Python 基础数据类型 II (列表)
    Python 基础数据类型 I (str等)
    学习笔记411
    20190407 Word合并单元格
    VBA正则笔记 理解肯定环视
  • 原文地址:https://www.cnblogs.com/tongying/p/13343497.html
Copyright © 2011-2022 走看看