2016-09-30 94 views
1

我有一对卡桑德拉表上的墓碑压实不断运行,我相信这是卡桑德拉进程高CPU使用率背后的原因。Cassandra不断的墓碑压实的表

设置我有包括:

compaction = {'tombstone_threshold': '0.01', 
'tombstone_compaction_interval': '1', 'class': 
'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'} 
default_time_to_live = 1728000 
AND gc_grace_seconds = 864000 
AND max_index_interval = 2048 
AND memtable_flush_period_in_ms = 0 
AND min_index_interval = 128 
AND read_repair_chance = 0.0 

在表中的一个我写的每分钟的数据吧。由于设置了TTL,因此整组行也会每分钟过期。

  • 是不断夯实由于低tombstone_thresholdtombstone_compaction_interval

  • 能有人给的详细解释tombstone_thresholdtombstone_compaction_interval。 Cassandra文件没有很好地解释它。

回答

3

因此,墓碑压实可以触发假设SSTable至少和压实间隔一样大。随着事物被压缩,SStables被创建。阈值是多少sstable是墓碑之前压缩只是为了墓碑而不是加入sstables。

你正在使用水平,并有20天ttl它看起来像。你会做很多压实以及墓碑压实,以保持紧跟。水平将是最好的,以确保您没有旧的墓碑吃掉默认压缩机的磁盘空间。

如果此数据是听起来像是的时间序列,您可能需要考虑使用TWCS来代替。这将创建一个“桶”,每个桶都被压缩一次,所以一旦该表中的数据的ttl到期,压缩器可以删除整个sstable,效率更高。

TWCS可以作为jar来使用,需要添加到2.1的classpath中,我们目前在生产中使用它。它也被加入到Cassandra的3.x系列中。

+0

感谢您的解释和TWCS建议。你能否详细说明为什么你说20天的TTL将导致一吨的压实和墓碑压实。 – GenerousJoker