Cassandra nodetool"compactionstats"显示值的含义

Chr*_*ank 6 cassandra nodetool

我找不到关于"compactionstats"的文档:

在使用时nodetool compactionstats,completedtotal列上的数值是什么意思?我的列族的总数据大小约为360 GB,但我的压缩状态显示:

pending tasks: 7
compaction type  keyspace   column family   completed      total           unit   progress
Compaction       Test       Message         161257707087   2475323941809   bytes  6.51%
Run Code Online (Sandbox Code Playgroud)

虽然我看到"完成"缓慢增加(也是进展;-).

但这个"总计"是如何计算出来的?当我只有360 GB的数据时,为什么它是2.5 TB?

Mar*_*ano 3

您必须开启压缩。 total是包含被压缩在一起的 sstable 集合的未压缩字节总数。如果您 grep cassandra 日志文件中包含以下内容的行,Compacting您将找到属于压缩一部分的 sstables。如果将这些大小相加并乘以列族压缩比的倒数,您将非常接近总数。默认情况下,在多核系统上验证这可能有点困难,因为同时压缩的数量默认为核心数量。

您还可以通过查看代码来验证这个答案:

AbstractionCompactionIterable -getCompactionInfo()使用该类中的 bytesRead和字段。是最终的,并在构造函数中通过对压缩过程中的每个文件求和来计算。totalBytestotalBytesgetLengthInBytes()

扫描仪有所不同,但CompressedRandomAccessReader返回的字节长度是文件的未压缩大小。