关于3.1.0版本TTL过期后点不会过期且占用磁盘空间的问题

关于3.1.0版本TTL过期后点不会过期且占用磁盘空间的问题

  • nebula 版本:3.1.0
  • 部署方式: 单机
  • 安装方式:源码编译
  • 是否为线上版本:Y
  • 硬件信息
    • 磁盘 SSD 5T
    • CPU 64核
    • 内存 503GB
  • 问题的具体描述
    点数据在TTL之后不会删除,会留下一个不含Tag的空点,即使完成手动Compaction之后,空点仍然存在且占用空间。
    根据文档描述,TTL
    如果一个点仅有一个 Tag,点上的一个属性过期,点也会过期。然而实测与文档描述不符。
    复现如下:
    1.添加点

    2.点过期仍能查到空点

    使用scan方式也能扫描到

    3.执行compact之后

    仍然能查到空点

    但是使用扫描查不到了

感觉这一块的逻辑挺奇怪的。留下过期空点,也会占用磁盘空间。实测260亿个过期点,压缩之后占用空间约150GB。想问下这一块有没有什么后续方案和计划,之后的版本更新,这些过期点会怎么处理

  1. 按数据量来看这个compact时间有点异常,还是说这个是一个小的测试集,数据很小?
  2. 对于过期数据的看护用例我看似乎当前都是通过fetch来验证的,我再去看一下match是否会有问题。如果不是更改设计,可能确实有bug,我们会先确认,当然如果你已经确认,也可以提个issue给nebula 仓库~(关于单属性点属性过期和文档不符这个我去确认下)

创建该 tag 时的 schema 能给下吗?包括:

  1. ttl 是哪个字段?duration 是多少?
  2. 索引是建立在这个 tag 哪个字段上的?

这个是在本地复现的,只有一条数据,其实fetch也会有一样的效果

核心的问题是 3.0 我们允许有没有任何 tag 的 vertex key。
这部分 key 不会随 ttl 被删除,只能手动删。

@MuYi

2 个赞

CREATE SPACE tl (partition_num=20, replica_factor=1, vid_type=FIXED_STRING(30));

CREATE TAG IF NOT EXISTS kv_wrapper(value string not null, update_time timestamp) TTL_DURATION = 10, TTL_COL = “update_time”;

复现问题的时候TTL_DURATION设置的非常小,线上的TTL设置为7天

嗯,是的,这里是需要修改的

想问下大概的计划,之后版本中,过期的无tag key会删除吗,大概哪个版本会修改这一块?

+1

https://github.com/vesoft-inc/nebula/pull/4629

从 v3.3 开始不再支持无 tag 的点(上面 pr),相对应的这个 ttl 问题也就变相解决了。