【问题标题】:Severe degradation in Cassandra Write performance with continuous streaming data over time随着时间的推移,连续流数据导致 Cassandra 写入性能严重下降
【发布时间】:2013-12-10 20:20:14
【问题描述】:

我注意到随着时间的推移连续写入,Cassandra 写入性能严重下降。

我在一个宽列中插入带有时间戳 (T) 作为列名的时间序列数据,该列在一行中存储 24 小时的数据。 流数据从数据生成器(4 个实例,每个实例有 256 个线程)写入,将数据并行插入到多行中。 此外,数据还会插入到具有 DateType 和 UUIDType 索引的列族中。

CF1:

        Col1    |   Col2    |   Col3(DateType)  |   Col(UUIDType4)  |   

RowKey1

RowKey2

CF2(宽列族):

RowKey1 (T1, V1) (T2, V3) (T4, V4) ......

RowKey2 (T1, V1) (T3, V3) .....

没有。插入的数据点数/秒会随着时间的推移而减少,直到无法再插入。初始性能约为 60000 ops/sec,持续约 6-8 小时,然后逐渐降低到 0 ops/sec。在所有节点上重新启动 DataStax_Cassandra_Community_Server 有助于恢复原始吞吐量,但在几个小时后再次观察到该行为。

操作系统:Windows Server 2008 节点数:5 Cassandra 版本:DataStax 社区 1.2.3 内存:8GB 堆大小:3GB 垃圾收集器:默认设置 [ParNewGC]

我还注意到数量显着增加。当性能开始下降时,OpsCenter 报告的待处理写入请求数(约 200,000)。

我不明白是什么阻止了写操作完成,为什么它们会随着时间的推移而堆积起来?我在 Cassandra 日志中没有看到任何可疑之处。

操作系统设置与此有关吗? 有什么建议可以进一步探讨这个问题吗?

【问题讨论】:

  • 我会升级到最新的 1.2.X 版本,1.2.12,然后再次尝试您的测试。自 1.2.3 以来已经修复了很多错误

标签: cassandra datastax-enterprise


【解决方案1】:

您是否看到待处理的压缩(nodetool compactionstats)有所增加?或者您是否看到阻塞的刷新写入器(nodetool tpstats)?我猜您将数据写入 Cassandra 的速度超过了消耗的速度。

Cassandra 不会阻止写入,但这并不意味着您不会看到堆使用量的增加。挂起的写入有开销,阻塞的内存表也是如此。此外,每个 SSTable 都有一些内存开销。如果压实落后,这会被放大。在某些时候,您的堆中可能没有足够的空间来分配单次写入所需的对象,最终您将所有时间都花在等待 GC 无法提供的分配上。

随着总容量的增加,或者消耗数据的机器上的 IO 增加,您将能够维持这种写入速率,但一切都表明您没有足够的容量来维持这种负载。

【讨论】:

  • 感谢您的回复。平均有大约 30 个待处理的压缩任务,但我观察到大约 80-100 个任务的峰值。挂起的刷新看起来很正常,峰值在 4 到 6 左右。CMS 和 ParNewGC 收集时间有时会增加,但我没有看到任何异常。此外,我提交了 3GB 堆空间,我相信这是 DataStax 文档中推荐的。 8GB的内存肯定是偏低了,想升级一下!然而,整体解决方案通过添加机器进行扩展,但令人烦恼的是性能的逐渐下降。
  • 在高负载下逐渐降低性能是 Cassandra 容量不足的标志。您需要更多 IO 来处理您正在推动的负载。如果您有适当的容量,性能将保持不变,直到您需要添加更多容量。
  • 我相信存储 DataStax OpsCenter 数据会增加性能问题。我的下一步行动是将 RAM 升级到 16GB,然后将堆空间逐步增加到 4-6GB。令我惊讶的是,待处理的写入请求(超过 200,000 个)显着增加,而文档中接受的限制为 100!
  • 您在哪里看到文档中有 100 次挂起写入的限制?
  • 有趣,不知道我从哪里得到这个“100”! “已到达集群但等待处理的写入请求数。在低或中等写入负载期间,您应该看到 0 个挂起的写入操作(或最多一个非常低的数字)。”是文档所说的。
【解决方案2】:

使您的写入超时与 2.0 中的新默认值(2 秒而不是 10 秒)保持一致,这将有助于更快地启动负载卸载:https://issues.apache.org/jira/browse/CASSANDRA-6059

【讨论】:

  • 我会试试这个,让你知道结果
  • 通过上述变化,我没有看到没有显着增加。挂起的写入。性能有所下降,但不会像以前那样逐渐减少到 0 次插入/秒。我已将集群的每个节点上的 RAM 从 8GB 增加到 16GB。我计划进行一些实验,将 HeapSize 也从 3G 增加到 4-6GB。
  • 我不建议在没有特定理由的情况下再次猜测默认堆大小。
  • Heap size 4G,MaxNewSize 1536M,写性能看起来不错。整体 RAM 利用率仅为 8GB 左右。如果我说 Cassandra 1.2 的堆外内存利用率很差,你同意吗?读取性能似乎很糟糕。在这里报告了一个问题:stackoverflow.com/questions/20823184/…
  • 我不同意。
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多