从应用代码连接到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%。
这正常吗?
不,100%的CPU使用率对于查询来说是不正常的。 但是很坦率地说,查询100个条目与一个 IN
子句。
即使使用 IN
迫使Cassandra在集群键上执行 随机的 阅读。 Cassandra是为阅读而生的 依次. 我不建议哪怕是两位数的。IN
条款条目。
建议。
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等待时间。