数据压缩与性能

可使用数据压缩来减少必须读写磁盘的数据量,从而降低 I/O 成本。

一般来讲,数据行中存在的模式重复率越高,压缩率越高。 如果数据未包含重复字符串(主要是数字数据时可能会是这种情况)或包括直接插入 BLOB 数据,那么压缩节省的存储空间不会那么多。 此外,如果数据压缩率不高,那么数据库管理器尝试压缩数据时仍会影响性能,您只会发现保留任何压缩字典对存储空间没什么好处。 要检查可通过压缩节省的可能存储空间,请使用 ADMIN_GET_TAB_COMPRESS_INFO 表函数。

有两种形式的数据压缩可用:
行压缩
有两种类型的行压缩可用:
经典行压缩
经典行压缩包括将一行中多个列值间的重复模式替换为较短符号字符串。 系统会扫描行抽样以查找重复数据的实例。 通过此扫描,系统会创建表级别压缩字典。 此字典用于将重复数据替换为较短符号字符串。

表级别压缩字典是静态字典;这些字典在创建后不会更改,除非您在经典表重组期间重建这些字典。

自适应行压缩
自适应行压缩包括使用两个压缩方法:经典行压缩和页级别压缩。 页级别压缩包括将数据的跨单页内的多个列值的重复模式替换为较短符号字符串。 向页填充数据时,页压缩逻辑会扫描该页以查找重复数据。 通过此扫描,系统会创建页级别压缩字典。 此字典用于将重复数据替换为较短符号字符串。

页级别字典是动态的;它们是在必要时自动重建的。

值压缩
值压缩包括移除值的重复条目,只存储一个副本,并跟踪任何对所存储值的引用的位置。

行压缩也会用于临时表。 压缩临时表可减少大型查询和复杂查询所需的临时磁盘空间量,从而提高查询性能。 临时表的压缩在 Db2® Storage Optimization Feature 下自动启用。 每个符合行压缩资格的临时表都需要额外 2 MB 到 3 MB 内存来创建其压缩字典。 此内存保持已分配状态直到创建压缩字典。

还可压缩索引对象,这样做可降低存储成本。 对于通常包含许多非常大的索引的大型联机事务处理 (OLTP) 和数据仓库环境而言,这种压缩特别有用。 在这两种情况下,索引压缩可在 I/O 受约束的环境中大幅提高性能,同时在 CPU 受约束的环境中几乎不会导致性能下降。

如果对包含 XML 列的表启用压缩,那么系统还会压缩 XDA 对象中存储的 XML 数据。 在 XDA 对象中,将存储一个独立的 XML 数据压缩字典。 如果使用 DB2 V9.7 或更高版本将 XML 列添加至使用 DB2 V9.5 创建的表,那么会压缩这些 XML 列。 但是,不会压缩使用 DB2 V9.5 添加至表的 XML 列;在这些表中,仅压缩数据对象。