nodetool garbagecollect 实际上在做什么

what does nodetool garbagecollect is actually doing

我正在尝试在 C* 中释放一些磁盘 space。
我删除了很多创建了很多墓碑的行。
我是 运行 nodetool garbagecollect 并且想知道这个工具在幕后做了什么。我读过它删除了墓碑正在隐藏的实际数据,但没有删除墓碑(将在 gc_grace_seconds 后清除)。 那是准确的吗? garbagecollect 工具与 gc_grace_seconds 参数没有任何关联? 垃圾收集实际上是如何释放磁盘 space 的?

关于此工具的工作原理和作用的文档不多。

任何帮助将不胜感激

在 Cassandra 中删除数据总是会添加更多数据,因此您需要小心处理。

nodetool garbagecollect 执行 single-sstable 压缩以删除覆盖或逻辑删除的数据。对于每个 sstable,它将创建一个新的 sstable,并清除不需要的数据。默认情况下,garbagecollect 会删除已删除或更新为新数据的行或分区。如果指定了 -g CELL 选项,它也可能删除已删除或更新的单元格值,但这将需要更多资源 (I/O CPU)。此命令还可以删除过期的逻辑删除(早于 gc_grace_seconds),但不能删除新的逻辑删除。此外,删除墓碑还有其他限制。

如果过期的墓碑仍然存在,那么唯一的主要压缩可能有助于驱逐它们,例如,通过 运行 nodetool compact -s 对个人 tables,但是你需要确保您有足够的 space - 与 table 本身大小相同。