【发布时间】:2015-05-12 09:49:23
【问题描述】:
我们正在运行由 Cassandra 支持的 Titan Graph DB 服务器作为持久存储,并且遇到了达到 Cassandra 墓碑阈值限制的问题,这导致我们的查询随着数据的累积而定期失败/超时。似乎压缩无法跟上正在添加的墓碑数量。
我们的用例支持:
- 高读/写吞吐量。
- 读取灵敏度高。
- Titan 中节点值的频繁更新。导致在 Cassandra 中更新行。
鉴于上述用例,我们已经在优化 Cassandra 以积极完成以下工作:
- 使用分级压实策略进行积极压实
- 使用 tombstone_compaction_interval 为 60 秒。
- 使用 tombstone_threshold 为 0.01
- 将 gc_grace_seconds 设置为 1800
尽管进行了以下优化,我们仍然在 Cassandra 日志中看到类似于以下内容的警告: [WARN] (ReadStage:7510) org.apache.cassandra.db.filter.SliceQueryFilter: 在 .graphindex 中读取 0 个实时单元和 10350 个墓碑单元(参见 tombstone_warn_threshold)。请求了 8001 列, slices=[00-ff], delInfo={deletedAt=-9223372036854775808, localDeletion=2147483647}
随着时间的推移,我们有时还会看到超出故障阈值并导致错误。
我们的 cassandra.yaml 文件的 tombstone_warn_threshold 为 10000,而 tombstone_failure_threshold 远高于建议的 250000,但没有真正明显的好处。
如果有进一步优化的空间,任何可以为我们指出正确配置的帮助将不胜感激。提前感谢您的时间和帮助。
【问题讨论】:
-
您是否经常删除数据?据我了解,除非数据被明确删除或过期,否则不会创建墓碑。
-
我们认为,在内部处理我们与 Cassandra 的所有交互的 Titan GraphDb 可能会为每次更新执行删除和新创建,这会增加删除的数量。
-
如果是这种情况,最好确认一下。您能否在您的 cassandra 节点之一上启用概率跟踪 (datastax.com/documentation/cassandra/2.0/cassandra/tools/…) 以查看删除内容是什么?另一种可能性是列已过期(设置为 TTL),您认为这也可能发生在这里吗?
-
我今天会试试这个。再次感谢指点。
-
@Rohit 今天看到了这篇文章。应该可以帮助您了解何时创建墓碑。 groups.google.com/forum/#!msg/aureliusgraphs/XMG7DKkAll0/…