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

Cassandra : setting row_cache_size_in_mb decrease performance by factor 4

为了使用 Cassandra 实现更好的读取性能,我将行缓存设置从 :

切换为
 row_cache_size_in_mb = 0

收件人:

 row_cache_size_in_mb = 2000

2 GB 的行缓存对于我的配置来说听起来很合理。因此,我随后重新启动了节点,令我惊讶的是这样的设置将我的整体性能降低了 4 倍。例如,一个只需要 2 秒的查询现在需要 8 秒以上才能完成。

然后我启用了跟踪,我看到了 "Row cache hit"。我还看到行缓存命中率非常高。所以行缓存似乎可以正确地与我的数据模型一起使用。但是,它显然减慢了我的查询速度......你知道为什么吗?

更新:

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

 row_cache_size_in_mb = 2000 

我禁用最大列系列的行缓存 (table) 我有 :

 'rows_per_partition': 'NONE'

现在我的查询像以前一样工作(大约需要 2 秒)。那么,行缓存只是为了加快小列族的查询速度吗?

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

我认为这可能是因为您的 cassandra 节点花费了相当多的时间来清空行缓存和 运行 Java GC 清理。隔离问题的最佳方法是使用工具(datadog、datastax ops center、Jconsole)来确定次要和主要 GC 的频率。

此外,如果您的查询耗时约 2 秒,我预计您可能正在进行大范围扫描。我过去曾尝试为此使用行缓存,但效果不佳。

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