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 超过上一个完好的时期,则故障节点将不得不从头开始恢复。

另请参阅