我创建了一个keyspace,里面包含了一个table(columnfamily),我们称之为"ks.cf"
在columnfamily cf
中插入了几十万行数据后,使用df -h
命令查看磁盘使用情况。
然后,我使用cqlsh
中的DROP KEYSPACE ks
命令删除了keyspace。
即使删除了keyspace,磁盘使用情况也保持不变
。我还尝试使用nodetool compact
命令,但没有成功。
有没有人可以帮我配置一下,这样在删除数据/行后可以释放磁盘空间?
我创建了一个keyspace,里面包含了一个table(columnfamily),我们称之为"ks.cf"
在columnfamily cf
中插入了几十万行数据后,使用df -h
命令查看磁盘使用情况。
然后,我使用cqlsh
中的DROP KEYSPACE ks
命令删除了keyspace。
即使删除了keyspace,磁盘使用情况也保持不变
。我还尝试使用nodetool compact
命令,但没有成功。
有没有人可以帮我配置一下,这样在删除数据/行后可以释放磁盘空间?
nodetool -h localhost -p 7199 clearsnapshot
。此外,你也可以在cassandra.yml文件中设置 auto_snapshot: false
关闭快照功能。Cassandra在删除表或键空间时不会自动清除快照。如果您在cassandra.yaml中启用了auto_snapshot,则每次删除表或键空间时,Cassandra都会捕获该表的快照。如果这是错误操作,此快照将帮助您回滚此表数据。如果您要从磁盘中清除这些表数据,则需要运行以下clearsnapshot命令以释放空间。
nodetool -u XXXX -pw XXXXX clearsnapshot -t snapshotname
您可以随时在cassandra.yaml中禁用此auto_snapshot功能。
nodetool cleanup
会清除所有不再需要的磁盘数据,即那些节点不负责的数据。(clearsnapshot
会清除所有快照,这可能不是您想要的。)
nodetool cleanup
触发一种特殊类型的压缩,适用于所有或特定的keyspaces/tables。如果表被删除,则Cassandra将不再关心它,因此不会发生压缩... - Alex Ottnodetool
命令可用于一次性清理所有未使用(即先前已删除)的表快照(在运行的 bitnami/cassandra:4.0
docker 容器内发出以下命令):
$ nodetool --username <redacted> --password <redacted> clearsnapshot --all
Requested clearing snapshot(s) for [all keyspaces] with [all snapshots]
$ sudo du -sch /home/<host_user>/cassandra_data/cassandra/data/data/<keyspace_name>/
134G /home/<redacted>/cassandra_data/cassandra/data/data/dicts/
134G total
清理后:
$ sudo du -sch /home/<host_user>/cassandra_data/cassandra/data/data/<keyspace_name>/
4.0K /home/<redacted>/cassandra_data/cassandra/data/data/dicts/
4.0K total
--all
开关(以及需要登录),但它仍然值得被点赞。