我们知道,从Informix 11.5 xC4开始,Informix数据库提供了行压缩技术,它采用一种静态的基于字典的压缩算法,将表(table)或表分区(table fragments)中的数据行中重复的数据模式映射到一个占用空间较少的符号,从而减少表格或表分区数据的总大小。这些重复的数据模式不仅可以是一列中的数据,也可以是一列中的部分数据,甚至可以是跨数据列的数据。通过采用行压缩技术,Informix 11.5 可以节省高达 80%的存储空间。同时,由于数据是采用压缩方式存储,I/O 读取效率会有 20% 左右的提高,内存使用效率会更高,数据库备份及恢复的时间也得到相应的减少。
图 1. 采用行压缩技术的示意图
上图中,我们发现,smpo 在数据行中重复出现,在压缩时,我们将其用(01)表示; Dallas TX 75063 同样在数据行中重复出现,在压缩时,我们将其用(02)表示,这样,会节省大量数据空间。
Informix数据库不仅可以对行数据进行压缩,还可以整合表压缩后的空闲空间,并将该空闲空间归还给数据空间重复使用。通过采用行数据压缩技术,可以为我们带来如下好处:
大大节省硬盘存储空间
对于表分区(table fragments)压缩,减少了磁盘的使用
节省了逻辑日志的使用,从而节省更多的空间,并可以防止高吞吐量的联机事务处理出现瓶颈
数据页读取更少,因为一个数据页上可以容纳更多的行需要规模较小的缓冲池,因为同样大小的缓冲池可以容纳更多的数据
I/O 活动会更少:在一个数据页上会容纳更多的数据,对 insert, update, 及 delete 操作的日志记录会更小
在分区表环境,可以将不经常访问的历史数据分区进行压缩,而对经常访问的数据分区不进行压缩
可以释放表中不再需要的空闲空间
更快速的数据库备份及恢复
行压缩技术比较适合于 I/O 操作密集型的表,特别是缓冲池命中率较低的情况。在 OLTP 环境下,对 I/O 操作密集型的表进行行压缩,会显著提高处理性能。如果应用程序缓冲池命中率较高,而且高性能比磁盘空间的使用更重要,这时,采用行压缩技术就不太合适,因为压缩会降低处理性能。
采用行压缩技术,由于一个数据页上可以容纳更多的行,因此,数据库优化器会采用和未进行行压缩处理不同的执行计划。
如果你在使用数据库复制技术 ER,在一个复制服务器上对数据进行压缩,不会影响在其他复制服务器上的数据。
如果你在使用High-Availability Data Replication (HDR), 在源对数据进行压缩,在目标同样会对数据进行压缩。你不能在 HDR secondary, RS secondary, or SD secondary server 上对数据进行压缩,因为 HDR 目标服务器上的数据必须和源上的一样。
哪些数据可以被压缩
我们通常会对表或表分区中具有重复模式的数据进行压缩。行压缩对数据类型没有任何限制,一般来讲,文本数据会比数值类型更容易被压缩,因为文本类型数据中会更容易包含重复模式。但我们不能仅仅根据数据类型来预测数据压缩比。
比如说:
对于存储在 char 或 varchar 字段中的文本数据,采用不同的语言或字符集,数据压缩比往往都不同
对于数值类型数据,如果存在大量的 0,往往压缩效果会好,但对于包含大量不同数值的数据,压缩效果不会太好
数据中包含大量空格的数据压缩效果会好
数据已经采用不同的压缩算法压缩之后,压缩效果不会太好