使用少量数据的Cassandra Query Timeout

时间:2017-04-04 07:48:04

标签: cassandra

我遇到了Cassandra 2.1.17的问题。我有一张桌子,里面有大约40k“行”。我遇到问题的一个分区可能有大约5k个条目。

表是:

create table billing (
    accountid uuid,
    date timeuuid,
    credit double,
    debit double,
    type text,
    primary key (accountid,date)
) with clustering order by (date desc)

因此,此表中插入和删除了很多内容。

我的问题是,我认为它似乎变得腐败了,因为我不再能够从分区中选择超过某一点的数据。

从cqlsh我可以像这样运行。

SELECT accoutid,date,credit,debit,type FROM billing WHERE accountid = XXXXX-xxxx-xxxx-xxxxx ... AND date< 3d466d80-189c-11e7-8a57-f33cbced2fc5 limit 2;

首先,我选择了10000的限制,它通过它们进行了大约5000行的分页,然后到最后它会发出超时错误。

然后我使用上次timeuuid中的第二个并选择限制2它将失败限制1将起作用。

如果我使用最后一个timeuuid作为<并且限制为1也会失败。

所以只是在寻找我能在这里做的事情,我不确定出了什么问题,也不确定如何修复/诊断发生的事情。

我已经厌倦了修理并强行压实。但它似乎仍有问题。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

  1. 尝试在桌面上运行手动压缩。
  2. 您可以在cassandra配置中增加 read_request_timeout_in_ms 参数。
  3. 如果您要进行大量删除和更新,请考虑采用分层压缩策略。

答案 1 :(得分:3)

我认为你在这个分区里有太多的墓碑。

什么是墓碑?

要记住记录已被删除,Cassandra会创建一个名为“墓碑”的特殊值。墓碑有任何其他值的TTL,但它不像任何其他值那样容易压缩。 Cassandra保持更长的时间以避免数据重新出现时的不一致。

如何观看墓碑?

nodetool cfstats 让您了解每个切片平均有多少个墓碑

如何解决问题?

保留墓碑的持续时间为 gc_grace_seconds 。您必须减少它,然后运行主要压缩来解决问题。

答案 2 :(得分:2)

在我看来,当你选择时,你会看到很多墓碑。事情就是他们在那里,卡桑德拉仍然需要克服他们。可能有多个因素,如ttl with insert语句,大量删除,插入空值等。

我打赌你需要在桌面上调整gc_grace_seconds并更频繁地运行修复。但要小心,不要将其设置为低(在此时间之前必须完成一轮修复)。

这里有很好的解释: https://opencredo.com/cassandra-tombstones-common-issues/