【问题标题】:leveled compaction not compacting to higher level水平压实不压实到更高水平
【发布时间】:2019-07-17 10:27:00
【问题描述】:

通过更改表从 STCS 切换到 LCS - 版本 3.11.3

ALTER TABLE table WITH compaction = {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy', 'unchecked_tombstone_compaction': 'true'};

现在我看到有默认大小为 160mb 的 sstables,现在我看到超过 100 个 160mb sstables。

  1. 当初始转换发生时,创建的文件是 L0 吗?

  2. 如果是这样,它们什么时候被压缩到 L1,它已经几个小时并且启用了自动压缩。我仍然没有看到它们被压缩到更高的水平。

  3. 默认大小160mb,是L0还是L1?

  4. sstable 的大小将是多少?它们会是 160mb 或更小吗?

  5. 每一层创建多少个文件后,会被压缩到下一层吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    在 LCS 的默认情况下 (sstable_size_in_mb = 160 mb),这是完全可以预料的。

    L1及以上为正常水平。 L0 只是占位符,可以有重叠的数据和任何大小的 sstables。 在正常级别,两个 sstable 不重叠,这意味着没有两个 sstable 可以具有相同的分区。因此,为了读取一个分区,我们只需要检查一个 sstable。

    当初始转换发生时,创建的文件是 他们L0?如果是这样,它们什么时候被压缩到 L1,它是几个 小时并启用自动压缩。我仍然没有看到他们得到 压缩到更高的级别。

    ->L0 像 32 个 sstables 一样满了,它使用 L0 中的 SCTC 使 sstables 倒计时。你可以查看nodetool tablestats来获取每个级别的sstables数量

    更改复制策略时需要运行nodetool repair-full,具体过程请查看this

    默认大小160mb,是L0还是L1?尺寸是多少 sstable 的哪一个会变成 sstables?他们会是 160mb 还是 更小?

    -> 只有 L0 可以有任意大小的 sstables。 正常级别 N 有 10^N *160 MB sstables(其中 N>=1)。所以 LCS 在正常级别有固定大小的 sstables 但总大小会随着我们进入更高级别而增加(例如:L1(1.6G),L2(16G)等等)

    在每个级别创建了多少个文件后,它会被压缩吗 更上一层楼?

    ->在普通关卡中,每个关卡需要容纳 10 倍以上的 sstable 才能上一级。

    【讨论】:

    • 我们可以设置更低或更高的值而不是 10 吗?有参数吗?
    • fanout_size 现在已根据 CASSANDRA-11550 进行配置。但是你为什么要改变呢?
    • 如果我们可以设置 15 或更高而不是 10,那么更高级别可以保留大部分数据。如果我没记错的话,它可能会改善读取延迟?
    • 它可以通过在读取过程中接触较少数量的 sstables 来提高读取性能,因为级别数量会减少,但您需要再次关注压缩 io。
    • 最大等级数背后有什么公式或规则吗?如果我将它增加到 10 或减少到 3 会怎样
    猜你喜欢
    • 2013-04-22
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多