如果表被刪除,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