在 Aerospike 中查找 TTL 为 0 的记录

Find records with TTL 0 in Aerospike

我的 aerospike 集群达到 50% 的磁盘使用率并且开始清除记录。 我怀疑我不会每天将那么多记录写入 cluster.Per 记录,我们设置了 90 天 TTL,命名空间的默认 TTL 是 30 天。

我担心的是,我假设我们有 TTL 为 0 的记录,这些记录没有被驱逐,甚至没有被使用。 如何审核和查找 TTL 为 0 的记录(对象数),应立即将其更改为默认 TTL。

谢谢。

您查找以下日志行:

2016 年 9 月 2 日 15:14:00 GMT:INFO (nsup):(thr_nsup.c:1114) {test} 记录:3725361、0 0-vt、0(0) 已过期、0(0 ) 逐出,0(0) 集删除。逐出 ttl:0。等待:0,0,0。总时间:765 毫秒

这是命名空间主管报告一个名为 'test' 的命名空间,它说有 372561 条记录,其中有 0 条带有 0-vt 或无效时间。

TTL 是现在时间和记录的无效时间(何时过期)之间的增量,因此无效时间为 0 的记录永远不会过期或被驱逐。

两件事:

Aerospike 日志会告诉您有多少记录没有过期,请在以下行中查找“0 v-t”记录的数量(在我的示例中为 0):

{ns-name} Records: 37118670, 0 0-vt, 0(377102877) expired, 185677(145304222) evicted, 0(0) set deletes, 0(0) set evicted. Evict ttls: 34560,38880,0.118. Waits: 0,0,8743. Total time: 45467 ms

这将很快达到该命名空间的 'proportion' 个非过期记录(因为它旁边有记录总数)。

为了完全识别这些记录是哪些记录并可能设置过期时间,您必须扫描记录并更新它们...java 中有示例代码可以扫描一组(或一组) this repo 上的命名空间)。虽然可能还有其他更优雅的解决方案,但它们仍然需要编写一些代码。