cassandra 为什么在增加大小后计数器缓存未被利用?

suzh9iv8  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(193)

我的Cassandra应用程序主要需要计数器读写。因此,拥有计数器缓存对性能非常重要。我将cassandr.yaml中的计数器缓存大小从1000增加到3500,并重新启动了cassandra服务。结果并不是我所期望的。磁盘使用量大大增加,吞吐量下降了很多,而且根据我在nodetool信息中看到的情况(见下文),计数器缓存似乎根本没有被利用。现在已经快两个小时了,性能仍然很差。
昨天我将计数器缓存从0增加到1000时,也看到了同样的模式。它有一段时间根本没有使用计数器缓存,然后出于某种原因它开始使用它。我的问题是,是否需要做些什么来激活计数器缓存利用率?
下面是我在cassandra.yaml中对计数器缓存的设置:

counter_cache_size_in_mb: 3500
counter_cache_save_period: 7200
counter_cache_keys_to_save: (currently left unset)

以下是我在大约90分钟后从nodetool信息中得到的信息:

Gossip active          : true
Thrift active          : false
Native Transport active: false
Load                   : 1.64 TiB
Generation No          : 1559914322
Uptime (seconds)       : 6869
Heap Memory (MB)       : 15796.00 / 20480.00
Off Heap Memory (MB)   : 1265.64
Data Center            : WDC07
Rack                   : R10
Exceptions             : 0
Key Cache              : entries 1345871, size 1.79 GiB, capacity 1.95 GiB, 67936405 hits, 83407954 requests, 0.815 recent hit rate, 14400 save period in seconds
Row Cache              : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, NaN recent hit rate, 0 save period in seconds
Counter Cache          : entries 5294462, size 778.34 MiB, capacity 3.42 GiB, 0 hits, 0 requests, NaN recent hit rate, 7200 save period in seconds
Chunk Cache            : entries 24064, size 1.47 GiB, capacity 1.47 GiB, 65602315 misses, 83689310 requests, 0.216 recent hit rate, 3968.677 microseconds miss latency
Percent Repaired       : 8.561186035383143%
Token                  : (invoke with -T/--tokens to see all 256 tokens)

以下是增加计数器缓存大小之前的节点工具信息:

Counter Cache          : entries 6802239, size 1000 MiB, capacity 1000 MiB,
                         57154988 hits, 435820358 requests, 0.131 recent hit rate,
                         7200 save period in seconds

更新:我已经运行了几天,现在在不同的节点上尝试计数器缓存大小的不同值。它是一致的,计数器缓存直到它达到容量才被启用。这就是它的工作原理,就我所知。如果有人知道一种方法来启用该高速缓存之前,它是满的,让我知道。我'我将其设置得很高,因为它看起来是最佳的,但这意味该高速缓存在填满时会关闭几个小时,而在关闭时,我的磁盘会因读取请求而完全达到最大值...
另一项更新:进一步的运行表明,计数器缓存偶尔会在填满之前启动。我真的不知道这是为什么。我还没有看到一个模式。我很想知道什么时候它起作用,什么时候不起作用。
最后一次更新:当计数器缓存填满时,节点的本地传输也被禁用。将计数器设置为3.5 GB,我现在将在节点处于此低性能状态(本地传输被禁用)的情况下工作24小时。

nlejzf6q

nlejzf6q1#

我已经找到了一种方法,可以100%地避免计数器缓存未启用和本地传输模式被禁用。这种方法避免了我在等待计数器缓存启用时遇到的严重性能问题(在我的情况下,有时候要等待几个小时,因为我需要一个大的计数器缓存):1.在启动Cassandra之前,将cassandra.yaml文件字段counter_cache_size_in_mb设置为0 2.在启动cassandra并使其启动和运行之后,使用节点工具命令设置该高速缓存大小:命令示例:节点工具集缓存容量2000 0 1000
在此示例中,第一个值2000设置键高速缓存大小,第二个值0设置行高速缓存大小,第三个值1000设置计数器高速缓存大小。
1.进行测量并确定这些值是否是最佳值。如果不是,您可以根据需要使用新值重复第二步,而无需重新启动Cassandra
更多详情:有些事情是行不通的:如果计数器缓存还没有启用,设置counter_cache_size_in_mb的值。这种情况下,你在Cassandra.yaml的counter_cache_size_in_mb中使用一个非零值启动Cassandra,并且你还没有达到那个大小阈值。如果你这样做,计数器缓存将永远不会启用。只是不要这样做。我会称之为一个缺陷,但这是目前的工作方式。测试我所做的:我在五个不同的节点上用多个值多次测试了这个方法。最初是在Cassandra刚刚出现的时候,也是在一段时间之后。我描述的这个方法在每种情况下都有效。我想我应该保存一些节点工具信息的截图来显示结果。
最后一件事:如果Cassandra开发人员正在观看,他们是否可以考虑调整代码,使这种变通方案是不必要的?

相关问题