首页 数据库 mysql教程 Oracle压缩功能小结2—预估表压缩的效果

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

Jun 07, 2016 pm 03:02 PM
oracle 使用 功能 压缩 效果

在使用压缩之前,我们可以估算一下使用压缩能够拥有多大的效果。 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 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


 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle数据库日志会保存多久 oracle数据库日志会保存多久 May 10, 2024 am 03:27 AM

oracle数据库日志会保存多久

oracle数据库启动步骤顺序为 oracle数据库启动步骤顺序为 May 10, 2024 am 01:48 AM

oracle数据库启动步骤顺序为

7-zip最大压缩率设置,7zip如何压缩到最小 7-zip最大压缩率设置,7zip如何压缩到最小 Jun 18, 2024 pm 06:12 PM

7-zip最大压缩率设置,7zip如何压缩到最小

oracle数据库服务器硬件配置要求 oracle数据库服务器硬件配置要求 May 10, 2024 am 04:00 AM

oracle数据库服务器硬件配置要求

oracle中某个字符出现的次数怎么看出来 oracle中某个字符出现的次数怎么看出来 May 09, 2024 pm 09:33 PM

oracle中某个字符出现的次数怎么看出来

oracle需要多少内存 oracle需要多少内存 May 10, 2024 am 04:12 AM

oracle需要多少内存

用oracle数据库需要多大内存 用oracle数据库需要多大内存 May 10, 2024 am 03:42 AM

用oracle数据库需要多大内存

oracle定时任务每天都执行一次创建步骤 oracle定时任务每天都执行一次创建步骤 May 10, 2024 am 03:03 AM

oracle定时任务每天都执行一次创建步骤

See all articles