Cassandra:设置row_cache_size_in_mb将性能降低4倍

时间:2018-08-22 08:57:29

标签: cassandra cassandra-3.0

为了使用Cassandra获得更好的读取性能,我将行缓存设置从切换为:

 row_cache_size_in_mb = 0

收件人:

 row_cache_size_in_mb = 2000
对于我的配置,对于我来说,

2 GB的行缓存听起来是合理的。因此,然后重新启动节点,令我惊讶的是,这样的设置使我的整体性能降低了4倍。例如,一个查询只花了2秒,现在却花了8秒钟来完成。

然后启用了跟踪,并且看到“行缓存命中”。我还看到行缓存命中率非常高。因此,行缓存似乎可以正确地与我的数据模型一起使用。但是,这显然减慢了我的查询速度...您知道为什么吗?

更新:

我做了一个新的测试。我将行缓存保持在:

 row_cache_size_in_mb = 2000 

我禁用了我拥有的最大列家族(表)的行缓存:

 'rows_per_partition': 'NONE'

现在,我的查询可以像以前一样工作(大约2秒钟)。那么,行高速缓存是否只是为了加快对小列的查询?

对于大型列族,是否还有其他方法可以将数据推送到缓存中?我在大型CF上期望的是,如果用户执行查询,然后再次执行相同的查询,则非第一查询可以立即返回,因为行已在内存中。

1 个答案:

答案 0 :(得分:0)

我希望这可能是因为您的cassandra节点花了很多时间来撤消行缓存并运行Java GC清理。找出问题的最佳方法是使用工具(数据狗,datastax操作中心,Jconsole)确定次要和主要GC的频率。

另外,如果您的查询需要大约2秒钟,我希望您可能正在进行大范围扫描。我过去曾尝试使用行缓存,但效果不佳。

您还可以尝试在运行行缓存的表上减少rows_per_partition