【发布时间】:2015-06-27 15:07:52
【问题描述】:
我们有几个表使用 Leveled 压缩策略和 SizeTiered 压缩策略。我们需要多久运行一次压缩?提前致谢
【问题讨论】:
标签: cassandra cql datastax datastax-enterprise cqlsh
我们有几个表使用 Leveled 压缩策略和 SizeTiered 压缩策略。我们需要多久运行一次压缩?提前致谢
【问题讨论】:
标签: cassandra cql datastax datastax-enterprise cqlsh
压缩会自行运行(只要您没有在 yaml 中禁用自动压缩)。
根据 cassandra 写入路径,我们会定期将内存表刷新到磁盘中,并将其转换为不可变的 SSTable(排序字符串表)。当您更新现有单元格时,它最终会被写入 sstable。可能与原始记录不同。当我们阅读时,有时 C* 必须扫描各种 sstables(经过一些优化,请参阅布隆过滤器)以找到最新版本的单元格。在 Cassandra 中,最后写入获胜。
Compaction 采用 sstables 并将它们压缩在一起以删除重复数据,以优化读取。这是一个自动操作,尽管您可以tune compactions 或多或少地运行。
Size tiered 压缩是 cassandra 中的默认压缩策略,它会寻找相同大小的 sstable,并在找到足够大时将它们压缩在一起(默认为 4 个)。 Size tiered 的 IO 密集度低于 leveled,并且通常在您拥有较小的盒子和旋转驱动器时会更好地工作。
Leveled 压缩针对读取进行了优化,当您读取繁重的工作负载或具有大量更新的紧读 SLA 时可能是有意义的。分级压缩更耗费 IO 和 CPU 密集型,因为您要花费更多周期来优化读取,但读取本身应该更快并且命中更少的 SStable。当您首次启用这些功能或工作量增加时,请密切关注 nodetool compaction stats 中的 io wait 和挂起的压缩。
多线程压缩 - 关闭它,开销大于好处。直到它在 C* 2.1 中被删除。
并发压缩器 - 现在默认为 2,用于默认为核心数,这是一个不好的默认值。如果您在 2.0 分支上并且未运行最新的 DSE,请检查此默认值并考虑将其减少到 2。这是您可以同时运行的压缩任务的数量(不同的列族)。
压缩限制 - 一种限制压缩占用资源量的方法。您可以使用nodetool getcompactionthreshold 和nodetool setcompactionthreshold 即时调整它。您希望将此调整到不累积待处理任务的程度。 0 --> 无限制。 Unlimited 通常不是最快的设置,因为系统可能会陷入困境。
【讨论】: