我在锡拉数据库中使用sizetieredcompression策略。我删除了特定令牌范围内的一半数据(比如x到y)。我的gc\u grace\u seconds设置为6小时。我想清除在这个标记范围内创建的所有墓碑。如果我跑了 nodetool compact --start-token x --end-token y keyspace table
在gc\u grace\u秒之后,在集群中的所有节点上,会发生什么?它会删除墓碑吗?它会消耗多少磁盘空间?会和你的一样吗 nodetool compact
主要的压缩需要50%以上的空间?
2条答案
按热度按时间cwtwac6a1#
锡拉关于
nodetool compact
(见https://docs.scylladb.com/operating-scylla/nodetool-commands/compact/)不幸的是,连代币范围选项都没有。但是Cassandra的文件(https://cassandra.apache.org/doc/latest/operating/compaction/index.html)解释所谓的子范围压缩的作用:只压缩给定的子范围是可能的—如果您知道某个令牌行为不正常,这可能会很有用—要么收集许多更新,要么收集许多删除(
nodetool compact -st x -et y
)将选取包含x和y之间范围的所有SSTable,并对这些SSTable发出压缩。对于stc,这很可能包括所有sstable,但是对于lcs,它可以对sstable的子集进行压缩。对于stc,常见的情况是所有sstable都有来自整个令牌环的令牌,因此nodetool compact调用通常会调用所有sstable的完全主压缩。令牌范围选项可能不会免除任何sstable的压缩。因此,临时磁盘空间开销将和stc一样:在压缩结束时,既有旧的sstable,也有新的sstable。您假设新的sstable只有原始数据的一半,因此新sstable的大小大约是旧sstable的一半,所以这可能就是您所问的“50%”。
2cmtqfgy2#
要删除墓碑,还需要运行
nodetool repair
. 有关维修程序的详细信息,请参见此处。基本上,修复会比较节点之间的数据,以便墓碑可以安全地过期。压缩所需的空间取决于特定的工作负载,如果没有有关工作负载的数据,就不可能提供答案。但考虑到安全边际,2x是一个安全的赌注。在完全压缩之后,使用的空间将是最小的,因为每个节点上只保存一个数据副本。