DB2 10.5 for Linux, UNIX, and Windows

经典行压缩

经典行压缩(有时称为静态压缩)通过将各行之间重复的值模式替换为更短的符号字符串来压缩数据行。

使用经典行压缩的好处与自适应压缩相似,可以减少用于存储数据的空间,从而可显著节省存储成本。但是,与自适应压缩不同,经典行压缩仅使用表级别字典来存储全局重复出现的模式;它不使用那些用于以动态方式压缩数据的页级别字典。

经典行压缩的工作方式

经典行压缩使用表级别压缩字典来按行压缩数据。字典用来将表行中重复的字节模式映射至更小的符号;这时,这些符号替换表行中更长的字节模式。压缩字典与表数据行一起存储在表的数据对象部分中。

对哪些数据进行压缩?

存储在基本表行和日志记录中的数据符合经典行压缩资格。此外,也可以对 XML 存储对象中的数据进行压缩。可压缩直接插入到表行中的 LOB 数据;但是,不会压缩长数据对象的存储对象。

限制: 不能压缩您使用 DB2® V9.5 或 DB2 V9.1 创建的 XML 列中的数据。但是,可压缩您使用 DB2 V9.7 或更高版本添加至表的直接插入 XML 列,只要在该产品的先前发行版中创建的该表没有 XML 列。如果您在先前发行版中创建的表已有一个或多个 XML 列并且您想要通过使用 DB2 V9.7 或更高版本添加已压缩 XML 列,那么必须使用 ADMIN_MOVE_TABLE 存储过程来迁移该表,才能使用压缩。

启用或禁用经典行压缩

要使用经典行压缩,您必须具有 DB2 Storage Optimization Feature的许可证。通过将表的 COMPRESS 属性设为 YES STATIC 来压缩表数据。通过对 CREATE TABLE 语句指定 COMPRESS YES STATIC 选项,可在创建表时设置此属性。还可对 ALTER TABLE 语句使用同一选项以将现有表改变为使用压缩。启用压缩后,向该表添加数据的操作(例如,INSERTLOAD INSERTIMPORT INSERT 命令操作)可使用经典行压缩。此外,还对表的新索引启用了索引压缩。如果不另行指定并且索引是可压缩的索引类型,那么索引被创建为压缩索引。
要点: 对表启用经典行压缩时,就对整个表启用了行压缩,即使此表由多个表分区组成也是如此。

要对表禁用压缩,请使用带有 COMPRESS NO 选项的 ALTER TABLE 语句;您以后添加的行不会压缩。要抽取整个表,必须使用 REORG TABLE 命令来执行表重组。

如果您有 DB2 Storage Optimization Feature 的许可证,那么可自动启用对临时表的压缩。您不能直接启用或禁用对临时表进行压缩。

更新活动对日志和已压缩表的影响

根据更新活动以及在数据行中更新的列,日志的使用可能增加。有关如何将更新活动对日志的影响降至最低的信息,请参阅对列进行排序以使更新日志记录最少

如果行大小增大,那么该行的新版本可能不适合放在当前数据页上。而且,行的新映像将存储在溢出页上。为尽量减少指针溢出记录的形成,应使用带有 PCTFREE 选项的 ALTER TABLE 语句来提高重组后每页留为可用空间的百分比。例如,如果在启用压缩之前将 PCTFREE 选项设为 5%,那么可以在启用压缩时将其更改为 10%。提高每页留为可用空间的百分比对于大量更新的数据特别重要。

临时表的经典行压缩

临时表的压缩是使用 DB2 Storage Optimization Feature自动启用的。执行查询时,DB2 优化器将考虑对临时表进行压缩所节省的存储器容量以及对查询性能的影响,从而确定是否值得使用压缩功能。如果值得使用,那么将自动使用压缩功能。在使用压缩功能之前,临时表必须达到的最小大小比常规表的要大。

可以使用说明工具db2pd 工具来了解优化器是否对临时表使用了压缩。

回收因为压缩而释放的空间

可以回收已经通过压缩数据而释放的空间。有关更多信息,请参阅可回收存储器