我想调整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的开销。
此设置是否最佳?任何提示?
谢谢, 马切伊
答案 0 :(得分: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 old gen。(根据交易哪个数据集)
答案 1 :(得分:1)
运行heapspace_calculator并使用建议值作为初始堆配置。使用“nodetool info”监视堆使用情况。
尽可能使用短列名称和合并列。
答案 2 :(得分:1)
此设置工作正常 - 我已经测试过了。