合并表中的可用空间

压缩表或分段时,可以合并(重新打包)表和分段中的可用空间,或单独合并可用空间,而不进行压缩。

可以使用 repackrepack_offline 自变量,以联机或脱机方式执行重新打包操作。 repack_offline 操作与 repack 操作相同,但当 GBase 8s 在表或分段上持有互斥锁定期间执行操作时例外。 此操作在完成之前,会阻止对数据的所有其他访问。

如果执行 repack 操作时在表或分段中进行了轻量级追加,那么 repack 操作不会在表或分段的末尾完成空间合并。 repack 操作无法完成的原因是,在已执行了 repack 操作的位置中添加了新的扩展数据块,因此空间无法返还给数据库空间。要完成 repack 进程,必须在完成轻量级追加活动之后,再运行一次 repack 操作。第二次运行的 repack 操作将在第一次 repack 操作工作的基础上构建。

完成 repack_offline 操作之前删除或禁用索引可以缩短服务器完成此操作所用时间量。之后,可以重新创建或重新启用索引,最好是利用 PDQ。先删除或禁用索引,再重新创建或启用索引,要比不这样做而直接完成 repack_offline 操作的速度更快。

先决条件
  • 您必须可以连接到 sysadmin 数据库(缺省情况下只有用户 gbasedbt 可连接),并且必须是 DBSA。
  • 如果希望运行的任何工作负载(包括但不限于 repack 或 repack_offline 操作)耗用日志文件的速度超过每 30 秒一个文件,请将日志配置为比当前大小更大。

要合并表中的可用空间,请执行以下操作:

  1. 运行使用 table repacktable repack_offlinefragment repackfragment repack_offline 命令自变量的 admin()task() 函数。

    例如,为表指定:

    EXECUTE FUNCTION task(“table repack”, “table_name”,
    “database_name”, “owner_name”);

    必须指定表名。数据库和所有者名称可选。 如果不指定数据库或所有者名称,GBase 8s 将使用当前数据库和所有者名称。

    例如,为分段指定:

    EXECUTE FUNCTION task(“fragment repack_offline”, “partnum_list”);

    partnum_list 是属于同一个表的分区号的空格分隔列表。

  2. (可选)扩展自变量以在以下任意组合中包含 compressshrink
    • compress repack
    • compress repack shrink
    • repack shrink

以下示例显示了这样的一个命令:指示 GBase 8s 合并所有者为“bob”的一个“music”数据库中名称为“opera”的表中的可用空间。

EXECUTE FUNCTION task("table repack","opera","music","bob");

以下示例显示了这样的一个命令:指示 GBase 8s 以脱机方式合并所有者为“bob”的一个“music”数据库中名称为“folk”的表中的可用空间。

EXECUTE FUNCTION task("table repack_offline","folk","music","janna");
以下示例显示这样的一个命令:指示 GBase 8s 合并可用空间,并将空间返还给数据库空间中分区号为 14680071 的分段。
EXECUTE FUNCTION task("fragment repack shrink", "14680071");

可以取消使用 compress 自变量的命令,例如在 DB-Access 中输入 CTRL-C。之前中断命令之后,可重新发出带 repackrepack_offline 自变量的命令。(压缩和重新打包操作将记录,但是在较小的部分中运行。)