cassandra cfstats:活动空间值和总使用空间值之间的差异

xyhw6mcr  于 2021-06-14  发布在  Cassandra
关注(0)|答案(3)|浏览(372)

在大约1个月的时间里,我在nodetool cfstats输出中看到了cassandra集群中3个节点的已用空间值(我的复制因子为3):

Pending Tasks: 0
            Column Family: BinaryData
            SSTable count: 8145
            Space used (live): 787858513883
            Space used (total): 1060488819870

对于其他节点,我看到了很好的值,例如:

Space used (live): 780599901299
            Space used (total): 780599901299

您可以注意到活动空间和总空间之间有25%的差异(~254gb)。似乎我有很多垃圾在这3个节点,不能压缩的原因。我所说的列族有一个leveledcompression策略,它的表大小为100mb:

create column family BinaryData with key_validation_class=UTF8Type 
  and compaction_strategy=LeveledCompactionStrategy 
  and compaction_strategy_options={sstable_size_in_mb: 100};

请注意,在所有三个节点上停留一个月的总值。我依靠Cassandra自动规范化数据。
我试图减少空间的内容(没有结果):
节点工具清理
节点工具维修-pr
nodetool compact[keyspace]binarydata(不会发生任何情况:leveledcompression策略忽略主要压缩)
我还应该做些什么来清理垃圾和腾出空间?

nvbavucw

nvbavucw1#

好的,我有个解决办法。看起来像是Cassandra的问题。首先,我深入研究了cassandra1.1.9的源代码,注意到cassandra在节点启动期间对sstables执行了一些重新分析。它删除标记为compacted的sstables,重新计算已用空间,并执行其他一些操作。
所以,我所做的是重新启动3个问题节点。重新启动完成后,总值和活动值立即变为相等,然后开始压缩过程,现在使用的空间正在减少。

n8ghc7c1

n8ghc7c12#

对于leveledcompactionstrategy,您希望将sstable大小设置为最大15mb左右。100mb将给您带来大量不必要的磁盘io,并且会导致数据需要很长时间才能传播到更高的级别,从而使删除的数据长时间保留。
在cassandra 1.1中,由于删除量很大,很可能会遇到一些小压缩的问题,而在清除已删除的数据方面做得不好。在cassandra1.2中,有一系列修复程序用于在较小的压缩过程中清理墓碑。尤其是和lcs结合的时候。我想看看在dev/qa环境中测试cassandra1.2。1.2仍然有一些问题需要解决,所以您需要确保安装新版本,甚至运行git中的1.2分支,以保持最新,但是对于您的数据大小和使用模式,我认为它会给您一些明确的改进。

db2dz4w8

db2dz4w83#

分级压缩创建一个固定的、相对较小的表,在您的情况下,100mb被分组为“级别”。在每个级别中,sstables保证不重叠。每一关都是前一关的十倍大。
所以基本上从这句话提供的Cassandra文件,我们可以得出结论,可能是在你的情况下,十倍大的水平背景尚未形成,导致没有压缩。
接下来是第二个问题,因为您将复制因子保持为3,所以数据有3个重复的副本,对于这些副本,您有这个异常。
最后是活动空间和总空间之间25%的差异,正如您所知,这是由于过度删除操作。

相关问题