我有一个256 GB内存的cassandra 5节点集群。我在读操作上面临一些性能问题,所以我决定增加我的堆大小,因为它使用了默认值。我更新了cassandra-env文件MAX_HEAP_SIZE=“128 G”& HEAP_NEWSIZE=“32 G”。
我发现读查询的性能稍好一些,但我在日志中看到了一些消息,如“Some operations were slow”和垃圾收集事件。似乎增加堆大小可能会导致垃圾收集活动增加。
您能帮助我调整其他参数以及关于MAX_HEAP_SIZE=“128 G”。
2条答案
按热度按时间vuv7lop31#
首先,我不会更改cassandra-env.sh中的参数,而是使用jvm.options文件。
其次,我可能不会移动到128 G堆大小,这可能太大了。
第三,newsize和max heap size应该相同,否则,你会得到扩展,这可能会导致性能问题。
第四,在增加堆大小之前,您必须了解发生了什么。为什么要增加堆大小?您是否看到由于堆耗尽而导致的分配错误?您是否看到长时间的旧一代GC暂停?
在jvm.options中,设置-Xmx和-Xms,而不是乱用cassandra-env.sh。
kxxlusnw2#
我真的不认为堆设置是这里的问题。史蒂夫是正确的,你肯定不想去128 GB。事实上,我不建议去32 GB以上的w/ Java 8。他也是正确的,在堆配置更改与Cassandra 4应该在
jvm.options
文件,而不是cassandra-env.sh
。这个问题是这样的:
字符串
我们在表中总共有200列,它需要大约45秒来填充20 k记录。如果我们在“in子句”中选择多个ID,它需要很多时间,有时会挂起。
根据上面的SELECT语句判断,我猜PRIMARY KEY定义看起来像这样:
PRIMARY KEY (("ID"),"EndTime)
。在我看来,它也像是你试图一次拉回太多的数据。我建议如下:"ID"
。PRIMARY KEY (("ID","hour_bucket"),"EndTime")
。这将导致更小的分区,这看起来也是一些问题。