cassandra查询占用cpu

alen0pnh  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(458)

从应用程序代码连接到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%。
这正常吗?

epfja78i

epfja78i1#

不,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窃取和高(磁盘)i/o等待时间。

相关问题