在C * 1.2.x集群中,我们有7个键空间,每个键空间包含一个使用宽行的列族。cf使用LCS。我定期在行中进行删除。最初,每一行每天最多可以包含1个条目。超过3个月的条目将被删除,并且每周最多保留1条条目。我已经运行了几个月,但是并没有真正回收磁盘空间。我需要调查原因。对我来说,墓碑似乎还没有被清除。每个键空间都有大约1300个sstable文件(* -Data.db),每个文件的大小约为130 Mb(sstable_size_in_mb为128)。每个CF中的GC宽限秒为864000。未指定tombstone_threshold,因此应默认为0.2。我应该怎么看才能找出为什么不回收磁盘空间?
我之前在这里的cassandra邮件列表中回答了类似的问题
为了进一步详细说明,至关重要的是,您应该理解一般的“ 分层压缩策略”和“ leveldb”(考虑到正常的写入行为)
总结以上内容:
LCS树在cassandra中的布局存储在一个json文件中,您可以轻松检查它-您可以在与keyspace + ColumnFamily的sstables相同的目录中找到它。这是我的一个节点的示例(结合jq工具+ awk进行总结):
$ cat users.json | jq ".generations[].members|length" | awk '{print "Level", NR-1, ":", $0, "sstables"}'
Level 0 : 1 sstables
Level 1 : 10 sstables
Level 2 : 109 sstables
Level 3 : 1065 sstables
Level 4 : 2717 sstables
Level 5 : 0 sstables
Level 6 : 0 sstables
Level 7 : 0 sstables
Run Code Online (Sandbox Code Playgroud)正如您已经注意到的,sstable的大小通常相等,因此您可以看到每个级别的大小大约是前一个级别的10倍。我希望在上面的节点中能够满足〜5 sstable读取中的大多数读取操作。一旦我添加了足够的数据以使Level 4达到10000 sstable,并且Level 5开始被填充,我的读取延迟就会稍有增加,因为每次读取都会产生1 sstable读取以满足。(在切线上,cassandra提供了桶状直方图供您检查所有这些统计信息)。
有了以上这些,让我们逐步完成一些操作:
我希望这能回答您的问题,关于为什么cassandra中的删除(尤其是使用LCS的删除)实际上会占用空间而不是释放空间(至少在最初是这样)。逻辑删除所附加的行+列的大小(实际上可能比您拥有简单值的情况下要删除的值大)。
这里的关键点是,在cassandra实际丢弃它们之前,它们必须遍历所有级别直到最高级别L,而这种冒泡的主要驱动力是总写入量。
| 归档时间: |
|
| 查看次数: |
1334 次 |
| 最近记录: |