确定要压缩的一组表和索引后,接下来需要对这些表启用压缩。更改现有表的压缩设置,填入数据以帮助其减缓增长速度,随后插入的数据将得益于新的压缩设置。如果您的目标是减少现有数据占用的">存储空间,或许也可能是要减少数据库分配的物理空间,那么您必须对此类数据执行压缩。
您可以应用以下策略,从而帮助对大量现有数据应用压缩功能,释放此类数据当前消耗的磁盘空间,为文件系统腾出空间。当您首次实施行压缩或索引压缩或者从早期 DB2 版本升级到 DB2 10.1 版本时,您将会发现此类信息尤其有用。
对现有数据应用压缩
对现有数据应用压缩的最直接方法是执行经典表重组。如果您已经更改行压缩或值压缩设置,请使用 REORG TABLE 命令和 RESETDICTIONARY 参数。如果某些表包含 XML 列,则还需要指定 LONGLOBDATA 子句,以便压缩非内联 XML 文档。如果您仅对索引压缩设置进行了更改,REORG INDEXES ALL 命令足以压缩索引数据。无需对表数据进行完全重组。如果您正在从 DB2 9.5 版本升级到 DB2 10.1 版本并且已经启用行压缩,则可以考虑执行索引重组,而不必对所有表数据执行完全重组。
如果您无法将表转为脱机状态,可以考虑使用 ADMIN_MOVE_TABLE 存储程序,该程序自 DB2 9.7 版本开始推出。您可以利用此程序将活动表中的数据移动到具有相同名称(存储位置相同或不同均可)的全新6184.html">数据表对象中。ADMIN_MOVE_TABLE 程序能够以经典表重组采用的同一方式对表进行有效重组,但不会产生任何停机时间。移动期间数据仍保持联机状态。以重组期间的相同质量构建或重建表级字典。为构建或重建表级字典,ADMIN_MOVE_TABLE 程序需要执行以下步骤:
1. 收集表中所有行的伯努利抽样
2. 从该抽样中构建新的表级压缩字典
3. 先将字典插入目标表,然后再开始复制阶段,这样,当在复制阶段将行插入目标表时,行才会进行压缩
下面的示例展示了如何以最直接的方式启动表联机移动操作。
CALL SYSPROC.ADMIN_MOVE_TABLE('DB2INST1','ACCTCR', '','','','','','','','','MOVE')
您可以使用 ADMIN_MOVE_TABLE_UTIL 程序对表联机移动操作的参数和行为实施细粒度控制,如确定用于构建字典的抽样大小。尽管如此,即使您以标准的‘MOVE’执行模式调用该函数,构建的压缩字典也能保证最佳状态。 与经典表重组不同的是,ADMIN_MOVE_TABLE 程序的默认行为是重建字典。由于仅使用一小部分随机表数据抽样,因而相较于不重建字典,重建字典通常并不会产生过多的性能开销。
您可能会发现,ADMIN_MOVE_TABLE 程序在从早期 DB2 版本升级数据库时尤其有用。您可以使用该程序在各表空间之间移动表,同时更改其他参数,如列数据类型。
管理磁盘空间消耗
对现有的表应用压缩功能可减少已经分配给这些表的页面数量。然而,应用压缩并不会对 DMS 或自动存储表空间的磁盘空间消耗产生立竿见影的效果。这些表空间只是具有更多未使用的空间。
首次实施行压缩或索引压缩时,最好对表空间容器利用率和预计数据增长率进行重新评估。执行压缩后,您的表空间利用率可能会大幅降低。您的数据库可能需要很长一段时间才能消耗最初释放的所有的空间。在这种情况下,您可能希望减少容器大小,为其他消费者腾出更多磁盘空间。 要有效地降低数据库的磁盘占用,必需降低表空间容器大小。决定可多大程度降低表空间容器大小的主要因素是“高水位线”。高水位线反映分配给表或用作空间映射条目的最高水平表空间位置。
当您创建表、扩展现有表或执行不使用临时表空间的经典表重组时,高水位线可能会上升。您可以通过丢弃或截断拥有高水位线处的盘区的表来降低高水位线。然而,丢弃、截断或重组其他对象不会影响高水位线,只会造成在高水位线下创建更多未用的盘区。只有在创建新对象或对象增长时,才能重用这部分高水位线下的未使用盘区。只能回收高于高水位线部分的未用盘区,并将其返回至操作系统。
因此,减少磁盘空间占用的关键在于,降低高水位线并截断表空间容器。本节的其余部分介绍了执行该项任务的机制。这些机制取决于使用哪种类型的表空间、使用哪个 DB2 版本创建这些表空间以及当前正在使用哪个 DB2 版本。