微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么主要压缩没有可用空间,但垃圾收集呢?

如何解决为什么主要压缩没有可用空间,但垃圾收集呢?

我们有一个带有 RF 3 的三节点 Cassandra 集群。有一个带有 SizeTieredCompaction 策略的表。在某些情况下,在此表上执行主要压缩 <?PHP echo $row['purchase-price'] ?> 不会释放磁盘,但执行 nodetool compact --split-output -- <keyspace> <table> 会释放磁盘。 gc_grace_seconds 设置为 1 小时,default_time_to_live 设置为 3 小时:

‍‍

nodetool garbagecollect -- <keyspace> <table>

有人知道原因吗?

提前致谢!

解决方法

Nodetoolgarbagecollect 执行单个 sstable 压缩,因此它可以缩小磁盘上单个文件的大小。 Garbagecollect 从 Cassandra 2.10 开始可用,默认情况下会删除已删除的分区和行。如果您指定 -g cell,它还会删除覆盖或删除的单元格。

Nodetool compact Compaction 将几个(通常是四个)较小的 sstable 组合在一起,同时还清理覆盖和过期的数据。大小分层压缩需要 min_threshold 表来组合。

Compaction 还可以查看 sstable 中可丢弃墓碑数量的估计,如果比率高于 tombstone_threshold(默认为 0.2 或 20%),则压缩单个表

关于紧凑状态的文档:

...当磁盘上有许多由表子属性 min_threshold 配置的类似大小的 SSTable 时,会触发次要压缩。

DSE 6.7 nodetool compact

因此,garbagecollect 将始终运行,但如果 min_threshold(默认值为 4)不满足且可丢弃墓碑比率不是很高,compact 将忽略表。此外,垃圾收集需要较少的可用磁盘空间来运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。