zoukankan      html  css  js  c++  java
  • Oracle压缩总结2— 估计表压缩效应

    使用压缩前,我们可以估算压缩能有多大效果。



    11gr2我已经能够使用dbms_comp_advisor,具体代码见附件。只需要运行两个文件dbmscomp.sql和prvtcomp.plb。然后使用DBMS_COMP_ADVISOR.getratio存储过程就可以。不再具体描写叙述。


    SQL> set serveroutput on
    SQL> execdbms_comp_advisor.getratio('SH','SALES',10)
    Sampling table: SH.SALES
    Sampling percentage: 10%
    Estimated compression ratio for the advancedcompression option is : 2.96

    11gr2以后系统会自带一个dbms_compression的包,用来取代dbms_comp_advisor提供服务。

     

    _sys@FAKE> desc dbms_compression
    PROCEDURE GET_COMPRESSION_RATIO
     ArgumentName                  Type                    In/Out Default?
     ----------------------------------------------------- ------ --------
     SCRATCHTBSNAME                 VARCHAR2                IN
     OWNNAME                        VARCHAR2                IN
     TABNAME                        VARCHAR2                IN
     PARTNAME                       VARCHAR2                IN
     COMPTYPE                       NUMBER                  IN
     BLKCNT_CMP                     BINARY_INTEGER          OUT
     BLKCNT_UNCMP                   BINARY_INTEGER          OUT
     ROW_CMP                        BINARY_INTEGER          OUT
     ROW_UNCMP                      BINARY_INTEGER          OUT
     CMP_RATIO                      NUMBER                  OUT
     COMPTYPE_STR                   VARCHAR2                OUT
     SUBSET_NUMROWS                 NUMBER                  IN     DEFAULT
    FUNCTION GET_COMPRESSION_TYPE RETURNS NUMBER
     ArgumentName                  Type                    In/Out Default?
     ----------------------------------------------------- ------ --------
     OWNNAME                        VARCHAR2                IN
     TABNAME                        VARCHAR2                IN
     ROW_ID                         ROWID                   IN
    PROCEDURE INCREMENTAL_COMPRESS
     ArgumentName                  Type                    In/Out Default?
     ----------------------------------------------------- ------ --------
     OWNNAME                        VARCHAR2(30)            IN
     TABNAME                        VARCHAR2(128)           IN
     PARTNAME                       VARCHAR2(30)            IN
     COLNAME                        VARCHAR2                IN
     DUMP_ON                        NUMBER                  IN     DEFAULT
     AUTOCOMPRESS_ON                NUMBER                  IN     DEFAULT
     WHERE_CLAUSE                   VARCHAR2                IN     DEFAULT
     


    重点看GET_COMPRESSION_RATIO这个存储过程。它能够预估表的压缩比例。


    能够使用下面的匿名块运行。

    DECLARE
     blkcnt_comp PLS_INTEGER;
     blkcnt_uncm PLS_INTEGER;
     row_comp    PLS_INTEGER;
     row_uncm    PLS_INTEGER;
     comp_ratio  number;
     comp_type   VARCHAR2(30);
     username varchar2(30) := '&USER';
     tablename varchar2(30) := '&TB' ;
    BEGIN
     dbms_compression.get_compression_ratio('&Usedtbs',
                                             username,
                                            tablename,
                                             NULL,
                                            dbms_compression.COMP_FOR_OLTP,
                                            blkcnt_comp,
                                             blkcnt_uncm,
                                            row_comp,
                                            row_uncm,
                                            comp_ratio,
                                            comp_type);
     dbms_output.put_line('Sampling table: '||username||'.'||tablename);
     dbms_output.put_line('Estimated compression ratio: ' ||TO_CHAR(comp_ratio));
     dbms_output.put_line('Compression Type: ' || comp_type);
    END;
    /


    运行效果:

     

     /
    Enter value for user: DEXTER
    old  8:   username varchar2(30) :='&USER';
    new  8:   username varchar2(30) :='DEXTER';
    Enter value for tb: ACCOUNT
    old  9:   tablename varchar2(30) :='&TB' ;
    new  9:   tablename varchar2(30) :='ACCOUNT' ;
    Enter value for usedtbs: USERS
    old 11:   dbms_compression.get_compression_ratio('&Usedtbs',
    new 11:  dbms_compression.get_compression_ratio('USERS',
    Sampling table: DEXTER.ACCOUNT
    Estimated compression ratio: 1
    Compression Type: "Compress For OLTP"
     
    PL/SQL procedure successfully completed.


    由于表中的反复值很少,上文中Estimated compression ratio: 1,表示没有不论什么压缩效果。


    高级压缩,基于块内的压缩。所以就算有反复值。可是没有在一个块中,那么高级压缩还是无法起作用。



    这里重点介绍一个參数 COMPTYPE,它一共同拥有6个选项。各自是


    COMP_NOCOMPRESS               CONSTANT NUMBER := 1;
    COMP_FOR_OLTP                 CONSTANT NUMBER := 2;
    COMP_FOR_QUERY_HIGH           CONSTANT NUMBER := 4;
    COMP_FOR_QUERY_LOW            CONSTANT NUMBER := 8;
    COMP_FOR_ARCHIVE_HIGH         CONSTANT NUMBER := 16;
    COMP_FOR_ARCHIVE_LOW          CONSTANT NUMBER := 32;

    Query high 下面都是HCC(HybridColumnar Compression)的内容。由于与Exadata的存储节点相关。所以在非Exadata一体机环境无法使用。只是有意思的是,你能够在普通环境下使用get_compression_ratio来预估压缩的比例。




    11gr2曾经compression-advisor存储过程下载地址:

    http://download.csdn.net/detail/renfengjun/7514723


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    [arc067F]Yakiniku Restaurants[矩阵差分]
    [2016北京集训测试赛3]masodik-[凸包]
    [WC2010][BZOJ1758]重建计划-[二分+分数规划+点分治]
    [2016北京集训测试赛7]isn-[树状数组+dp+容斥]
    [BZOJ1565][NOI2009]植物大战僵尸-[网络流-最小割+最大点权闭合子图+拓扑排序]
    [2016北京集训试题7]thr-[树形dp+树链剖分+启发式合并]
    [2016北京集训测试赛1]奇怪的树-[树链剖分]
    [2016北京集训测试赛1]兔子的字符串-[后缀数组+二分]
    模拟 [Sdoi2010]猪国杀
    DP 小奇挖矿2
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4822016.html
Copyright © 2011-2022 走看看