- 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是有啥区别吗?
一个是一把做,一个是一点点做。