在 cassandra 中设置堆大小和其他相关参数

Setting Heap size and other related parameters in cassandra

提问人:Dinesh Chandra 提问时间:11/7/2023 最后编辑:trincotDinesh Chandra 更新时间:11/17/2023 访问量:61

问:

我有一个具有 256GB 内存的 cassandra 5 节点集群。 我在读取操作中遇到了一些性能问题,所以我决定增加我的堆大小,因为它正在使用 defualt。 我用 MAX_HEAP_SIZE=“128G” & HEAP_NEWSIZE=“32G” 更新了 cassandra-env 文件。

我发现读取查询的性能更好一些,但我在日志中看到了一些消息,例如“某些操作很慢”和垃圾回收事件。似乎增加堆大小可能会导致垃圾回收活动增加。

您能否协助我调整有关MAX_HEAP_SIZE=“128G”的其他参数。

缓存 Cassandra JVM 内存堆 大小

评论

0赞 Aaron 11/8/2023
您能否编辑您的帖子以包含您尝试运行的 cassandra 版本、Java 版本、垃圾回收器名称/类型、表定义和查询?
0赞 Dinesh Chandra 11/16/2023
cassandra 版本 : 4.0.11 Java 版本 : openjdk version “1.8.0_382” 垃圾回收器名称/类型 : G1GC 堆大小 : 64G 示例查询:select col1,col2,col3。col75 FROM keyuspace.table WHERE “ID” in (65893388252433) AND “EndTime” >= 1688511600000 AND “EndTime” <= 1688597999999 LIMIT 20000 ;我们在表中总共有 200 列,制作 45K 条记录大约需要 20 秒。如果我们在 “in 子句” 中选择多个 ID,则需要花费大量时间,有时还会挂起。

答:

0赞 stevenlacerda 11/7/2023 #1

首先,我不会更改 cassandra-env.sh 中的参数。请改用 jvm.options 文件。

其次,我可能不会移动到 128G 堆大小,这可能太大了。

第三,newsize 和 max 堆大小应该相同,否则,您将获得扩展,这可能会导致性能问题。

第四,在增加堆大小之前,您必须了解发生了什么。为什么要增加堆大小?您是否因为堆已用尽而看到分配错误?您是否看到老一代 GC 停顿了很长时间?

在 jvm.options 中,设置 -Xmx 和 -Xms,而不是使用 cassandra-env.sh。

0赞 Aaron 11/17/2023 #2

我真的不认为堆设置是这里的问题。史蒂夫是对的,因为你绝对不想去128GB。事实上,我不建议在 Java 8 上使用 32GB 以上。他也是正确的,因为 Cassandra 4 的堆配置更改应该在文件中进行,而不是 .jvm.optionscassandra-env.sh

问题是这样的:

select col1,col2,col3..col75 FROM keyuspace.table
WHERE "ID" in (65893388252433)
AND "EndTime" >= 1688511600000 AND "EndTime" <= 1688597999999
LIMIT 20000 ;

我们在表中总共有 200 列,制作 45k 条记录大约需要 20 秒。如果我们在 “in 子句” 中选择多个 ID,则需要花费大量时间,有时还会挂起。

从上面的 SELECT 语句来看,我猜 PRIMARY KEY 定义如下所示: . 在我看来,您只是想一次提取太多数据。我建议以下几点:PRIMARY KEY (("ID"),"EndTime)

  • 一次只查询一个。"ID"
  • 对 SELECT 中指定的列数要谨慎。
  • 缩短时间窗口。看起来这个查询是 24 小时;看看你能不能降低它。
  • 将表改造为使用“hour”作为分区桶;前任:。这将导致分区变小,这看起来也有一些问题。PRIMARY KEY (("ID","hour_bucket"),"EndTime")
  • 使用固态硬盘。不确定这个集群背后的磁盘硬件,但我敢打赌磁盘 IO 延迟太高了。如果集群没有固态硬盘的支持,那么这里就是最大的物有所值的地方。如果群集位于云中,请查看迁移到下一个磁盘层。如果集群磁盘是由 NetApp 或其他磁盘阵列设备抽象的,请检查以确保集群中节点的磁盘未放置在同一硬件阵列中。查询很可能遇到了不受 Cassandra 配置影响的磁盘瓶颈。

评论

0赞 Dinesh Chandra 11/17/2023
谢谢 Aaron,主键定义如下所示:PRIMARY KEY (“ID”, “EndTime”, “CallID”) ) 的聚类顺序为 (“EndTime” ASC, “CallID” ASC)