在调查我以前的问题时,我似乎碰到了相当有趣的问题 – 一个ColumnFamily只将数据放在四个节点中的三个
我们有一个超过80万列的非常长的行。 它存储用户的细节; 每个用户的详细信息一列。 没有理由背后的这种devise,根据文件这应该是好的,但我们有巨大的性能问题。
整个行似乎被操作系统caching和Cassandracaching – 因为它经常被用于行 – 花费了大部分的CPU时间来串行化数据,以便从中获取数据(即使应用程序查询是关于行内的特定列)。
我做的第一件事是在存储此行的ColumnFamily上启用行caching。 这似乎立即解决了高CPU使用率问题,并解决了性能问题…直到第一次预定手动修复。
在手动修复过程中的某个时刻(可复制;每次尝试运行手动修复时都发生),节点与其他节点失去联系(反之亦然!),所有受影响的节点(通常为四分之二)报告堆是几乎满(堆是0.9977127109734825全…)。 受影响的节点正在死亡(如Cassandra,而不是主机本身)。
我们已经解决了根本问题 – 改变了我们在有问题的ColumnFamily中存储数据的方式,但是我仍然不明白为什么我会遇到这些问题,并且希望能够让人们了解潜在的问题根源。
我们所做的是否有什么不好?
我们使用0.8.7,超过4节点集群,RF = 3。 堆设置为16GB,这些是48GB的盒子。