如何找到cassandra键空间占用的总空间?

时间:2015-04-28 09:18:47

标签: cassandra

我试图找到cassandra键空间占用的总物理大小。

我有一个msg生成器,它将大量消息转储到cassandra。我想找出cassandra表中消息的总物理大小。

当我du -h /mnt/data/keyspace时,linux只说12kb。我确信数据大小远大于此。其余的数据必须 在memtables 中或者应该在压缩中。

如何找到该密钥空间中cassandra占用的总空间?

我试过了

     nodetool cfstats <keyspace>

但它只给我那个特定的节点。并且字节存在于memtable中。我实际上想要在群集中的所有节点上实际写入磁盘的键空间的总大小。是否有任何命令可以找到它?

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

什么是压实?

SStables是不可变的 - 一旦memtable被刷新到磁盘,它将被删除,直到它被删除(过期)或压缩。压缩是将sstables组合在一起的过程。当您的工作负载更新并且您的SSTable中可能存储了多个CQL行实例时,这很重要(请参阅nodetool cfhistograms中的每次读取的sstables)。当您去读取该行时,您可能必须扫描多个sstables以查找最新版本的数据(在c * last write wins中)。当我们压缩时,我们可能占用磁盘上的额外空间(特别是大小分层压缩,这可能需要达到 - 这是理论上的最大值 - 压缩时数据大小的50%)因此保持可用磁盘空间非常重要。但是,压缩不会从密钥空间目录中获取数据。这不是您的数据所在。

然后我的数据在哪里?

您怀疑尚未刷新到磁盘的数据必须位于memtables中。这些数据会在您的提交日志填满后立即转到磁盘上(默认1gb在2.0或8gb在2.1)或一旦你的memtables变得太大 - memtable_total_space_in_mb。

如果您想在sstables中查看数据,可以手动刷新它:

nodetool flush

并且您的memtables将以SSTables的形式放入您的KS目录中。或者只是耐心等待,直到你达到commitlog或memtable阈值。

但是cassandra写的还不耐用吗?

是的,您的可记忆数据也存储在commitlog中。如果您的计算机断电等,已写入的数据仍会保留在磁盘上,并且启动时会重播提交日志数据!

答案 1 :(得分:6)

我使用df -h。加载列值与使用{{1}}获得的值大致相同(我的cassandra安装位于与系统不同的分区上。

答案 2 :(得分:0)

您可以获取列族统计信息、过滤使用的空间并对数字求和:

nodetool cfstats <keyspace> | grep 'Space used (total), bytes' | awk -F ": " '{s+=$2}END{print s}'