我正在cassandra集群中进行一些测试,现在我有一个每个节点有1TB数据的表。当我使用ycsb进行更多插入操作时,我发现吞吐量非常低(大约10000 ops / sec)同一个集群中的同一个新表(大约80000 ops / sec)。插入时,cpu使用率约为40%,几乎没有磁盘使用。
我使用nodetool tpstats获取任务详细信息,它显示:
Pool Name Active Pending Completed Blocked All time blocked
CounterMutationStage 0 0 0 0 0
ReadStage 0 0 102 0 0
RequestResponseStage 0 0 41571733 0 0
MutationStage 384 21949 82375487 0 0
ReadRepairStage 0 0 0 0 0
GossipStage 0 0 247100 0 0
CacheCleanupExecutor 0 0 0 0 0
AntiEntropyStage 0 0 0 0 0
MigrationStage 0 0 6 0 0
Sampler 0 0 0 0 0
ValidationExecutor 0 0 0 0 0
CommitLogArchiver 0 0 0 0 0
MiscStage 0 0 0 0 0
MemtableFlushWriter 16 16 4745 0 0
MemtableReclaimMemory 0 0 4745 0 0
PendingRangeCalculator 0 0 4 0 0
MemtablePostFlush 1 163 9394 0 0
CompactionExecutor 8 29 13713 0 0
InternalResponseStage 0 0 0 0 0
HintedHandoff 2 2 5 0 0
我发现有大量待处理的MutationStage和MemtablePostFlush
我已经阅读了一些关于cassandra写入限制的相关文章,但没有有用的信息。我想知道为什么除了数据大小之外两个相同表之间的cassandra吞吐量存在巨大差异?
另外,我在我的服务器上使用 ssd 。但是,这种现象也发生在另一个使用hdd的群集中
当cassandra运行时,我发现cpu利用率上的%user和%nice都是10%左右,而只有compactiontask运行时压缩吞吐量大约为80MB / S.但是我的cassandra进程已将nice值设置为0。
答案 0 :(得分:0)
狂野猜测:您的系统正在忙于压缩sstable。
请使用nodetool compactionstats
BTW,YCSB不使用prepare语句,这使得它成为实际应用程序负载的不良估计。