我有一个双节点的Cassandra集群,RF为2.因此两个节点都包含100%的数据。
现在,我的磁盘空间不足。我可以删除一些旧数据,因为它们之前是汇总和处理的,我不再需要它们了。
我尝试从delete
运行cqlsh
查询,但是我暂停了。我尝试增加超时,但似乎从cqlsh
运行查询会花费更多时间。
如何为单个查询或连接禁用此超时?除了增加超时之外,还有其他方法可以从节点中删除一些数据吗?
我的Cassandra版本为3.11.0
。
PS。我在write_request_timeout_in_ms
中增加了cassandra.yaml
。这是delete
查询的正确选择吗?
答案 0 :(得分:0)
除非存在与其他内容相关的问题,否则删除确实不应该超时。它插入一个没有读取或任何东西的墓碑,无论已经存在什么,都应该快速/便宜。另一方面,阅读可能会受到很大影响。我猜想与读取相关的GC相关问题。您可以检查GC日志,并可能增加堆并减少CMSInitiatingOccupancyFraction
(如果使用cms而不是g1)。
因此,检查GC和普通日志是否存在问题(在系统日志中查找WARN,ERROR),在gc日志中暂停时间> 1秒,应该没有。
发出删除后,您可以尝试强制压缩(nodetool compact keyspace table
)以查看它是否有助于磁盘空间。在使用逻辑删除压缩数据之前,删除本身不会减少磁盘空间。
write_request_timeout_in_ms
是正确的设置,但是如果你碰到它的话就错了而且你只是掩盖了它。它的正常使用时间应该不到1毫秒。
旁注:2节点集群上的RF = 2不是C *的设计运行方式。您在数据库上没有牺牲高可用性一致性的可用性。