目前我正在调试 Apache Cassandra 的性能问题。当列族的 Memtable 被填满时,它会排队等待刷新到 SSTable。当您执行大量写入时,经常会发生这种刷新。当此队列被填满时,写入将被阻止,直到下一次成功完成刷新。这表明您的节点无法处理它正在接收的写入。
nodetool 中是否有一个矩阵表明这种行为?换句话说,我想要一个表明节点无法跟上它正在接收的写入的数据。
谢谢!!
几年来这不是真的。活动的 memtable 被切换,一个新的 memtable 处于活动状态。新的突变发生在这个实时内存表上,而“要刷新”的内存表包含在本地读取中。MemtableFlushWriter 线程池在其上排队了刷新任务。因此,您可以看到有多少待处理(在 tpstats 下)。您还可以在 MutationStage 下看到备份的突变。
最终
nodetool tpstats
很可能是您要寻找的东西。
我想要一个表明节点无法跟上它正在接收的写入的数据。
您的问题可能与磁盘 I/O 无法处理吞吐量有关 --> 内存表刷新排队 --> 写入被阻止
命令dstat是您调查 I/O 问题的朋友。其他一些 linux 命令可能也很方便。阅读 Amy Tobey 的这篇出色的博文:https ://tobert.github.io/pages/als-cassandra-21-tuning-guide.html
nodetool 中是否有一个矩阵表明这种行为?
节点工具 tpstats
我相信您正在寻找 tp(线程池)统计信息。
nodetool tpstats
通常阻塞的 FlushWriters 表明您的存储系统无法跟上写入工作负载。您是否偶然使用旋转磁盘?在这种情况下,您还需要密切关注 iostat。
这是 tpstats 的文档:https ://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsTPstats.html