为什么我的CockroachDB磁盘使用率没有下降?



我从我的CockroachDB数据库中删除了一堆数据,但是磁盘使用并没有减少。

1。可保留MVCC历史数据

CockroachDB实现了多版本并发控制(MVCC),这意味着它维护了一行所有突变的历史。此历史记录可用于多种功能:事务隔离、历史AS of SYSTEM TIME查询、增量备份、变更提要、集群复制等等。保留历史记录的要求意味着蟑螂"软"删除数据:数据被墓碑记录标记为已删除,因此蟑螂将不再向查询显示已删除的行,但旧数据仍然存在于磁盘上。

MVCC保存的历史记录的长度由两个因素决定:gc。包含数据的区域的时间戳,以及是否存在受保护的时间戳。您可以检查范围的统计数据(例如,在DB控制台)来观察key_bytes,value_byteslive_byteslive_bytes指标反映的数据不是垃圾。(key_bytes+value_bytes)-live_bytes的值将告诉您在某个范围内驻留了多少MVCC垃圾。

当数据被删除的时间至少达到gc.ttlseconds指定的时间时,蜚蠊将认为它有资格进行"垃圾收集"。异步地,蜚蠊将对包含大量垃圾的范围执行垃圾收集并删除垃圾。请注意,如果存在备份或其他尚未完成但需要数据的进程,这些进程可以通过设置受保护的时间戳来阻止旧数据的垃圾收集,直到这些进程完成。

2。数据可能正在被压缩

当MVCC垃圾通过垃圾收集被删除时,数据仍然没有从文件系统中物理移除。从文件系统中删除数据需要重写包含数据的文件,这可能会很昂贵。蟑螂存储引擎具有对数据进行压缩的启发式方法,并在积累了足够的垃圾以保证压缩时删除已删除的行。存储引擎总是努力将过时数据的开销(称为空间放大)限制在不超过10%。如果刚删除了大量数据,存储引擎可能需要一些时间来压缩文件并恢复此属性。

关于MVCC的蟑螂文档有更多的信息。

最新更新