Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查找cassandra键空间占用的总空间?_Cassandra - Fatal编程技术网

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

如何查找cassandra键空间占用的总空间?,cassandra,Cassandra,我试图找到cassandra keyspace占用的总物理大小 我有一个msg生成器,可以向cassandra转储很多消息。我想找出cassandra表中消息的总物理大小 当我执行du-h/mnt/data/keyspacelinux只显示12kb。我确信数据量远大于此。其余的数据必须在memtables中,或者应该在compression中 如何找到该键空间在cassandra中占用的总空间 我试过了 nodetool cfstats <keyspace> nodeto

我试图找到cassandra keyspace占用的总物理大小


我有一个msg生成器,可以向cassandra转储很多消息。我想找出cassandra表中消息的总物理大小

当我执行
du-h/mnt/data/keyspace
linux只显示12kb。我确信数据量远大于此。其余的数据必须在memtables中,或者应该在compression中

如何找到该键空间在cassandra中占用的总空间

我试过了

     nodetool cfstats <keyspace>
nodetool cfstats
但它只给了我那个特定的节点。而且字节也存在于memtable中。实际上,我需要集群中所有节点上实际写入磁盘的密钥空间的总大小。有什么命令可以找到这个吗

谢谢你的帮助。

什么是压缩? SStables是不可变的——一旦memtable被刷新到磁盘,它将保持不变,直到被删除(过期)或压缩。压缩是将表组合在一起的过程。当您的工作负载更新繁重且SSTables中可能存储了多个CQL行实例时,这一点非常重要(请参阅
nodetool cf直方图中的SSTables per read)。当您要读取该行时,可能需要扫描多个sstables以查找最新版本的数据(在c*上次写入wins中)。压缩时,可能会占用磁盘上的额外空间(尤其是大小分层压缩,压缩时可能会占用--这是理论上的最大值--数据大小的50%),因此保留可用磁盘空间非常重要。但是,压缩不会将数据从密钥空间目录中带走。这不是您的数据所在的位置

那么我的数据到哪里去了? 您认为尚未刷新到磁盘的数据一定存在于memtables中是正确的。一旦您的commitlog填满(默认为2.0中的1gb或2.1中的8gb),或者一旦您的memtables变得太大,这些数据就会进入磁盘—memtable_total_space_in_mb

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

nodetool刷新

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

但卡桑德拉的作品难道不经久耐用吗?
是的,memtable数据也存储在commitlog中。如果您的机器断电等,已写入的数据仍将保留到磁盘,并且提交日志数据将在启动时重放

我使用
nodetool状态
。load列的值与我使用df-h获得的值大致相同(我的cassandra安装在不同于系统的分区上。

您可以获得列族统计信息,筛选使用的空间,并对数字求和:

nodetool cfstats <keyspace> | grep 'Space used (total), bytes' | awk -F ": " '{s+=$2}END{print s}'
nodetool cfstats | grep'已用空间(总计),字节“| awk-F”:“{s+=$2}结束{print s}”

您可以在集群周围的密钥空间数据目录中du-h并添加。JMX中可能还有一个sstable size mbean,但我认为它是每个表的,而不是密钥空间。du-h将不包括memtable size。如何确保正在进行的压缩是完整的?我以为您说过希望在编写密钥空间时获得其大小到磁盘。您的memtables将始终是nodetool status
不接受
参数,而是显示整个集群的状态。使用
numfmt
awk
将字节转换为人类可读的(即kiB、MiB等):
awk'{split(“B kiB MiB GiB TiB PiB”,v);s=1;而($1>1024){1/=1024;s++}printf%.2f%s”,$1,v[s]}'