DB2 10.5 for Linux, UNIX, and Windows

列组织表进行空间回收

列组织表删除了数据时,其页面保存已全部删除的数据的存储器扩展数据块会作为空间回收的候选项。空间回收进程会找到这些扩展数据块,并将它们持有的页面返回给表空间存储器,在此情况下,表空间中的任何表随后都可复用这些页面。

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

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

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

在删除之后进行空间回收

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

在更新之后进行空间回收

当更新列组织表中的某行时,会先删除该行,然后在该表末尾处插入该行的新副本。这意味着,已更新的行耗用的空间与该行的更新次数成比例,直到进行空间回收。必须删除进行了更新的扩展数据块中的所有行,然后才能进行任何空间回收。