我正在使用apache-Cassandra-2.2.4,我遇到了这个问题:
当我从TRACKING执行select *时; 获得结果需要70秒以上尽管表格为空(0行)。
作为第一个解决方案,我执行truncate TRACKING并修复问题(立即返回结果)。
你能帮助我知道根本原因吗?我不能在我的应用程序中截断表。答案 0 :(得分:4)
可能的原因是您有一堆被删除的数据,并且您在全表扫描中看到了读取许多墓碑的效果。您可以通过启用查询跟踪来确认。截断将删除逻辑删除的数据。
本文解释了墓碑陷阱和根本原因: http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets
答案 1 :(得分:2)
没有分区键的SELECT * FROM table
查询必须遍历整个环,直到达到查询限制。对于令牌环中的每个范围,它基本上是协调器将一个接一个地进行的子查询。特别是如果你使用vnode,它可能是很多这些“子查询”,因为它会在耗尽环之前覆盖更多的范围(你将使用0行)。
此外,由于您实际上是对整个群集执行了大量的分散收集请求,因此任何命中GC或网络速度缓慢的节点都会对查询产生相当大的影响。由于请求可能是顺序的(基于分区计数存在一些并行性),因此单个减速可能会对其造成伤害。