压缩和解压缩数据

此方案显示如何运行 SQL 管理 API 命令来管理压缩和存储优化。

在该方案中,用户 mario 所有的数据库 music 内有一个表 rock

先决条件

要同时压缩行数据以及数据库空间中的简单大对象:

要压缩和解压缩行数据,请执行以下操作:

  1. 不确定是否要压缩 rock 表,那么可以运行以下命令来检查压缩该表可节约的空间量:
    EXECUTE FUNCTION task("table estimate_compression", "rock", "music", "mario");  

    复审生成的报告,其中指示可为 rock 表当前使用的空间节约 75%。您决定压缩表。

  2. 压缩数据之前,希望创建压缩字典,其中包含 GBase 8s 用于压缩 rock 表中的数据的信息。运行以下命令
    EXECUTE FUNCTION task("table create_dictionary", "rock", "music", "mario");

    如果不作为单独的步骤来创建压缩字典,GBase 8s 将在您压缩数据时自动创建字典。

  3. 您决定要压缩 rock 表中的数据以及数据库空间中的简单大对象,合并这些数据,然后将可用空间返还给数据库空间。 可以运行以下命令:
    EXECUTE FUNCTION task("table compress repack shrink", "rock", "music", "mario");
    如果决定仅压缩行数据或仅压缩数据库空间中的简单大对象,请通过将 rowsblobs 插入到单词 compress 之后或字符串 compress repack shrink 之后来调整命令。例如:
    • 要仅压缩行数据,请指定:
      EXECUTE FUNCTION task("table compress rows","rock","music","mario");
    • 要仅压缩行数据,然后重新打包和收缩数据,请指定:
      EXECUTE FUNCTION task("table compress repack shrink rows",
      "rock","music","mario";
    • 要仅压缩数据库空间中的简单大对象,请指定:
      EXECUTE FUNCTION task("table compress blobs","rock","music","mario");

    压缩现有行和简单大对象之后,GBase 8s 会合并表末尾留下的可用空间,然后从表中除去这些可用空间,从而将该空间返还给数据库空间。

    如果简单大对象或行 /* 在压缩后并不会变小,那么数据库服务器不会对其进行压缩。

  4. 现在假设必须解压缩数据。可以运行以下命令:
    EXECUTE FUNCTION task("table uncompress", "rock", "music", "mario");
  5. 您希望除去压缩字典。
    1. 验证 Enterprise Replication 是否不需要该字典。

      如果 Enterprise Replication 确实需要这些已解压缩或已删除的表和分段的压缩字典,请勿除去这些字典。

    2. 归档其中包含带有压缩字典的表或分段的数据库空间。
    3. 运行以下命令:
      EXECUTE FUNCTION task("table purge_dictionary", "rock", "music", "mario");

按照压缩和解压缩行中数据以及数据库空间中简单大对象的相同方式来压缩和解压缩表分段中的数据以及数据库空间中的简单大对象,但是不同之处在于,运行的命令具有以下格式:

EXECUTE FUNCTION task("fragment compression_arguments", "partnum_list");

如果要在不执行压缩或重新压缩的情况下合并可用空间或返还可用空间,可运行一个命令,指示服务器重新打包、收缩或重新打包并收缩。