这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

清除删除的数据

在 Vertica 中,删除操作不会从物理存储中移除行。 DELETE 会将行标记为已删除,UPDATE 也是如此,后者会合并删除和插入操作。在这两种情况下,Vertica 都会将丢弃的行保留为历史数据,在清除这些历史数据之前,仍然可通过历史查询访问这些数据。

保留历史数据的成本有双部分:

  • 向已删除的行和删除标记分配磁盘空间。

  • 典型(非历史)查询必须读取并跳过已删除的数据,这可能会影响性能。

清除操作将从物理存储中永久移除历史数据,并释放磁盘空间供重复使用。只有 Ancient History Mark (AHM) 之前的历史数据才符合清除条件。

可以通过两种方式清除数据:

在这两种情况下,Vertica 都会清除直到并包括 AHM 时期的所有历史数据,然后重置 AHM。有关 Vertica 如何使用时期的详细信息,请参阅时期

1 - 设置清除策略

清除数据的首选方法是建立一个策略来确定哪个已删除的数据符合清除条件。当 Tuple Mover 执行 合并操作时,会自动清除符合条件的数据。

Vertica 提供了两种方法用于确定已删除的数据何时符合清除条件:

  • 指定保存删除数据的时间

  • 指定保存的 时期

指定保存删除数据的时间

指定保存删除数据的时间是确定可以清除哪些已删除数据的首选方法。默认情况下,仅当节点处于关闭状态时,Vertica 才会保存历史数据。

要更改保存已删除数据的指定时间,请使用 HistoryRetentionTime 配置参数

=> ALTER DATABASE DEFAULT SET HistoryRetentionTime = {seconds | -1};

在上述语法中:

  • Seconds 是保存已删除数据的时长(单位为秒)。

  • -1 表示您不想使用 HistoryRetentionTime 配置参数确定哪些已删除数据符合清除条件。如果您更想使用其他方法 (HistoryRetentionEpochs) 来确定可以清除哪些已删除数据,可使用此设置。

以下示例将历史时期保留级别设置为 240 秒:

=> ALTER DATABASE DEFAULT SET HistoryRetentionTime = 240;

指定保存的时期数

除非您有理由限制时期数,否则 Vertica 建议您指定保存删除数据的时间。

要通过 HistoryRetentionEpochs 配置参数指定保存的历史时期数:

  1. 关闭 HistoryRetentionTime 配置参数:

    => ALTER DATABASE DEFAULT SET HistoryRetentionTime = -1;
    
  2. 通过 HistoryRetentionEpochs 配置参数设置历史时期保留级别:

    => ALTER DATABASE DEFAULT SET HistoryRetentionEpochs = {num_epochs | -1};
    
    • num_epochs 是要保存的历史时期数。

    • -1 表示您不想使用 HistoryRetentionEpochs 配置参数从时期映射中截取历史时期。默认情况下,HistoryRetentionEpochs 设置为 -1。

以下示例将要保存的历史时期数设置为 40:

=> ALTER DATABASE DEFAULT SET HistoryRetentionEpochs = 40;

将立即在数据库群集内的所有节点上实施修改。您无需重新启动数据库。

有关更多详细信息,请参阅时期管理参数。有关 Vertica 如何使用时期的信息,请参阅时期

禁用清除

如果要保留所有历史数据,可按以下方式将历史时期保留参数的值设置为 -1:

=> ALTER DABABASE mydb SET HistoryRetentionTime = -1;
=> ALTER DATABASE DEFAULT SET HistoryRetentionEpochs = -1;

2 - 手动清除数据

可以按如下方式手动清除已删除的数据:

  1. 设置清除已删除数据的截止日期。首先,调用以下函数之一以验证当前的 Ancient History Mark ( AHM):

  2. 使用以下函数之一将 AHM 设置为所需的截止日期:

    如果调用 SET_AHM_TIME,请记住指定的时间戳将映射到默认具有三分钟粒度的时期。因此,如果将 AHM 时间指定为 2008-01-01 00:00:00.00,则 Vertica 可能会清除 2008 年前三分钟的数据,或保留 2007 年最后三分钟的数据。

  3. 使用以下函数之一从所需的投影中清除已删除的数据:

    Tuple Mover 执行 合并操作以清除数据。Vertica 会定期调用 Tuple Mover 以执行合并操作,如 Tuple Mover 参数所配置的那样。可以通过调用函数 DO_TM_TASK 来手动调用 Tuple Mover。

有关 Vertica 如何使用时期的详细信息,请参阅时期