• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 28次浏览 已收录 0个评论

在使用压缩之前,我们可以估算一下使用压缩能够拥有多大的效果。 11gr2以前可以使用dbms_comp_advisor,具体代码已经在附件中给出。只需要执行两个文件dbmscomp.sql和prvtcomp.plb,然后使用DBMS_COMP_ADVISOR.getratio存储过程即可。不再详细描述。 SQL set

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

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.

本文来源[email protected]搞@^&代*@码2网

因为表中的重复值非常少,上文中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.gaodaima.com/detail/renfengjun/7514723


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle压缩功能小结2—预估表压缩的效果

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址