卡桑德拉(Cassandra)删除了旧的,不需要数据



我有一个两个节点的cassandra群集,RF为2。因此,两个节点都包含100%的数据。

现在,我在磁盘空间上缺乏。我可以删除一些旧数据,因为它们之前已经进行了汇总和处理,而且我不再需要它们。

我尝试从cqlsh运行delete查询,但我会超时。我尝试增加超时,但是从cqlsh运行查询将需要更多时间。

如何禁用单个查询或连接的超时?除了增加超时外,还有其他方法可以从节点中删除一些数据吗?

我的Cassandra版本是3.11.0

ps。我在cassandra.yaml中增加了write_request_timeout_in_ms。这是delete查询的正确的吗?

删除确实不应该超时,除非存在与其他问题有关的问题。它插入没有阅读或任何内容的墓碑,无论已经存在什么,都应该快/便宜。另一方面,阅读可能会受到很大影响。我猜与GC相关的问题与阅读有关。您可以检查GC日志,并可能增加堆并减少CMSInitiatingOccupancyFraction(如果使用CMS而不是G1)。

因此,请检查GC和普通日志是否有问题(查找警告,系统日志中的错误),在GC日志中的暂停时间> 1秒,应该没有。

发出删除后,您可以尝试执行力压实(nodetool compact keyspace table),以查看它是否有助于磁盘空间。删除本身不会减少磁盘空间,直到用墓碑压实数据。

write_request_timeout_in_ms是正确的设置,但是如果您击中它是错误的,而您只是掩盖了它。它的确需要少于1毫秒的正常使用。

侧面注意:2节点群集上的RF = 2并不是C*设计的方式。您对牺牲高可用性的一致性的数据库没有可用性。

相关内容

最新更新