如果删除表,则永远不会在磁盘上删除SSTable。
我有一张桌子,其墓碑数是> 100000,因为我的读取查询丢失了Tombstones。然后我删除了表,但这并没有删除SSTable文件。我重新创建了表,然后运行了我的选择查询,我再次看到了墓碑错误。我不明白为什么旧的墓碑错误再次出现? 此外,什么时候SSTable在磁盘上被删除?
答案 0 :(得分:2)
截断表不会删除磁盘上的SSTable。您需要运行nodetool cleanup
Tombstones将通过压缩消失,但只有gc_grace_seconds过去一次。默认值为10天。为什么这么久?它被设计为比一周长一点,在丢弃删除之前提供足够的时间在集群上运行修复。这最大化了节点间一致性的机会。
答案 1 :(得分:0)
截断操作比删除操作更安全并重新创建。 Truncate可能会抛出超时异常,再次执行它直到它完全完成。
答案 2 :(得分:0)
为了从磁盘中删除表,您需要确保当前没有硬链接指向它们。默认情况下,DROP
命令将创建CF的快照。您需要在YAML文件中将false
属性设置为auto_snapshot
:
# Whether or not a snapshot is taken of the data before keyspace truncation
# or dropping of column families. The STRONGLY advised default of true
# should be used to provide data safety. If you set this flag to false, you will
# lose data on truncation or drop.
auto_snapshot: false
如果您想要安全方面的错误(以及重新创建密钥空间的一般过程),您可以选择:
到目前为止,我从未遇到任何问题。