【发布时间】:2015-04-10 19:37:23
【问题描述】:
nodetool cfstats 显示以下输出:
Read Count: 746287
Read Latency: 8.772114064696291 ms.
Write Count: 135629
Write Latency: 0.052691931666531494 ms.
Pending Flushes: 0
Table: graphindex
** SSTable count: 230 **
Space used (live): 1532001
Space used (total): 1532001
Space used by snapshots (total): 0
SSTable Compression Ratio: 0.8071848230527264
Memtable cell count: 159436
Memtable data size: 2609278
Memtable switch count: 1
Local read count: 746287
** Local read latency: 8.773 ms **
Local write count: 135629
Local write latency: 0.053 ms
Pending flushes: 0
Bloom filter false positives: 1122
Bloom filter false ratio: 0.00000
Bloom filter space used: 39312
Compacted partition minimum bytes: 43
Compacted partition maximum bytes: 20501
Compacted partition mean bytes: 70
Average live cells per slice (last five minutes): 320.3775491198426
Maximum live cells per slice (last five minutes): 3183.0
** Average tombstones per slice (last five minutes): 7997.852040836836 **
** Maximum tombstones per slice (last five minutes): 27078.0 **
如您所见,sstable 的数量非常多。该表使用默认压缩 SizeTieredCompactionStrategy,最小阈值为 4,最大值为 32。
我的问题是:
考虑到节点中的数据量不大,sstables很小,为什么还有这么多sstables?这如何(何时)发生?
SizeTieredCompactionStrategy 何时真正触发压缩?在the other post 我发现:
默认情况下,小压缩可以在 Cassandra 创建的任何时候开始 磁盘上的四个 SSTables 用于列族。必须进行轻微压实 在 SSTable 总数达到 32 之前开始。
但是如果sstables的数量已经超过32了怎么办?手动运行主要压缩是唯一的解决方案吗?
我问的原因是由于大量的墓碑(上面输出中的最后一行)和 sstables,读取延迟变得非常糟糕。 gc_grace_period 保持低值,但由于 Cassandra 没有压缩 sstable,所以墓碑仍然存在。还是我错过了什么?
【问题讨论】:
-
我对数千个 sstables 也有同样的问题。你找到解释了吗?
-
很遗憾没有。我见过很多大小一模一样的sstables,它们没有被压实......
-
您是否尝试在每个节点上运行
nodetool enableautocompaction?我认为这将使 STCS 在后台运行。 -
@tbsalling 不...感谢您的提示,我必须尝试一下。如何检查它当前是打开还是关闭?
-
我不知道。但是在我启用自动压缩后,集群中的所有 10 个节点都开始压缩。 “某事”一定是把它关掉了——也许是被取消的维修还是什么?这仍然需要研究。
标签: cassandra