Oracle (11gR2)中的表压缩
压缩的好处
压缩是一项更适合于数据仓库环境的一项Oracle 特性。压缩的好处包括以下两个方面:
1、节省存储空间,对应海量的数据来说非常有意义。
2、查询性能将会提高(不是绝对会提高),因为物理I/O 减少,并且提高了内存中数据块的命中率。
不利的方面:
可能增加CPU 的负载。影响DML操作的性能。表中的碎片增多,浪费存储空间。更多详细的说明请参考:http://www.oracle.com/technetwork/database/options/partitioning/twp-data-compression-10gr2-0505-128172.pdf
造成这些结果,主要是因为误用了表压缩技术,因为表压缩技术是一项更适合于数据仓库环境的一项oracle 特性。即数据主要是用作查询目的,很少涉及DML操作。
oracle 提供的压缩方式及特性
oracle 提高了4总压缩方式,分别适用不同的场景。分别是:
basic compression:压缩度高,CPU开销最低,适用于DDS。
OLTP compression : 压缩度高,CPU开销最低,适用于OLTP,DDS。
注:压缩可以指定在表空间级,表级,分区级。如果表空间带有压缩属性那么其中的表默认也带有压缩属性,但是表级的压缩属性可以覆盖表空间级的压缩属性,表的压缩属性与分区的压缩属性的关系也是这样的。以下主要讲的是表的压缩。
另外有两种压缩方式,不过这两种压缩方式使用范围有限:
SQL> create table object_copy compress for query
2 as select * from dba_objects;
as select * from dba_objects
*
ERROR at line 2:
ORA-64307: hybrid columnar compression is only supported in tablespaces
residing on Exadata storage
也就是说使用混合柱状压缩表空间需要位于exadata一体机上面。更多关于柱状压缩的资料,可以参考:
http://docs.oracle.com/cd/E11882_01/server.112/e17120/tables002.htm
创建表的时候通过指定compress basic 关键字使表使用basic compression的压缩方式。如果只使用compress 关键字不指定压缩方式,默认是basic方式。使用basic 方式压缩的特性在于:使用直接路径insert 的记录是压缩的,update 操作相当于解压缩。
SQL> create table objects_1
2 compress basic
3 as select object_id,object_name
4 from dba_objects;
Table created.
SQL> create table objects_1
2 compress basic
3 as select object_id,object_name
4 from dba_objects;
Table created.
指定OLTP方式的压缩方法指定关键字:compress for oltp。OLTP方式的压缩方式特性
在于:使用直接路径insert 的记录依然是压缩的,传统的insert 语句插入的记录也是压缩的,update 语句操作过后数据依然是压缩的。