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

返回本页常规视图.

时期函数

此部分包含 Vertica 专用的时期管理函数。

1 - ADVANCE_EPOCH

手动关闭当前时期并开始新的时期。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

ADVANCE_EPOCH ( [ integer ] )

参数

integer
指定要推进的时期数。

超级用户

注意

维护此函数主要是为了实现与 Vertica 较早版本的向后兼容性。

示例

以下命令将以 1 为增量递增时期编号:

=> SELECT ADVANCE_EPOCH(1);

2 - GET_AHM_EPOCH

返回 Ancient History Mark 所在 时期的编号。可以从物理存储中清除截至 AHM 时期(包括该时期)删除的数据。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

GET_AHM_EPOCH()

特权

示例

=> SELECT GET_AHM_EPOCH();
    GET_AHM_EPOCH
----------------------
 Current AHM epoch: 0
(1 row)

3 - GET_AHM_TIME

返回代表 Ancient History Mark 的 TIMESTAMP 值。可以从物理存储中清除截至 AHM 时期(包括该时期)删除的数据。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

GET_AHM_TIME()

特权

示例

=> SELECT GET_AHM_TIME();
                  GET_AHM_TIME
-------------------------------------------------
 Current AHM Time: 2010-05-13 12:48:10.532332-04
(1 row)

4 - GET_CURRENT_EPOCH

当前正在将数据(COPY、INSERT、UPDATE 和 DELETE 操作)写入到的时期。

返回当前时期的编号。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

GET_CURRENT_EPOCH()

特权

示例

=> SELECT GET_CURRENT_EPOCH();
 GET_CURRENT_EPOCH
-------------------
               683
(1 row)

5 - GET_LAST_GOOD_EPOCH

返回 上一个完好的时期的编号。如果数据库没有投影,此函数将返回错误。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

GET_LAST_GOOD_EPOCH()

特权

示例

=> SELECT GET_LAST_GOOD_EPOCH();
 GET_LAST_GOOD_EPOCH
---------------------
                 682
(1 row)

6 - MAKE_AHM_NOW

Ancient History Mark (AHM) 设置为允许的最大值。这使您可以清除所有已删除的数据。

MAKE_AHM_NOW 执行以下操作:

  • 推进时间。

  • 将 AHM 设置为 上一个完好的时期 (LGE),至少设置为执行 MAKE_AHM_NOW 时的当前时期。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

MAKE_AHM_NOW ( [ true ] )

参数

true
当以下条件之一为 true 时,允许 AHM 推进:
  • 一个或多个节点发生故障。

  • 一个投影正在通过另一个投影进行刷新(保留刷新)。

在这两种情况下,必须将此实参提供给 MAKE_AHM_NOW,否则 Vertica 会返回错误。如果在保留刷新期间执行 MAKE_AHM_NOW(true),Vertica 将回滚刷新操作并推进 AHM。

超级用户

在节点发生故障时设置 AHM

如果群集中的任何节点发生故障,则必须使用 true 实参调用 MAKE_AHM_NOW;否则,函数将返回错误。

在以下示例中,即使节点发生故障,MAKE_AHM_NOW 仍会推进 AHM:

=> SELECT MAKE_AHM_NOW(true);
WARNING:  Received no response from v_vmartdb_node0002 in get cluster LGE
WARNING:  Received no response from v_vmartdb_node0002 in get cluster LGE
WARNING:  Received no response from v_vmartdb_node0002 in set AHM
         MAKE_AHM_NOW
------------------------------
 AHM set (New AHM Epoch: 684)
(1 row)

另请参阅

7 - SET_AHM_EPOCH

Ancient History Mark (AHM) 设置为指定的时期。此函数允许从物理存储中清除已删除数据,包括 AHM 时期。

SET_AHM_EPOCH 通常用于测试。相反,请考虑使用 SET_AHM_TIME,此函数更易于使用。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

SET_AHM_EPOCH ( epoch, [ true ] )

参数

epoch
指定下列内容之一:
  • 设置 AHM 所在的时期数

  • 零 (0)(默认值)表示禁用 PURGE

true
允许 AHM 在节点关闭时推进。

超级用户

在节点发生故障时设置 AHM

如果群集中的任何节点发生故障,则必须使用 true 实参调用 SET_AHM_EPOCH;否则,函数将返回错误。

示例

以下命令可将 AHM 设置为数量为 12 的指定时期:

=> SELECT SET_AHM_EPOCH(12);

以下命令可将 AHM 设置为数量为 2 的指定时期,并且允许在节点发生故障时推进:

=> SELECT SET_AHM_EPOCH(2, true);

另请参阅

8 - SET_AHM_TIME

Ancient History Mark (AHM) 设置为与启动程序节点上指定时间相对应的时期。此函数允许从物理存储中清除历史数据,包括 AHM 时期。 SET_AHM_TIME 返回一个表示 AHM 时期终点的 TIMESTAMPTZ。

这是元函数。您必须在顶级 SELECT 语句中调用元函数。

行为类型

易变

语法

SET_AHM_TIME ( time, [ true ] )

参数

time
会自动转换为相应时期数的 TIMESTAMP/TIMESTAMPTZ 值。
true
允许 AHM 在节点关闭时推进。

超级用户

在节点发生故障时设置 AHM

如果群集中的任何节点发生故障,则必须使用 true 实参调用 SET_AHM_TIME;否则,函数将返回错误。

示例

时期取决于配置的时期推进间隔。如果一个时期包含三分钟的时间范围,则清除操作仅精确到指定时间戳前三分钟内:

=> SELECT SET_AHM_TIME('2008-02-27 18:13');
           set_ahm_time
------------------------------------
 AHM set to '2008-02-27 18:11:50-05'
(1 row)

在上一示例中,AHM 时期实际于 18:11:50 结束,大约是指定时间戳前一分钟。这是因为 SET_AHM_TIME 选择了在指定时间戳或之前结束的时期。它没有选择在指定时间戳之后结束的时期,因为这样会清除 AHM 之后三分钟的已删除数据。

例如,在仅使用小时和分钟的情况下,假设时期 9000 从 08:50 运行至 11:50,时期 9001 从 11:50 运行至 15:50。 SET_AHM_TIME('11:51') 选择时期 9000,因为要在指定时间戳前一分钟左右结束。

在下一个示例中,假设某个节点在 2017 年 1 月 1 日上午 11:00:00 发生故障。中午,您将 AHM 推进到 11:15:00,但节点仍处于故障状态。

假设您尝试使用以下命令设置 AHM:

=> SELECT SET_AHM_TIME('2017-01-01 11:15:00');

然后您将收到一条错误消息。Vertica 会阻止您将 AHM 移动到超过节点出现故障的位置。Vertica 返回此错误以防止将 AHM 推进到超过故障节点的上一个完好的时期。您可以通过提供可选的其他参数来强制执行 AHM 推进:

=> SELECT SET_AHM_TIME('2017-01-01 11:15:00', true);

但是,如果强制 AHM 超过上一个完好的时期,则故障节点将不得不从头开始恢复。

另请参阅