关于压缩的使用和性能比较,可以参看《Compressed Tables 》(http://www.oracle-base.com/articles/9i/CompressedTables9i.php)和《Table Compression Enhancements in Oracle Database 11g Release 1》 (http://www.oracle-base.com/articles/11g/TableCompressionEnhancements_11gR1.php) 两篇文章,Oracle Magazine s上的《Compress to Impress 》(http://www.oracle.com/technology/oramag/oracle/08-jul/o48advcomp.html) 也做了很详细的介绍。
在这里,主要基于Meikel Poess 和Dmitry Potapov 在第 29届 VLDB 会议(
Berlin, Germany, 2003)提交的《Data Compression in Oracle》。在这篇文章里,作者介绍了数据压缩的算法,并以一个有百万记录的表为例,对压缩和非压缩的表在装载、修改/删除、全表扫描、基于Rowid的读取等操作在CPU使用和花费时间上进行了比较。
文中介绍到数据的压缩是基于Block 级的,因此在压缩率上可能比基于整个库的压缩要小,但由于它是自包含的,因此读取该Block时,就能解压缩,而无需读取更多的Block.此外,数据并不是在增删改时就进行压缩,而只是达到一定的threshold 后,系统才启动进程进行压缩,因此不会影响数据操作的响应时间,有由于压缩是基于Block的,因此只对该Block进行锁,从而也不会影响整个系统的性能。
从文章的数据来看,压缩对于OLAP系统显然是非常有效份额,但对于OLTP系统,在以后的文章中我将依据我们系统的实际应用进行测试。