sstableofflinerelevel
在使用 LeveledCompactionStrategy 時,sstables 可能會卡在最近啟動節點的 L0 上,而且壓縮永遠無法追上。此工具用於將 sstables 提升到最高可能的層級。
執行方式如下:sstables 會依其最後一個權杖進行排序。假設原始層級如下(請注意,[ ] 表示權杖邊界,而非磁碟上 sstable 的大小;所有 sstables 的大小都相同)
L3 [][][][][][][][][][][] L2 [ ][ ][ ][ ] L1 [ ][ ] L0 [ ]
下降到 L0 並依最後一個權杖排序後會如下所示(而且,為了說明重疊,重疊的部分會放在新的一行)
[][][] [ ][][][] [ ] [ ] ...
然後,我們開始從最小的最後一個權杖進行反覆運算,並將不會造成重疊的所有 sstables 加入一個層級。我們將由上而下重建原始層級。每當我們將一個 sstable 加入層級時,我們就會將它從排序清單中移除。一旦我們到達排序清單的結尾,我們就有一個完整的層級,然後可以從下一個層級重新開始。
如果我們最終得到的層級比預期多,我們會將超過預期的所有層級都放入 L0,例如,原始 L0 檔案很可能會被放入它自己的層級,因為它們最常與許多其他 sstables 重疊。
在執行此工具之前必須先停止 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