Oracle中如何預估表壓縮的效果

來源:互聯網
上載者:User

在使用壓縮之前,我們可以估算一下使用壓縮能夠擁有多大的效果。

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.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     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;    /

本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

執行效果:

/    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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.