重新初始化分段存储策略

可使用带有 INIT 子句的 ALTER FRAGMENT 语句来对非分段表定义并初始化新的分段存储策略,或对分段表转换现有分段存储策略。还可以使用 INIT 子句来更改分段表达式的求值顺序。

以下示例显示您可如何使用 INIT 子句来彻底地重新初始化分段存储策略。

假定最初创建了以下分段表:
CREATE TABLE account (acc_num INTEGER, ...)
      FRAGMENT BY EXPRESSION
            acc_num <= 1120 in dbspace1,
      acc_num > 1120 and acc_num < 2000 in dbspace2,
            REMAINDER IN dbspace3;

假定使用此分布方案运作了数个月后您发现 dbspace2 中包含的分段中的行数是另外两个分段所包含的行数的两倍。这种不平衡导致包含 dbspace2 的磁盘成为 I/O 瓶颈。

要校正这种情况,您决定修改分布,以使每个分段中的行数大致均匀。应修改分布方案以使其包含四个分段而不是三个分段。新的数据库空间 dbspace2a, 用于包含新分段,该新分段存储先前包含在 dbspace2 中的前半部分的行。dbspace2 中的分段包含它先前存储的后半部分的行。

要实现新的分布方案,首先要创建数据库空间 dbspace2a,然后执行以下语句:
ALTER FRAGMENT ON TABLE account INIT 
      FRAGMENT BY EXPRESSION
            acc_num <= 1120 in dbspace1,
            acc_num >  1120 and acc_num <= 1500 in dbspace2a,
            acc_num >  1500 and acc_num < 2000 in dbspace2,
            REMAINDER IN dbspace3;

执行此语句时,数据库服务器将立即废弃旧的分段存储策略,并且根据新的分段存储策略将表包含的行重新分布。

还可以使用 ALTER FRAGMENT 的 INIT 子句来执行下列操作:
  • 将单个非分段表转换为分段表
  • 将分段表转换为非分段表
  • 将通过任何策略进行分段的表转换为采用任何其他分段存储策略

有关更多信息,请参阅 GBase 8s SQL 指南:语法 中的 ALTER FRAGMENT 语句。