【发布时间】:2015-03-26 07:46:03
【问题描述】:
在使用 sstableloader 批量加载数据后,每个 Cassandra 节点最终会得到大约 3.000 个大小约为 32MB 的 sstable。
试图减少数量。 sstables 我在每个节点上运行“nodetool compact”。
这种压缩给堆带来了巨大的压力。我尝试使用 8GB 堆(还有 16GB,尽管我知道不建议这样做)。在这两种情况下,C* 节点每次扫描都会进行大约 90 秒的垃圾收集。总之,compaction 无法完成。
每台机器都有 32 GB 的物理内存。批量加载的表使用 STCS 和缓存 = 'keys_only'。
这导致了一些问题:
- 为什么许多较小的 sstable 在压缩期间对堆的压力比较少、较小的 sstable 更大?
- 什么是正确的策略来压缩这些批量加载的 sstable?添加堆似乎并不能解决它。
- 移动一些 sstable 是否安全(使用 linux 命令 mv),使用剩余的 sstable 运行“nodetool compact”。然后 mv 移动的 sstables 回到原来的位置并再次运行“nodetool compact”。 (黑客,我知道)。
更新
实际上,我有这些数量的 sstables - 大多数大小相似。由于内存不足,主要压缩无法完成。而且我找不到一种方法来进行小型压实:
【问题讨论】:
-
顺便说一句;问题的答案没有。三是“不”。幸运的是,“nodetool repair”为我尝试过的节点提供了救援。
-
啊……再说一遍。我认为“nodetool refresh”可以恢复我移回的 sstables。
标签: cassandra