在Cassandra中增加行缓存大小(以mb为单位)是否有任何副作用?

在Cassandra中增加行缓存大小(以mb为单位)是否有任何副作用?,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,在此配置中: 64 Gb、16核、带Cassandra 3.1的Linux CentOS 行缓存大小(单位:mb)现在设置为零(cassandra.yaml) 它似乎工作得很好,因为OS页面缓存用于缓存读取 那么,增加这个数字有什么好处/风险(JVM堆) vs使用Linux页面缓存?行缓存仅用于显式启用行数据缓存的表,默认情况下不使用。行缓存通常仅用于大多数不经常更改的读取数据,否则,更改数据将导致缓存数据无效和从磁盘重新填充缓存项而产生额外的性能开销。您可以在DataStax发布的“最佳实践”

在此配置中: 64 Gb、16核、带Cassandra 3.1的Linux CentOS

行缓存大小(单位:mb)现在设置为零(cassandra.yaml) 它似乎工作得很好,因为OS页面缓存用于缓存读取

那么,增加这个数字有什么好处/风险(JVM堆)
vs使用Linux页面缓存?

行缓存仅用于显式启用行数据缓存的表,默认情况下不使用。行缓存通常仅用于大多数不经常更改的读取数据,否则,更改数据将导致缓存数据无效和从磁盘重新填充缓存项而产生额外的性能开销。您可以在DataStax发布的“最佳实践”系列中阅读更多内容


关于行缓存和Linux的缓冲区缓存之间的关系,主要区别在于行缓存保留了可能从多个SSTable组合而来的完整行,而缓冲区缓存保留了SSTable中经常被压缩的块,Cassandra需要一次又一次地解压缩它们。另外,如果分区分散在多个SSTABLE上,那么Cassandra在读取行时需要检查它们。

这都是关于工作负载和应用程序查询模式的

如果您的应用程序经常读取一小部分行(热)以及每一行的全部内容,那么启用此功能可以通过避免磁盘读取而带来显著的性能优势。有一些行缓存命中率JMX指标可用,可以为您的应用程序负载提供行缓存和键缓存大小之间的任何性能变化

如果尚未手动配置行缓存,则表说明应如下所示

Default: { 'keys': 'ALL', 'rows_per_partition': 'NONE' }.
如果启用,则大小应与热子集上的行数据及其列值的内存大小成比例。对于粗略估计,请使用nodetool cfstats,将行缓存大小(即缓存中的行数)乘以压缩的行平均大小并求和

与任何内存分配一样,它也会影响垃圾收集,尽管有一些部分或完整的堆外实现类可用。从税务文件:

row_cache_class_name
Default: disabled. note The classname of the row cache provider to use. Valid values: OHCProvider (fully off-heap) or SerializingCacheProvider (partially off-heap).
由于缓存了整行,因此成本可能会很高。需要注意的一点是,如果行经常从行缓存中移出(大小设置得太低或行数据经常更改),垃圾收集器肯定会有更多的工作要做


底线:要使用理想的行缓存,一小部分行必须是热的。当一次访问整行时,行缓存提供了好处。如果使用堆外实现,则对堆造成的风险很小。最后,做一些负载测试并捕获一些延迟指标,以确定最适合您需要且足够的缓存大小。

问题与linux页面缓存相关,thant Cass也在使用…问题与linux页面缓存相关,thant Cass也在使用…我添加了必要的片段thx,分布式文件上的反压缩是Linux页面缓存上的瓶颈。。。