精华内容
下载资源
问答
  • 下面我分别对这四种分区方法的概念,他们的使用场景,以及各种分区方法做一个性能比较。一、概念1、Range Partitioning这是最常用的一种分区方法,基于COLUMN的值范围做分区,最常见的是基于时间字段的数据的范围的...

    下面我分别对这四种分区方法的概念,他们的使用场景,以及各种分区方法做一个性能比较。

    一、概念

    1、Range Partitioning

    这是最常用的一种分区方法,基于COLUMN的值范围做分区,最常见的是基于时间字段的数据的范围的分区,比如:对于SALE表,可以对销售时间按照月份做一个Range Partitioning。这种分区在数据仓库里用的比较多,以下是

    CREATE STATMENT

    CREATE TABLE sales_range

    (salesman_id NUMBER(5),

    salesman_name VARCHAR2(30),

    sales_amount NUMBER(10),

    sales_date DATE)

    COMPRESS

    PARTITION BY RANGE(sales_date)

    (PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')),

    PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')),

    PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')),

    PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY')));

    对于COMPRESS关键字的理解,将在后续的压缩分区讲到

    2、Hash Partitioning

    Hash Partitioning映射数据到基于HASH算法的分区上,HASH算法将应用你指定的分区关键字,平均的分那些在Partitions中的行。给每一个分区近似相同的大小,要保证数据能平均分配,分区数一般是2N。比如说,需要insert sales_hash 一条数据,ORACLE会通过HASH算法处理salesman_id,然后找到对于的分区表进行insert。Hash Partitioning 是为跨越设备的分布式数据提供了一种理想的方法,HASH算法也很容易转化成RANGE分区方法,特别是当被分区的数据不是历史数据时。

    CREATE TABLE sales_hash

    (salesman_id NUMBER(5),

    salesman_name VARCHAR2(30),

    sales_amount NUMBER(10),

    week_no NUMBER(2))

    PARTITION BY HASH(salesman_id)

    PARTITIONS 4;

    3、List Partitioning

    List Partitioning能够让你明确的控制有多少行被分区,你能对要分区的COLUMN上明确的指定按照那些具体的值来分区,这种方式在Range和Hash方式是做不到的。这种方式的优点是,你能组织和分组那些没有顺序和没有关系的数据集。下面是通过销售地区做一个List分区表。

    CREATE TABLE sales_list

    (salesman_id NUMBER(5),

    salesman_name VARCHAR2(30),

    sales_state VARCHAR2(20),

    sales_amount NUMBER(10),

    sales_date DATE)

    PARTITION BY LIST(sales_state)

    (PARTITION sales_west VALUES('California', 'Hawaii') COMPRESS,

    PARTITION sales_east VALUES('New York', 'Virginia', 'Florida'),

    PARTITION sales_central VALUES('Texas', 'Illinois'));

    4、Composite Partitioning

    Composite Partitioning 是把Range ,Hash ,List 分区方式组合起来的分区方式。

    比如Composite Range-Hash Partitioning和Composite Range-List Partitioning:

    CREATE TABLE sales_range_hash(

    s_productid NUMBER,

    s_saledate DATE,

    s_custid NUMBER,

    s_totalprice NUMBER)

    PARTITION BY RANGE (s_saledate)

    SUBPARTITION BY HASH (s_productid) SUBPARTITIONS 8

    (PARTITION sal99q1 VALUES LESS THAN (TO_DATE('01-APR-1999', 'DD-MON-YYYY')),

    PARTITION sal99q2 VALUES LESS THAN (TO_DATE('01-JUL-1999', 'DD-MON-YYYY')),

    PARTITION sal99q3 VALUES LESS THAN (TO_DATE('01-OCT-1999', 'DD-MON-YYYY')),

    PARTITION sal99q4 VALUES LESS THAN (TO_DATE('01-JAN-2000', 'DD-MON-YYYY')));

    另外你还可以用subpartition template的方式指定:

    CREATE TABLE sales_range_hash(

    s_productid NUMBER,

    s_saledate DATE,

    s_custid NUMBER,

    s_totalprice NUMBER)

    PARTITION BY RANGE (s_saledate)

    SUBPARTITION BY HASH (s_productid)

    SUBPARTITION TEMPLATE(

    SUBPARTITION sp1 TABLESPACE tbs1,

    SUBPARTITION sp2 TABLESPACE tbs2,

    SUBPARTITION sp3 TABLESPACE tbs3,

    SUBPARTITION sp4 TABLESPACE tbs4,

    SUBPARTITION sp5 TABLESPACE tbs5,

    SUBPARTITION sp6 TABLESPACE tbs6,

    SUBPARTITION sp7 TABLESPACE tbs7,

    SUBPARTITION sp8 TABLESPACE tbs8)

    (PARTITION sal99q1 VALUES LESS THAN (TO_DATE('01-APR-1999', 'DD-MON-YYYY')),

    PARTITION sal99q2 VALUES LESS THAN (TO_DATE('01-JUL-1999', 'DD-MON-YYYY')),

    PARTITION sal99q3 VALUES LESS THAN (TO_DATE('01-OCT-1999', 'DD-MON-YYYY')),

    PARTITION sal99q4 VALUES LESS THAN (TO_DATE('01-JAN-2000', 'DD-MON-YYYY')));

    这样,没有子分区通过的HASH分区将会统一到不同的表空间。

    二、使用各种分区方法的场景

    1、什么时候用Range Partition

    Range Partition是一种方便的方法分区历史的数据,经常在DATE COLMUN通过时间间隔组织数据。比如说:你要查询2009年8月的数据,查询将直接找到2009年8月的分区,避免了大量不必要的数据扫描。

    在处理周期性的load新数据和purge老数据的时候,Range Partition也是一个理想的选择。

    应用场景:

    a)有一个大表需要通过时间字段频繁的访问,通过这个时间字段做RANG PARTITION 有利于做分区裁剪。

    b)如果你不能对一个大表在指定的时间内做备份或RESTORE,你可以通过RANGE把他们分成小的logic片来做。

    2、什么时候用HASH Partition

    HASH Partition不是一个很好的管理历史的方法。

    应用场景

    a)增加大表的可用性。

    b)避免各个分区之间查找数据,并且各个分区可以放在不同的设备上,达到最大的I0吞吐量。也可以用STORE IN 子句分配每个分区到不同的表空间。

    3、什么时候用LIST Partition

    如果你想映射数据到离散的值的时候,LIST Partition是个比较好的选择。

    4、什么时候用Composite Range-Hash Partitioning

    这是Range和Hash的组合使用,先对表用RANGE分,然后对每个RANGE再做HASH分区。

    由于做了RANGE后的子分区是没有规律的,如果在数据仓库设计时候,通过查询需求觉得有必要再细分,可以考虑使用。ORACLE会把子分区又分成不同的SEGMENT。

    展开全文
  • 除了分区HU130602已经压缩,其他分区压缩都比较大 0.005065918 HU HU130602 0.004882813 HU1 HU130602 0.963855514 0.004882813 HU HU130603 0.002929688 HU1 HU130603 0.600000041 0.00390625 HU ...

    SQL> select sum(bytes)/1024/1024/1024,segment_name,PARTITION_NAME from user_segments

    2  where PARTITION_NAME like 'HU1306%' or PARTITION_NAME like 'REN1306%'

    3  group by segment_name,PARTITION_NAME order by 2,3;

    除了分区HU130602已经压缩,其他分区的压缩都比较大

    0.005065918        HU        HU130602                0.004882813        HU1        HU130602        0.963855514

    0.004882813        HU        HU130603                0.002929688        HU1        HU130603        0.600000041

    0.00390625        HU        HU130604                0.002929688        HU1        HU130604        0.750000128

    0.006835938        HU        HU130621                0.004882813        HU1        HU130621        0.714285735

    0.009765625        HU        HU130622                0.006835938        HU1        HU130622        0.700000051

    0.005859375        HU        HU130623                0.00390625        HU1        HU130623        0.666666667

    0.00390625        HU        HU130624                0.002929688        HU1        HU130624        0.750000128

    0.008789063        HU        HU130625                0.006835938        HU1        HU130625        0.77777779

    0.0078125        HU        HU130626                0.005859375        HU1        HU130626        0.75

    0.0078125        HU        HU130627                0.005859375        HU1        HU130627        0.75

    0.004882813        HU        HU130628                0.00390625        HU1        HU130628        0.799999918

    0.00390625        HU        HU130629                0.002929688        HU1        HU130629        0.750000128

    0.004882813        HU        HU130630                0.00390625        HU1        HU130630        0.799999918

    0.00390625        HU        HU130631                0.002929688        HU1        HU130631        0.750000128

    0.006835938        HU        HU130632                0.004882813        HU1        HU130632        0.714285735

    0.008789063        HU        HU130633                0.006835938        HU1        HU130633        0.77777779

    0.0078125        HU        HU130634                0.005859375        HU1        HU130634        0.75

    0.006835938        HU        HU130635                0.004882813        HU1        HU130635        0.714285735

    0.004882813        HU        HU130636                0.00390625        HU1        HU130636        0.799999918

    0.00390625        HU        HU130637                0.002929688        HU1        HU130637        0.750000128

    0.004882813        HU        HU130638                0.00390625        HU1        HU130638        0.799999918

    0.008789063        HU        HU130681                0.006835938        HU1        HU130681        0.77777779

    0.015625        HU        HU130682                0.01171875        HU1        HU130682        0.75

    0.005859375        HU        HU130683                0.004882813        HU1        HU130683        0.833333419

    0.0078125        HU        HU130684                0.005859375        HU1        HU130684        0.75

    展开全文
  • Oracle数据库分区压缩技术应用——让Oracle跑得更快.pdf
  • 2、子分区压缩 3、查看分区索引状态 4、重建对应分区赛索引 1、查看全部分区大小 查看ALM_FLOW的分区大小 t.BYTES/1024/1024(单位:M) SELECT t.segment_name,t.partition_name,t.BYTES/1024/1024 FROM USER_...

    文档结构如下:
    1、 查看全部分区大小
    2、子分区压缩
    3、查看分区索引状态
    4、重建对应分区赛索引
    5、分区的日常操作

    1、查看全部分区大小
    查看ALM_FLOW的分区大小 t.BYTES/1024/1024(单位:M)

    SELECT t.segment_name,t.partition_name,t.BYTES/1024/1024 FROM USER_SEGMENTS T WHERE T.segment_name='ALM_FLOW' ORDER BY T.partition_name
    

    在这里插入图片描述
    2、子分区压缩

    alter table ALM_FLOW move subpartition AF_P_201910_S1 compress parallel 8
    alter table ALM_FLOW move subpartition AF_P_201910_S2 compress parallel 8 
    alter table ALM_FLOW move subpartition AF_P_201910_S3 compress parallel 8 
    alter table ALM_FLOW move subpartition AF_P_201910_S4 compress parallel 8 
    alter table ALM_FLOW move subpartition AF_P_201910_S5 compress parallel 8 
    alter table ALM_FLOW move subpartition AF_P_201910_S6 compress parallel 8 
    alter table ALM_FLOW move subpartition AF_P_201910_S7 compress parallel 8 
    alter table ALM_FLOW move subpartition AF_P_201910_S8 compress parallel 8
    

    3、查看分区索引状态 b.subpartition_name,为子分区名称

    select b.index_name, b.partition_name, b.subpartition_name,b.status from user_ind_subpartitions b where b.index_name in ('IDX_ALM_FLOW','IDX_ALM_FLOW_TELLER','IDX_ALM_FLOW_TRAN_DT') and status<>'USABLE' order by 1,2
    

    在这里插入图片描述

    4、重建对应分区赛索引 IDX_ALM_FLOW(已经重建)

    alter index IDX_ALM_FLOW rebuild subpartition AF_P_201910_S5   parallel 8 online
    alter index IDX_ALM_FLOW_TELLER rebuild subpartition AF_P_201910_S5   parallel 8 online
    alter index IDX_ALM_FLOW_TRAN_DT rebuild subpartition AF_P_201910_S5   parallel 8 online
    

    5、分区的日常操作
    (1)查看数据库所有分区表

    select * from user_tables t where partitoned = 'YES';
    

    (2)查看a_tab表分区详情

    select * from user_tab_partitions t where table_name= 'a_tab';
    

    (3)a_tab表添加“TAB_P20_1”分区

    ALTER TABLE a_tab add PARTITION TAB_P20_1 values  less than('2021-03-31');
    

    (4)a_tab表删除“TAB_P20_1”分区

    ALTER TABLE a_tab drop PARTITION TAB_P20_1 ;
    

    (5)其他

    添加分区 – 在最后一个分区之后添加新分区
    
    ALTER TABLE SALES ADD PARTITION P4 VALUES LESS THAN (4000);
    删除分区 – 删除一个指定的分区,分区的数据也随之删除
    
    ALTER TABLE SALES DROP PARTITION P4;
    截断分区 – 删除指定分区中的所有记录
    
    ALTER TABLE SALES TRUNCATE PARTITION P3;
    合并分区 - 将范围分区或复合分区的两个相邻分区连接起来
    
    ALTER TABLE SALES MERGE PARTITIONS S1, S2 INTO PARTITION S2;
    拆分分区 - 将一个大分区中的记录拆分到两个分区中
    
    ALTER TABLE SALES SPLIT PARTITION P2 AT (1500)INTO (PARTITION P21, PARTITION P22);
    
    展开全文
  • oracle中把分区表做成压缩

    千次阅读 2018-03-21 16:55:46
    alter table HH_FTP_RST_RPT move partition P20180323 compress for oltp;为什么我在执行这句话的时候ORA-14257: 不能移动范围, 列表, 系统或散列分区以外的分区报这个错误了呢。...

    alter table HH_FTP_RST_RPT move partition P20180323 compress for oltp;

    为什么我在执行这句话的时候

    ORA-14257: 不能移动范围, 列表, 系统或散列分区以外的分区

    报这个错误了呢。

    展开全文
  •  在建立表与子分区时候每个表与子分区都带上compress选项即可  如果是insert 操作,那么必须是append hint才支持压缩,否则即使有上面参数也没效果  压缩比根据内容差异大,大约(2:1) ...
  • ORACLE分区表、分区索引
  • ORACLE分区表、分区索引ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在那个分区或那几个内部,然后在...
  • Oracle9iR2 开始,ORACLE提供了表/表空间压缩技术,以减少磁盘开销,节省空间,并在某些情况下提高查询性能。 表压缩是如何工作的在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间...
  • oracle数据库和分区

    千次阅读 2013-12-30 16:49:11
    Oracle数据完整性和锁机制  索引及优化之表分析  表分析、约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区3  海量数据库及分区4  高级...
  • Oracle分区

    2017-03-30 16:26:48
    oracle分区说明
  • 深入学习Oracle分区表及分区索引

    千次阅读 2018-07-09 15:41:11
    转载于:http://www.blogjava.net/rabbit/archive/2013/01/08/393955.html深入学习Oracle分区表及分区索引 关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类:• ...
  • Oracle压缩黑科技(一)--基础表压缩

    千次阅读 2017-12-21 16:34:23
    在关于Oracle压缩的这一系列文章中,我们会研究下传统Oracle数据库系统的各类压缩方式,这意味着该系列文章的目录结构大概是:1. 基础表压缩 2. OLTP表压缩 3. 索引压缩。但是,不讨论Exadat
  • Oracle 11g数据库的分区表扩展(按年度)一般一张表超过2G的大小,Oracle推荐使用分区表。oracle 11g支持自动分区,也可按年度、季度、月份手动扩展分区。有一张分区表定义如下,需扩展2020年分区。CREATE TABLE US_...
  • ORACLE分区表、分区索引ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数据过程都是先定位根据查询条件定位分区范围,即数据在那个分区或那几个内部,然后在...
  • ORACLE分区表、分区索引ORACLE对于分区表方式其实就是将表分段存储,一般普通表格是一个段存储,而分区表会分成多个段,所以查找数据过程都是 先定位根据查询条件定位分区范围,即数据在那个分区或那几个内部,然后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,638
精华内容 8,255
关键字:

oracle压缩存在的分区