在cassandra上进行查询会消耗CPU。

问题描述 投票:1回答:1

从应用代码连接到Cassandra并进行查询会消耗Cassandra的CPU。

我的查询是这样的:。select fields from table where partition_key = "PARTITION_KEY" and clustering_key_1 = "KEY1" and clustering_key_2 in (a1, a2, a3..a100);

我使用的是 in 只在聚类列上使用关键字。但它仍然严重影响了CPU。有时CPU会达到100%。

这正常吗?

cassandra cassandra-3.0 cassandra-2.0 cassandra-2.1
1个回答
0
投票

不,100%的CPU使用率对于查询来说是不正常的。 但是很坦率地说,查询100个条目与一个 IN 子句。

即使使用 IN 迫使Cassandra在集群键上执行 随机的 阅读。 Cassandra是为阅读而生的 依次. 我不建议哪怕是两位数的。IN 条款条目。

建议。

  • 尽量减少返回的行数。 你可能需要把这个查询分成十到二十个小的查询。
  • 如果你真的只需要'a1'到'a100',为什么不试着把它作为一个范围查询呢?

select fields from table where partition_key = "PARTITION_KEY" and clustering_key_1 = "KEY1" and clustering_key_2 >= 'a1' and clustering_key_2 <= 'a100');

通常,在查询过程中,100%的CPU意味着集群需要更多的节点。 但是,由于查询受到分区的限制,更多的节点也无济于事。 在这种情况下,分区可能太大,重新建模表,使其分区更小,可以更均匀地分散集群的负载。

编辑20200616

还有其他因素会使查询消耗大量的CPU。

你是在查询支持原地写入的列还是大量删除的列? 这两种情况都会让Cassandra不得不更加努力地工作,因为忽略了过时的和墓碑的数据。

尝试运行一个 iostat. 如果你在虚拟化云环境中,你可能会看到 "嘈杂的邻居 "问题,如CPU偷窃和高(磁盘)IO等待时间。

© www.soinside.com 2019 - 2024. All rights reserved.