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
;否则,函数将返回错误。
注意
此要求仅适用于企业模式;在 Eon 模式下,它将被忽略。示例
时期取决于配置的时期推进间隔。如果一个时期包含三分钟的时间范围,则清除操作仅精确到指定时间戳前三分钟内:
=> SELECT SET_AHM_TIME('2008-02-27 18:13');
set_ahm_time
------------------------------------
AHM set to '2008-02-27 18:11:50-05'
(1 row)
注意
输出字符串的 –05 部分是时区值,即 UTC(协调世界时,习惯上称为格林威治标准时间或 GMT)的偏移量(以小时为单位)。在上一示例中,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 超过上一个完好的时期,则故障节点将不得不从头开始恢复。