system.log中的逻辑删除扫描

时间:2019-05-28 16:49:22

标签: cassandra datastax scylla tombstone

我有一个Cassandra集群,删除用例较少。我在system.log中发现“ 读取keyspace.table中的10个活动的和5645464墓碑单元格”是什么意思?请帮助理解。

谢谢。

2 个答案:

答案 0 :(得分:2)

对于Cassandra,记录的所有信息都是不可变的。这意味着,当您执行删除操作(使用delete语句或“生存时间[TTL]子句明确表示)时,数据库将添加另一个记录,该记录带有名为墓碑的特殊标志。所有这些记录将保留在数据库中,直到gc_grace_seconds个时期过去为止;默认值为10天。

在您的情况下,引擎发现删除的大多数记录都已删除,但是它们仍在等待gc_grace_seconds通过,以使压缩回收空间。解决该问题的一种可能方法是减少该表的gc_grace_seconds

有关更多信息,请参阅《最后的泡菜》中的this article

答案 1 :(得分:1)

使用Cassandra时要记住的另一件重要事情是,墓碑单元不直接与删除关联。

当您在执行插入操作时将null值插入属性时,Cassandra在内部将该属性/单元标记为墓碑。因此,即使您没有发生很多删除操作,您最终也可能会拥有大量的墓碑。简便的解决方案是在插入时不为属性插入null值。

按照Read 10 live and 5645464 tombstones cells in keyspace.table的声明,可能有一个表扫描查询正在扫描10单元格和5645464墓碑数(具有null的单元格)值),而这正是我的猜测。需要了解正在执行哪种类型的查询,以便对此有更多了解。