3

我想调整 Cassandra 以适应细行(5-50 列)的重读场景。这个想法是使用行缓存,并启用键缓存以防万一 - 当数据对于行缓存来说太大时。

我有双 Intel Xeon 服务器和 24GB RAM(3 个环,两个数据中心 - 总共提供 6 台机器)

这些是我对默认配置所做的更改:

cassandra-env.sh

#JVM_OPTS="$JVM_OPTS -ea"
MAX_HEAP_SIZE="6G"
HEAP_NEWSIZE="500M"

cassandra.yaml

# do not persist caches to disk
key_cache_save_period: 0
row_cache_save_period: 0

key_cache_size_in_mb: 512
row_cache_size_in_mb: 14336 
row_cache_provider: SerializingCacheProvider

它将 6GB 专用于 Cassandra JVM,0.5GB 用于键缓存(在 6GB 堆中),14GB 用于作为堆外的行缓存。操作系统仍然有 4GB 应该足够了,因为只运行一个 JVM 进程并且它应该有最大 2GB 的开销。

这个设置是最优的吗?有什么提示吗?

谢谢, Maciej

4

3 回答 3

3

我使用的是 1.1.6 版本。
SerializingCacheProvider 会将缓存数据保存在 Native Heap 区域。
该区域不适用于 GC 检查。所以不会发生GC。
您的 row_cache_size_in_mb 设置用于 SerializingCache 的参考对象。
该引用是使用 FreeableMemory 保存的(它在 1.1.x 中。但在 1.2 之后,它发生了变化)。
也就是说,计算row_cache_size_in_mb时,不会计算你的真实缓存值。

结果如果要计算row_cache_size_in_mb,请尝试从最小大小开始设置。
就我而言,当我设置 500mb 时,每个节点都使用 2G 老一代。(根据交易哪个数据集)

于 2013-04-08T06:39:03.477 回答
1

运行heapspace_calculator并使用建议的值作为初始堆配置。使用“nodetool info”监控您的堆使用情况。

尽可能使用短列名并合并列。

于 2012-11-07T13:39:08.293 回答
1

这个设置工作得很好——我已经测试过了。

于 2013-01-04T20:08:50.293 回答