STCS:如何提高压实性能?

STCS : how I can improve compaction performance?

我有六个节点的 Cassandra 集群,它承载了一个不可变的大型列族 (cql table)(因为它是一种 历史 table 从应用的角度来看)。这样table大约是400Go的压缩数据,不算多!

所以在截断 table 之后,然后在其中摄取应用程序历史数据,我在每个节点上触发 nodetool compact,以便拥有最好的通过减少 SSTables 的数量来提高读取性能。压缩策略是STCS.

在 运行 nodetool compact 之后,我触发 nodetool compactionstats 来跟踪压缩进度:

 id  compaction type    keyspace        table            completed total    unit  progress
 xxx Compaction         mykeyspace      mytable          3.65 GiB  1.11 TiB bytes 0.32%

小时后我在同一个节点上:

 id  compaction type    keyspace        table            completed total    unit  progress
 xxx Compaction         mykeyspace      mytable          4.08 GiB  1.11 TiB bytes 0.36%

所以压缩过程似乎有效,但是非常慢

即使使用 nodetool setcompactionthreshold -- 0,压缩仍然非常缓慢。此外,CPU 似乎习惯于 100% 因为压缩。

问题:

  1. 我可以调整哪些配置参数来尝试提高压缩性能?
  2. 压缩发生时的 100% CPU 是否与 GC 压力有关?
  3. 如果压缩太慢,是否增加节点,或者每个节点增加CPU/RAM?有帮助吗?

压缩的性能取决于底层硬件 - 它的性能取决于使用的磁盘类型等。但它也取决于允许压缩线程的数量 运行,以及配置的吞吐量用于压实线程。从命令行压缩吞吐量由 nodetool setcompactionthroughput 配置,而不是您使用的 nodetool setcompactionthreshold。并发压缩器的数量是用 nodetool setconcurrentcompactors 设置的(但它在 3.1,IIRC 中可用)。您还可以在 cassandra.yaml.

中配置默认​​值

因此,如果您有足够的 CPU 功率和良好的 SSD 磁盘,那么您可以提高压缩吞吐量和压缩器的数量。