按列组织的 表的空间回收

当数据从列式表中删除时,存储范围中保存已删除数据的页面将成为空间回收的对象。 空间回收进程会找到这些扩展数据块,并将它们持有的页面返回给表空间存储器,在此情况下,表空间中的任何表随后都可复用这些页面。

您可以通过对 REORG TABLE 命令指定 RECLAIM EXTENTS 选项来手动启动此过程,也可以使用自动化方法。 如果将 DB2_WORKLOAD 注册表变量设置为 ANALYTICS,那么将应用缺省策略,并设置 auto_reorg 数据库配置参数,以使所有 按列组织的 表的自动回收处于活动状态。 有关更多信息,请参阅 启用自动表和索引重组配置自动维护策略

可使用重组监视基础结构来监视表重组操作的进度。 ADMIN_GET_TAB_INFO 表函数返回表上的可回收空间量的估算,可使用该估算来确定有必要执行表重组操作的时间。

注: 由于来自 ADMIN_GET_TAB_INFO 表函数的 RECLAIMABLE_SPACE 输出是适用于运行 RUNSTATS 命令的时间的估计值,因此对于 按列组织的 表,此信息可能已过时。

在删除之后进行空间回收

删除 按列组织的 表中的行时,将以逻辑方式删除该行,而不是以物理方式删除该行。 因此,由已删除的行使用的空间对于后续事务不可用,并且保持不可用,直到进行空间回收。 例如,请考虑创建表并在批处理操作 A 中插入一百万行的情况。 批处理操作 A 后磁盘上的表大小为 5 MB。 在一些时间之后,批处理操作 B 插入另外的 1 百万行。 现在,该表在磁盘上耗用了 10 MB 空间。 然后,会删除通过批处理操作 A 插入的所有行,并且磁盘上的表大小保持为 10 MB。 如果第三个批处理操作(即,批处理操作 C)将另外的 1 百万行插入到该表中,那么需要 5 MB 额外空间。 (使用 按行组织 的表,在批处理操作 C 中插入的行将使用从批处理操作 A 中删除的行腾出的空间。) 需要发出 REORG TABLE 命令,以回收之前由通过批处理操作 A 插入的行使用的空间。 要在删除扩展数据块中的所有行之后,才能回收该扩展数据块。
注意 :当从列式表中删除大对象(LOB)数据时,数据存储不会返回到表空间供重复使用或释放供将来使用。

在更新之后进行空间回收

当更新了列式表格中的一行时,首先会删除现有行,然后将新行插入表格末尾。 这意味着,已更新的行耗用的空间与该行的更新次数成比例,直到进行空间回收。 必须在删除已更新行所在扩展数据块中的所有行之后,才能回收该扩展数据块。

对表自动重新压缩之后进行的空间回收

针对表的“自动重新压缩”功能使用新的压缩守护程序来异步检查表,表中包含在创建压缩字典之前插入的行。 然后,它将在原地重新压缩这些行,从而留下空的扩展数据块。 这些空地日后可通过 REORG TABLE... RECLAIM EXTENTS 进行回收。 然后,所回收的已释放扩展数据块可供同一表空间中的其他表重新使用。