如果表被删除,SSTables永远不会被删除。如果表被删除,SSTables永远不会在磁盘上被删除
我有一个表的墓碑数超过100000,因为我的阅读查询抛出了墓碑错误。然后我删除了表,但是这并没有删除SSTable文件。我重新创建了表格,然后运行了我的选择查询,我又看到了墓碑错误。我不明白为什么旧的墓碑错误再次出现? 此外,SSTable何时会在磁盘上被删除?
如果表被删除,SSTables永远不会被删除。如果表被删除,SSTables永远不会在磁盘上被删除
我有一个表的墓碑数超过100000,因为我的阅读查询抛出了墓碑错误。然后我删除了表,但是这并没有删除SSTable文件。我重新创建了表格,然后运行了我的选择查询,我又看到了墓碑错误。我不明白为什么旧的墓碑错误再次出现? 此外,SSTable何时会在磁盘上被删除?
截断操作比放下并重新创建更安全。截断可能会抛出一个超时异常,再次执行直到完成。
截断表不会删除磁盘上的SSTable。您需要运行nodetool cleanup
墓碑将通过压实消失,但只有一次gc_grace_seconds已过。默认值是10天。为什么这么久?它的设计时间比一周多一点,在删除删除之前提供足够的时间在集群上运行修复。这最大化了节点间一致性的机会。
为了让您的表从磁盘中删除,您需要确保当前没有硬链接指向它们。默认情况下,DROP
命令将创建CF的快照。您需要设置为false
的auto_snapshot
财产在YAML文件:
# 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
如果你想宁可在安全方面(和一般的程序来重新创建密钥空间),你可以去:
迄今为止,我从未遇到过这个问题。
我做了auto_snapshot:false并重新启动了Cassandra。另外,按照你所说的去掉并重新创建一个表格。在删除或截断表时,如果转到Cassandra的数据目录并验证,SStable文件仍然存在于磁盘上。我想知道,为什么表的SStable文件仍然保留在磁盘上,并且没有被删除? – Hemalatha
我做了“drop table xyz”,并且相应的sstables没有从磁盘中删除。我也运行nodetool清理,但没有帮助。 – Hemalatha
xmas79是正确的Cassandra将快照数据,从而创建硬链接。使用'nodetool clearsnapshot'删除所有快照或删除特定表的快照。在Linux中,'ls -l'会告诉你存在多少个到文件的硬链接。 – Bradski
我发现sstables文件夹永远不会被删除,即使它里面的所有文件(db,index等)都被删除了。并且没有快照存在。任何想法为什么发生这种情况 – Hemalatha