Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

sstableofflinerelevel

在使用 LeveledCompactionStrategy 時,sstables 可能會卡在最近啟動節點的 L0 上,而且壓縮永遠無法追上。此工具用於將 sstables 提升到最高可能的層級。

執行方式如下:sstables 會依其最後一個權杖進行排序。假設原始層級如下(請注意,[ ] 表示權杖邊界,而非磁碟上 sstable 的大小;所有 sstables 的大小都相同)

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

下降到 L0 並依最後一個權杖排序後會如下所示(而且,為了說明重疊,重疊的部分會放在新的一行)

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

然後,我們開始從最小的最後一個權杖進行反覆運算,並將不會造成重疊的所有 sstables 加入一個層級。我們將由上而下重建原始層級。每當我們將一個 sstable 加入層級時,我們就會將它從排序清單中移除。一旦我們到達排序清單的結尾,我們就有一個完整的層級,然後可以從下一個層級重新開始。

如果我們最終得到的層級比預期多,我們會將超過預期的所有層級都放入 L0,例如,原始 L0 檔案很可能會被放入它自己的層級,因為它們最常與許多其他 sstables 重疊。

在執行此工具之前必須先停止 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)