目录:

  1. 简介

  2. 压缩方式及压缩比

  3. 压缩哪些数据

  4. 可能有用的脚本

 

一、简介

  EHCC(Exadata Hybrid Columnar Compression),是Oralce 数据库在12C 中新增加的压缩方式,除了具有压缩数据的功能外,还有一个特点就是列式存储。

  也就是说,当通过EHCC方式对数据库所有数据进行压缩后,从数据存储方式上来看,可以理解成一个列式存储数据库。那么列式存储在经分系统中的高效在很多专门的列式数据库中已经体现得非常明显。这里不再拿数据说事。

  这也是Oracle 占领市场的又一尖刀。Oracle 说了,你有的,我有。你没有的,我也有,哪怕我现在没有,也很快会有!

  同时,我们可以将EHCC理解为磁盘版的 in-memory 。

  与传统的压缩方式对比,之前的压缩方式更适用于OLTP系统。而EHCC则更适合于DSS 系统,及部分OLAP系统业务。

二、压缩方式及压缩比

  表1:压缩方式及压缩比

压缩方式 压缩比
BASE   65%
FOR OLTP 62%
Qery High 95%
Qery Low 89%
Archive High 97.5%
Archive Low 95%

  2.1. 压缩比

     先说明下压缩比的概念: (1-压缩后的空间/未压缩前的空间)*100% 。 即为压缩掉的空间占原空间的比例。

     比如一张未经压缩的表的数据量为20G .那么 base 方式压缩,压缩比为65%,也就是说会压缩掉20G*65%=13G. 压缩掉13G,压缩完后,该表占用空间为7G.

     1.  BASE  与 OLTP   压缩效率差不多,而它们之间的那点差别,可能是因为BASE方式表的PCT_FREE 为0,而OLTP 为10%。
     2. QUERY LOW       相对压缩率不高,采用LZO压缩算法,但是也比ORACLE自带的压缩效果高很多
     3. QUERY HIGH和ARCHIVE LOW     都是使用ZLIB压缩算法。因此压缩几乎是相等的。
     4. ARCHIVE HIGH    采用Bzip2压缩算法实现 ,压缩比极高,

     EHCC特性支持普通的数据表和分区

    •  支持分区

      除普通堆表外,还支持对单个分区进行压缩。

        如:  

create table test_ehcc_compression (id)
partition by range (id)
partition p1 values less than (100) nocompress,
partition p2 values less than (200) compress for archive low,
partition p3 values less than (300) compress for query high,
partition p4 values less than (400) compress for query low);

三、压缩哪些数据

  需要注意的一点是,对于启用了EHCC的表,并不是将插入表的所有数据都会进行EHCC的方式进行压缩。而是只有通过特定的方式插入表的数据才会处理。

  • 对于单行的insert 语句:新添加的行贿通过OLTP方式被压缩。
  • 对于update语句:修改会被转换为delete 和insert。
  • 对于delete 语句:删除只会在CU头当中对应的位上将该行标识成无效
  • alter 语句启用EHCC时,原有数据不压缩,只处理新数据。

  对于使用了EHCC的表,只有在使用以下的方式向表当中加载数据时才会触发数据压缩。

  • 直接路径insert语句
  • 并行的DML语句
  • 直接路径sqlloader
  • CTAS(create table as select)

四、可能有用的脚本

1. 进行数据压缩比对比的SQL脚本

  

-- 准备初始数据
create table Test_objects as select * from dba_objects; begin
for i in 1..100000 loop
insert into Test_objects select * from dba_objects;
commit;
end loop;
end;
/ -- 查看初始数据量
select segment_name
, segment_type
, round(sum(bytes)/1024/1024/1024,2) size_gb
from dba_segments
where segment_name ='TEST_OBJECTS'
group by segment_name,segment_type
order by 1; -- 生成不同压缩方式的表
create table test_objects_base compress nologging select/*+ parallel(a,10) */ from Test_objects a;
create table test_objects_oltp compress for oltp nologging select/*+ parallel(a,10) */ from Test_objects a;
create table test_objects_olap compress for olap nologging select/*+ parallel(a,10) */ from Test_objects a;
create table test_objects_base compress for query high parallel 10 nologging select/*+ parallel(a,10) */ from Test_objects a;
create table test_objects_base compress for query low parallel 10 nologging select/*+ parallel(a,10) */ from Test_objects a;
create table test_objects_base compress for archive high parallel 10 nologging select/*+ parallel(a,10) */ from Test_objects a;
create table test_objects_base compress for archive low parallel 10 nologging select/*+ parallel(a,10) */ from Test_objects a; -- 取得压缩前后各表的占用空间及各自的压缩方式
select s.owner,segment_name,s.bytes/(1024*1024*1024) t_size,compress_for
from dba_segments s,dba_tables t
where s.owner=t.owner and t.table_name=s.segment_name
and s.owner='&owner' and t.table_name like 'TEST_OBJECTS%';

  2. 压缩表之前预估压缩比的脚本

declare
v_blkcnt_cmp pls_integer;
v_blkcnt_uncmp pls_integer;
v_row_cmp pls_integer;
v_row_uncmp pls_integer;
v_cmp_ratio number;
v_comptype_str varchar2(60);
begin
dbms_compression.get_compression_ratio(
scratchtbsname => upper('&ScratchTBS'),
ownname => user,
tabname => upper('&TableName'),
partname => NULL,
comptype => dbms_compression.comp_for_query_high,
blkcnt_cmp => v_blkcnt_cmp,
blkcnt_uncmp => v_blkcnt_uncmp,
row_cmp => v_row_cmp,
row_uncmp => v_row_uncmp,
cmp_ratio => v_cmp_ratio,
comptype_str => v_comptype_str);
dbms_output.put_line('Estimated Compression Ratio: '||to_char(v_cmp_ratio));
dbms_output.put_line('Blocks used by compressed sample: '||to_char(v_blkcnt_cmp));
dbms_output.put_line('Blocks used by uncompressed sample: '||to_char(v_blkcnt_uncmp));
end;
/

ORACLE EHCC(exadata hybrid columnar compression)的更多相关文章

  1. Oracle Schema Objects——Tables——Table Compression

    Oracle Schema Objects Table Compression 表压缩 The database can use table compression to reduce the amo ...

  2. 【Oracle】Exadata虚拟机配置(一)

    Exadata是Oracle软硬结合的一体机.通过自己的机子不可能全然模拟出来,这里搭建的虚拟机仅仅是一个简单的.能够供我们学习Exadata的环境. 最简单能够模拟的Exadata虚拟机须要两个节点 ...

  3. ORACLE 11G R2 RAC classical install OGG12.1(LINUX) 经典抽取模式单项同步配置OGG12.1

    博文结构图如下: 一.环境描述以及注意事项 1.1 环境简介 IP 系统 Oracle版本 OGG版本 源端 172.16.10.16/36 RHEL6.5 oracle11204 12.1 目标端 ...

  4. [20180814]慎用查看表压缩率脚本.txt

    [20180814]慎用查看表压缩率脚本.txt --//最近看exadata方面书籍,书中提供1个脚本,查看某些表采用那些压缩模式压缩比能达到多少.--//通过调用DBMS_COMPRESSION. ...

  5. 在物理 Data Guard 中对异构主备系统的支持 (文档 ID 1602437.1)

    Data Guard中主数据库与物理备用数据库(Redo Apply)之间可以有什么差别?本说明针对重做应用和 Oracle Data Guard 12 发行版 1 进行了更新.它适用于 Oracle ...

  6. Oracle Exadata体系笔记

    Exadata一开始是以一个存储系统形式诞生的,叫做SAGE(Storage Appliance for Grid Environ ments,网格环境存储设备)   Exadata原本设计用来解决超 ...

  7. oracle 12cR1&12cR2核心高实用性新特性

    今天把本地环境升到了12.2.12c应该来说无论从性能和功能性方面都得到了很大的加强,就是不知道实际license怎么卖...原来有些功能在exadata中可用的,现在在12c中可用了,估计很大程度上 ...

  8. Exadata 12.2.1.1.0 Highlights

    突然发现,在中国农历新年的这几年里,Exadata 12.2版本已经发布了. 本起去docs.oracle.com上看看它的新特性,结果发现文档还没有更新: 下面是找到的一些资料,让我们来一睹为快吧: ...

  9. oracle 表压缩技术

    压缩表是我们维护管理中常常会用到的.以下我们看都oracle给我们提供了哪些压缩方式. 文章摘自"Oracle® Database Administrator's Guide11g Rele ...

随机推荐

  1. 20165234 [第二届构建之法论坛] 预培训文档(Java版) 学习总结

    [第二届构建之法论坛] 预培训文档(Java版) 学习总结 我通读并学习了此文档,并且动手实践了一遍.以下是我学习过程的记录~ Part1.配置环境 配置JDK 原文中提到了2个容易被混淆的概念 JD ...

  2. 20165234 《Java程序设计》第二周学习总结

    第二周学习总结 教材学习内容总结 第二章 标识符与关键字 1.标识符 其本质是文件名字. 由字母.下画线.美元符号和数字组成,长度不受限制. 标识符的第一个字符不能为数字,标识符不能为关键字(如int ...

  3. linux下安装oh-my-zsh

    如果是linux 系统,首先你需要安装 zsh sudo yum install zsh 或者 sudo apt-get install zsh 接下来我们需要下载 oh-my-zsh 项目来帮我们配 ...

  4. Java基础6-多态;匿名内部类;适配器模式

    昨日内容回顾 类成员 构造函数:和类同名,没有返回值,可以重载 this(),super() 成员变量: 成员函数: 静态代码块:类加载执行 {}:构造代码块 interface 所有方法都是抽象的 ...

  5. Switch 中参数的范围探讨

    switch 语句必须遵循下面的规则: switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举 ...

  6. VC中的字符串转换宏

              ATL7.0引入了几个新的转换类和宏,现有的宏提供了显着的改善.新的字符串转换类和宏的名称,采取的形式如下: C SourceType [C]DestinationType[EX] ...

  7. JavaScript使用方法和技巧大全

        有些时候你精通一门语言,但是会发现你其实整天在和其它语言打交道,也许你以为这些微不足道,不至于影响你的开发进度,但恰恰是这些你不重视的东西会浪费你很多时间,我一直以为我早在几年前就已经精通Ja ...

  8. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...

  9. 007_zkCli.sh

    一. [zk: localhost:2181(CONNECTED) 1] rmr /zkTestPaths_92018-06-25 11:18:30,189 [myid:] - WARN [main- ...

  10. (二)远程代理Remoting/RealProxy

    使用.Net Remoting/RealProxy 采用TransparentProxy和RealProxy实现对象的代理,实现思路如下:Client -TransparentProxy - Real ...