sstableofflinerelevel
LeveledCompactionStrategyを使用する場合、最近ブートストラップされたノードでSSTableがL0でスタックし、コンパクションが追いつかないことがあります。このツールは、SSTableを可能な限り最高のレベルに引き上げるために使用されます。
これは次のように行われます。SSTableは最後のトークンでソートされます。次のような元のレベリングがあるとします([]はトークンの境界を示し、ディスク上のSSTableのサイズを示すものではありません。すべてのSSTableは同じサイズです)
L3 [][][][][][][][][][][] L2 [ ][ ][ ][ ] L1 [ ][ ] L0 [ ]
L0にドロップされ、最後のトークンでソートされた後は、次のようになります(重複を示すために、重複するものは新しい行に配置されます)
[][][] [ ][][][] [ ] [ ] ...
次に、最小の最終トークンから反復処理を開始し、重複が発生しないすべてのSSTableをレベルに追加します。元のレベリングをトップダウンで再構築します。SSTableをレベルに追加するたびに、ソート済みリストから削除します。ソート済みリストの最後に到達すると、完全なレベルになり、下のレベルからやり直すことができます。
予想よりも多くのレベルになった場合は、予想を超えるすべてのレベルをL0に配置します。たとえば、元のL0ファイルは、多くの場合、他の多くのSSTableと重複するため、独自のレベルに配置されることがよくあります。
このツールを実行する前にCassandraを停止する必要があります。そうしないと、予期しない結果が発生します。注: スクリプトはCassandraが停止していることを確認しません。
ドライランの実行
--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)