compaction问题

  • nebula 版本:3.6.0
  • 部署方式:分布式
  • 安装方式:RPM
  • 是否上生产环境:Y
  • 硬件信息
    • 磁盘 650G*12
    • CPU、内存信息 16C64G*12
  • 问题的具体描述
    目前集群每天定时手动执行一次compaction,前段时间有一次compaction的时候有大量数据写入,导致磁盘写满了,原本磁盘占用350g,共650G,磁盘直接写满导致compaction失败,判断是要留一半以上的磁盘才能执行完成,临时扩容后能成功执行。
    有一次没有临时扩容,磁盘满执行失败后第二天重新执行还是需要1倍的磁盘空间,但是这次compaction时所有数据写入都关闭了。
    所以想问下:
    1.为什么有的时候compaction,会复制一份一样大小的内容,什么情况下会发生。
    2.出现一次因为磁盘满了导致的compaction失败后,磁盘会自动恢复到原来大小,但是后续,即使暂停所有写入,再做compaction的时候,磁盘还是需要1倍的容量,这是什么原因呢?

或许你可以先看下 lsm tree 的 compaction 的机制可能就能知道为啥了

那是不是意味着我一定要保留一半以上的磁盘空间呢?不然按照compaction的机制,就有可能出现磁盘满导致compaction失败的情况

保留一半比较保险吧。注意开下 auto compaction

auto compaction和手动compaction是有啥区别吗?

一个是一把做,一个是一点点做。