如果表被删除,SSTables 永远不会在磁盘上被删除。
我有一张表,其墓碑计数> 100000,因此我的读取查询引发了墓碑错误。然后我删除了表,但这并没有删除 SSTable 文件。我重新创建了表,然后运行了我的选择查询,我再次看到了墓碑错误。我不明白为什么旧的墓碑错误又出现了?另外,SSTable 什么时候会在磁盘上被删除?
截断表不会删除磁盘上的 SSTable(s)。您需要运行nodetool cleanup
墓碑将通过压缩消失,但只有在gc_grace_seconds过去后才会消失。默认值为 10 天。为什么这么长?它被设计为比一周长一点,提供足够的时间在删除删除之前在集群上运行修复。这最大限度地提高了节点间一致性的机会。
为了从磁盘中删除您的表,您需要确保当前没有硬链接指向它们。默认情况下,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
如果您希望在安全方面犯错(以及重新创建密钥空间的一般过程),您可以选择:
到目前为止,我从来没有遇到过这个问题。
截断操作比删除和重新创建更安全。截断可能会抛出超时异常,再做一次,直到完全完成。