ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Advanced Compression压缩技术

Oracle Advanced Compression压缩技术

原创 Linux操作系统 作者:尛样儿 时间:2013-08-19 16:06:53 0 删除 编辑

        这篇文章是在Oracle Database 11g的基础上讨论Oracle Advanced Compression(OAC)技术,自从Oracle Database 9i开始出现了数据库压缩技术,每个版本都在增强它的能力。数据库压缩技术并不像我们想象的一样,一定会降低系统的性能,这只是我们的主观认识。相对于存储级别的压缩或重复数据删除,OAC有自己的优势。OAC和Oracle Partitioning一样也是Oracle Database的一个选件,需要付费才能使用。

        Oracle Database启动压缩包括:结构化的关系数据(表)压缩,非结构化数据(SecureFiles重复数据删除和压缩)压缩,备份(RMAN和Data Pump)压缩和Data Guard Redo日志网络传输压缩等。

一.表数据压缩

       Oracle 9i提出了基于表的压缩,使用bulk进行加载操作,Oracle Database 11gR1 引入了OLTP表压缩新特性,允许所有数据类型维护操作期间被压缩,包括常规的DML,例如INSERT和UPDATE,与此同时,OLTP表压缩减少了写操作的压缩开销,使得更适合事务性或者OLTP环境。

       需要注意的是,基础表压缩是Oracle Database 11g EE(企业版)的基本特性,OLTP表压缩是Oracle Advanced Compression选件的一部分,这是在EE的基础上需要license。

1.OLTP表压缩

        Oracle OLTP表压缩使用特别设计的唯一压缩算法。这个算法能消除数据块的重复值,甚至能跨越多个字段。压缩块包含一个叫做symbol table的结构,它维护着压缩元数据。当一个块被压缩,重复值的消除是通过首先添加重复值的一个拷贝到symbol table,之后的重复值通过引用在symbol table中相应的条目替换原有的数据。因为这个创新的设计,在数据库块中压缩的数据是自包含状态,能够完全替换掉普通的数据块。另外,同维护全局数据库symbol table的压缩算法进行比较,由于Oracle访问压缩数据没有引入额外的I/O,因此提供了更好的性能优势。

2.OLTP表压缩优势

        在指定的环境获得的压缩比率依赖于被压缩数据自身,数据的具体基数。通常情况,客户通过使用OLTP表压缩特性可以减少存储空间2倍到4倍的消耗。OLTP表压缩的好处超过了在磁盘的存储,一个重大的优势是Oracle具备在没有解压数据块的情况下直接读取压缩块的能力,因此访问压缩数据没有性能上的退化。事实上,在很多情况下由于需要访问的块更少,减少了I/O操作,性能反而有所提升。在没有添加内存的情况下,通过缓存更多的数据buffer cache将变得更加的高校。

3.最小的性能开销

        如上所述,OLTP表压缩对读操作没有不利的影响。当写数据时需要执行额外的操作,对于写操作不可能消除性能开销。Oracle能最小化OLTP表压缩的开销,Oracle在批量模式压缩块,而不是在每次发生写操作的时候压缩数据。最新的初始化块仍然不压缩直到在块中的数据到达内部控制的阀值。当一个事务引发块中的数据到达这个阀值,所有块的内容被压缩。之后,更多的数据被添加到块,阀值再次被达到,整个块被重新压缩实现最高级别的压缩。
        这个过程会不断的重复直到Oracle确定块从之后的压缩将不再有优势。只有少量事务触发块的压缩,这将经历轻微的压缩开销。因此,在访问压缩块的大多数OLTP事务同访问没有压缩的块的事务有完全相同的性能。下面是演进过程:

4.迁移和最佳实践

        对于新表和分区,可以非常容易的在CREATE表或分区的时候通过指定COMPRESS FOR OLTP启用OLTP表压缩。

SQL> CREATE TABLE emp(
  2  emp_id number,
  3  first_name varchar2(128),
  4  last_name varchar2(128))
  5  COMPRESS FOR OLTP;

表已创建。

SQL> select table_name,compression,compress_for from user_tables where table_name='EMP';

TABLE_NAME           COMPRESSION      COMPRESS_FOR
-------------------- ---------------- ------------------------
EMP                  ENABLED          OLTP

        针对存在的表和分区,有三种推荐的方法启用OLTP表压缩:

1).ALTER TABLE ... COMPRESS FOR OLTP
        这个方法将针对所有未来的DML启用OLTP表压缩,表中存在的数据仍然保持不压缩。

SQL> CREATE TABLE emp(
  2  emp_id number,
  3  first_name varchar2(128),
  4  last_name varchar2(128));

表已创建。

SQL> select table_name,compression,compress_for from user_tables where table_name='EMP';

TABLE_NAME           COMPRESSION      COMPRESS_FOR
-------------------- ---------------- ------------------------
EMP                  DISABLED

SQL> alter table emp COMPRESS FOR OLTP;

表已更改。

SQL> select table_name,compression,compress_for from user_tables where table_name='EMP';

TABLE_NAME           COMPRESSION      COMPRESS_FOR
-------------------- ---------------- ------------------------
EMP                  ENABLED          OLTP

2).ONLINE Redefinition(DBMS_REDEFINITION)
        这个方法将针对未来的DML启用OLTP表压缩,同时也会压缩存在的数据。在迁移的过程中使用DBMS_REDEFINITION将使得对表的读写操作都是活动的。在并行模式运行DBMS_REDEFINITION将有更好的性能。

        在线重定义在操作期间将克隆索引到临时的表,所有被克隆的索引在同步(refresh)期间被增量的维护,所以在线重定义操作期间或之后都没有中断使用索引。只有当在线重定义用于重定义一个分区的时候有例外,全局索引将变得无效,需要在线重定义之后执行rebuilt操作。

3).ALTER TABLE ... MOVE COMPRESS FOR OLTP
        这个方法将针对未来的DML启用OLTP表压缩,同时也会压缩存在的数据。表被在线的移动,读是活动的,但是表上有排他锁,所有的DML操作将等待,直到MOVE命令完成。并行运行ALTER TABLE ... MOVE命令将有最好的性能。ALTER TABLE ... MOVE语句允许对非分区表或分区表的一个分区重新调整数据,插入一个新的段,选择性的插入不同的表空间。

        ALTER TABLE ... MOVE将使得分区或表上的所有索引变得无效,这些索引需要在执行ALTER TABLE ... MOVE命令之后执行rebuilt操作。对于分区的移动,使用ALTER TABLE ... MOVE PARTITION语句加上UPDATE INDEXES子句将维护索引(加上X锁,所有的DML将等待,直到MOVE命令完成)。

SQL> CREATE TABLE emp(
  2  emp_id number,
  3  first_name varchar2(128),
  4  last_name varchar2(128));

表已创建。

SQL> select table_name,compression,compress_for from user_tables where table_name='EMP';

TABLE_NAME           COMPRESSION      COMPRESS_FOR
-------------------- ---------------- ------------------------
EMP                  DISABLED

SQL> alter table emp move tablespace users COMPRESS FOR OLTP;

表已更改。

SQL> select table_name,compression,compress_for from user_tables where table_name='EMP';

TABLE_NAME           COMPRESSION      COMPRESS_FOR
-------------------- ---------------- ------------------------
EMP                  ENABLED          OLTP

5.其他注意事项:

1).OLTP表压缩不支持超过255字段的表,也不支持LONG数据类型。
2).不能确保更大的块有更好的OLTP表压缩比率。
3).LOBs最好以SecureFiles LOBs存储在Oracle Database,使用SecureFiles压缩和重复数据删除能潜在的减少LOBs请求的存储量。

        这篇文章目前只是简单讨论了表的压缩技术,其他压缩技术请参考下面列出的白皮书。
阅读Oracle产品白皮书也是学习Oracle技术很好的方式之一。

相关文章:

        《Oracle Partitioning分区技术》:
http://space.itpub.net/23135684/viewspace-768737

参考文章:

        Oracle Advanced Compression中文主页:http://www.oracle.com/cn/products/database/options/advanced-compression/overview/index.html

        《Advanced Compression与Oracle数据库11g 第2版结合使用》:
http://www.oracle.com/us/products/database/db-advanced-compression-option-1525064.pdf?ssSourceSiteId=ocomcn


--end--

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23135684/viewspace-768810/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle数据库管理员,Oracle数据库系统构架员;2012年7月出版《构建最高可用Oracle数据库系统:Oracle 11gR2 RAC管理、维护与性能优化》一书;Oracle 10g OCM。

注册时间:2010-01-05

  • 博文量
    483
  • 访问量
    5314203