Cassandra 文档

版本

您正在查看预发布版本的文档。

sstableofflinerelevel

使用 LeveledCompactionStrategy 时,sstables 可能会卡在最近引导的节点上的 L0,并且压缩可能永远无法赶上。此工具用于将 sstables 提升到尽可能高的级别。

实现方式如下:sstables 按其最后一个令牌排序。给定一个原始的级别,如下所示(注意 [ ] 表示令牌边界,而不是磁盘上的 sstable 大小;所有 sstables 的大小相同)

L3 [][][][][][][][][][][]
L2 [    ][    ][    ][  ]
L1 [          ][        ]
L0 [                    ]

在降级到 L0 并按最后一个令牌排序后,将如下所示(为了说明重叠,重叠的 sstable 会放在新行上)

[][][]
[    ][][][]
    [    ]
[          ]
...

然后,我们从最小的最后一个令牌开始迭代,并将所有不会导致重叠的 sstable 添加到一个级别。我们将自上而下重建原始的级别。每当我们将一个 sstable 添加到级别时,我们都会将其从排序列表中删除。当我们到达排序列表的末尾时,我们就拥有了一个完整的级别,可以从下一级开始重新开始。

如果最终得到的级别比预期多,我们将所有超过预期的级别放在 L0 中,例如,原始的 L0 文件很可能被放在它自己的级别中,因为它们通常与许多其他 sstable 重叠。

在执行此工具之前,必须停止 Cassandra,否则会导致意外结果。注意:该脚本不会验证 Cassandra 是否已停止。

用法

sstableofflinerelevel [--dry-run] <keyspace> <table>

进行干运行

使用 --dry-run 选项查看当前的级别分布和更改后的预测级别。

示例

sstableofflinerelevel --dry-run keyspace eventlog
For sstables in /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753:
Current leveling:
L0=2
Potential leveling:
L0=1
L1=1

运行重新级别

示例

sstableofflinerelevel keyspace eventlog
For sstables in /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753:
Current leveling:
L0=2
New leveling:
L0=1
L1=1

未找到键空间或表

如果提供了无效的键空间和/或表,将抛出异常。

示例

sstableofflinerelevel --dry-run keyspace evenlog

Exception in thread "main" java.lang.IllegalArgumentException: Unknown keyspace/columnFamily keyspace1.evenlog
    at org.apache.cassandra.tools.SSTableOfflineRelevel.main(SSTableOfflineRelevel.java:96)