Oracle压缩功能小结2—预估表压缩的效果

来源:互联网 发布:数控下料机编程 编辑:程序博客网 时间:2024/06/16 11:34

在使用压缩之前,我们可以估算一下使用压缩能够拥有多大的效果。

11gr2以前可以使用dbms_comp_advisor,具体代码已经在附件中给出。只需要执行两个文件dbmscomp.sql和prvtcomp.plb,然后使用DBMS_COMP_ADVISOR.getratio存储过程即可。不再详细描述。


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

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

 

_sys@FAKE> desc dbms_compressionPROCEDURE 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     DEFAULTFUNCTION GET_COMPRESSION_TYPE RETURNS NUMBER ArgumentName                  Type                    In/Out Default? ----------------------------------------------------- ------ -------- OWNNAME                        VARCHAR2                IN TABNAME                        VARCHAR2                IN ROW_ID                         ROWID                   INPROCEDURE 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: DEXTERold  8:   username varchar2(30) :='&USER';new  8:   username varchar2(30) :='DEXTER';Enter value for tb: ACCOUNTold  9:   tablename varchar2(30) :='&TB' ;new  9:   tablename varchar2(30) :='ACCOUNT' ;Enter value for usedtbs: USERSold 11:   dbms_compression.get_compression_ratio('&Usedtbs',new 11:  dbms_compression.get_compression_ratio('USERS',Sampling table: DEXTER.ACCOUNTEstimated compression ratio: 1Compression 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


 

1 0