【问题标题】:Cassandra slow query execution in an empty tableCassandra 在空表中执行缓慢的查询
【发布时间】:2017-06-23 23:49:25
【问题描述】:

我正在使用 apache-Cassandra-2.2.4,我遇到了这个问题:

当我执行 select * from TRACKING 时; 获得结果需要 70 多秒尽管表是空的 (0 行)

作为第一个解决方案,我执行 truncate TRACKING 并解决了问题(立即返回结果)。

你能帮我找出根本原因吗?我无法在我的应用程序中截断表格。

【问题讨论】:

  • 检查SELECT * FROM table_name 的用例是什么... Cassandra 未针对执行此类查询进行优化... 关于截断之前花费的时间,可能是由于删除操作创建了墓碑。 . 你可以在cql中用TRACING ON检查

标签: cassandra cassandra-2.0


【解决方案1】:

可能的原因是您有一堆数据被删除,并且您在全表扫描中看到了读取许多墓碑的影响。您可以通过对查询启用跟踪来确认。截断将删除墓碑数据。

这篇文章解释了墓碑陷阱和根本原因: http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

【讨论】:

    【解决方案2】:

    没有分区键的SELECT * FROM table 查询必须遍历整个环,直到达到查询限制。对于令牌环中的每个范围,它本质上是一个子查询,协调器将一个接一个地进行。特别是如果您使用 vnode,可能会有很多这样的“子查询”,因为在用尽环之前它会覆盖更多范围(您将使用 0 行)。

    此外,由于您实际上是在对整个集群执行巨大的分散收集请求,因此任何节点命中 GC 或网络缓慢都会显着影响查询。由于请求可能是顺序的(存在一些基于分区计数的并行性),因此各个速度下降确实会对其造成伤害。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 2020-04-23
      • 2018-07-19
      • 1970-01-01
      • 2013-11-06
      • 2019-04-04
      • 1970-01-01
      相关资源
      最近更新 更多