原文地址,转载请注明出处:http://blog.csdn.net/anzelin_ruc/article/details/8202847 ©安泽林
表数据的压缩
Oracle 9i对于批量导入操作的数据提供了基本表压缩。
Oracle 11g引入了一个新的特性—OLTP表压缩,所谓OLTP表压缩就是允许在任何类型的数据操作过程中对数据进行压缩,例如通常的数据操作语言,插入、更新等。除此之外,表压缩减少了写操作的相关压缩开销,使之适用于事务型或OLTP环境,因此对于所有的应用程序工作负载来说OLTP表压缩都更好的扩展了压缩所带来的益处。
OLTP 表压缩
Oracle的OLTP表压缩专门设计了一个“唯一”(unique)压缩算法来处理OLTP应用程序。该算法通过消除同一个数据库块内重复的值(这些值可以是跨越不同列的)来达到压缩的目的。压缩过后的块包含一个称为符号表的结构来保持压缩的元数据。当数据库块被压缩的时候,首先在符号表中为重复值添加一个副本,然后将这个重复值删除,这样每一个重复的值都可以被一个指向符号表中对应条目的一个更短的引用所替代。
图1 压缩前与压缩后的数据块
该算法的革新性在于,压缩后的数据在数据库块内是独立的,那些用于将压缩后的数据恢复到其原始状态的元数据也存储在对应数据库块中。与那些在全局数据库上维护一个符号表的压缩算法比较,Oracle的这个独特的设计因为在访问压缩数据的时候不用引进额外的I/O开销而显著提升了性能。
OLTP表压缩的益处
在给定环境下获得的压缩比率取决于给定的数据的自身性质,特别是数据自身的基数(例如某数据的基数只有0~9这十个数字,显然在同样情况下相对于基数为0~100的数据,其占用空间少,压缩效果好)。
OLTP表压数,不仅仅在于节省磁盘存储空间,一个显著的优势是,Oracle有能力在不事先对数据块进行解压缩就可以直接读取压缩数据块的内容。因此,也就不会因为访问压缩数据而使性能大幅降低。而相反的,由于Oracle要访问的数据块数目更少了,从而降低了I/O开销,这样反而可能会提高性