Cassandra 2.2.5 を実行する 24 ノードの AWS クラスター (i2.xlarge) があります。大きなテーブルが 1 つと小さなテーブルがいくつかあります。大きなテーブルは、ほとんどのディスク領域を消費します。ディスク使用量が予期せず増加しています。
LCS を使用していますが、SSTable が上位レベルに移動していないことに気付きました。
表の cfstats は、SSTable がより高いレベルに圧縮されていないように見えることを示しています。
SSTables in each level: [2, 20/10, 206/100, 2146/1000, 1291, 0, 0, 0, 0]
データセットの読み込みは約 1 か月前に完了し、ディスク使用率は 60 ~ 65% でした。データセットを更新しており、ディスク使用量は 1 日あたり約 0.5% 増加しています。現在、ノードは 75 ~ 80% 使用されています。行は更新されていますが、新しい行も削除されている行もありません。そのため、ディスク使用量が増えるとは予想していませんでした。私たちの最善の推測は、コンパクションが sstables から重複を削除していないということです。
データセットを強制的に圧縮しようとすると (nodetool compact)、ディスク容量が不足しているというエラーが発生します。
"error: Not enough space for compaction, estimated sstables = 1977, expected write size = 331746061359"
LCS に関するドキュメントでは、「圧縮による一時的な使用のために予約する必要があるのは、sstable サイズの 10 倍に十分なスペースのみである」と主張しています。私たちの場合、圧縮には 1977x 160MB が必要なようです。
LCS 圧縮レベルをリセットするための提案に出くわしました: ディスク容量が少ない Leveled Compaction Strategy
ただし、同じ問題を抱えた小さなデータセットを持つ小さなクラスターでこれを試したところ、進行した圧縮には、約束された 1.6G だけでなく、大量のスペースも必要であるように見えました。
前:
SSTables in each level: [1, 20/10, 202/100, 7, 0, 0, 0, 0, 0]
Space used (live): 38202690995
sstablelevelreset の実行後:
SSTables in each level: [231/4, 0, 0, 0, 0, 0, 0, 0, 0]
Space used (live): 38258539433
その後の最初の圧縮では、21698490019 バイトの圧縮が開始されました。これは、約 129 個の sstables に相当するデータのようです。
小さなクラスターでは十分な追加ディスク容量がありますが、大きなクラスターでは、圧縮を強制したり、sstablelevelreset ユーティリティを使用して圧縮を最初からやり直したりするのに十分なスペースがないようです。
圧縮が完了すると、sstable レベルは次のようになります (ドキュメントは継続的に更新されますが、データベースには追加されないことに注意してください)。
SSTables in each level: [0, 22/10, 202/100, 13, 0, 0, 0, 0, 0]
Space used (live): 39512481279
ディスク容量を回復するために他にできることはありますか? または、少なくともディスクの使用量が増えないようにするためですか?
テーブルは次のように定義されます。
CREATE TABLE overlordnightly.document (
id bigint PRIMARY KEY,
del boolean,
doc text,
ver bigint
) WITH bloom_filter_fp_chance = 0.1
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.DeflateCompressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
ノードの 1 つからの完全な cfstats:
Keyspace: overlordprod
Read Count: 68000539
Read Latency: 3.948187530190018 ms.
Write Count: 38569748
Write Latency: 0.02441453179834102 ms.
Pending Flushes: 0
Table: document
SSTable count: 3283
SSTables in each level: [0, 22/10, 210/100, 2106/1000, 943, 0, 0, 0, 0]
Space used (live): 526180595946
Space used (total): 526180595946
Space used by snapshots (total): 0
Off heap memory used (total): 2694759044
SSTable Compression Ratio: 0.22186642596102463
Number of keys (estimate): 118246721
Memtable cell count: 45944
Memtable data size: 512614744
Memtable off heap memory used: 0
Memtable switch count: 1994
Local read count: 68000545
Local read latency: 4.332 ms
Local write count: 38569754
Local write latency: 0.027 ms
Pending flushes: 0
Bloom filter false positives: 526
Bloom filter false ratio: 0.00000
Bloom filter space used: 2383928304
Bloom filter off heap memory used: 2383902040
Index summary off heap memory used: 24448020
Compression metadata off heap memory used: 286408984
Compacted partition minimum bytes: 87
Compacted partition maximum bytes: 12108970
Compacted partition mean bytes: 16466
Average live cells per slice (last five minutes): 1.0
Maximum live cells per slice (last five minutes): 1
Average tombstones per slice (last five minutes): 1.0
Maximum tombstones per slice (last five minutes): 1
発生している圧縮について間違っているように見えるものがあります。特に次の 1 つを示します。
DEBUG [CompactionExecutor:1146] 2016-07-26 08:49:02,333 CompactionTask.java:142 - Compacting (cd2baa50-530d-11e6-9c8e-b5e6d88d6e11) [
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12943-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12970-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12972-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12953-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12955-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12957-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12978-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12976-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-4580-big-Data.db:level=4,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-14528-big-Data.db:level=2,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12949-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12959-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12974-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12962-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-11516-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12941-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12968-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12951-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12983-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12947-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12966-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12945-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12964-big-Data.db:level=3,
]
圧縮されている 23 個の sstables があることに気付いた場合: レベル 2 から 1 つ、レベル 4 から 1 つ、残りはレベル 3 からです。これらは最終的にレベル 3 に圧縮されますが、テーブルはレベルが上がるだけという印象を受けました。レベル 4 のテーブルがレベル 3 に圧縮されるのはなぜですか? ログでこれに気付いたので、頻繁に発生していることがわかります。たとえば、これはほぼ同じ時期の別のものです。
DEBUG [CompactionExecutor:1140] 2016-07-26 08:46:47,420 CompactionTask.java:142 - Compacting (7cbb0390-530d-11e6-9c8e-b5e6d88d6e11) [
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12910-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-14524-big-Data.db:level=2,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12908-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-12906-big-Data.db:level=3,
/data/cassandra/overlordprod/document-57ed497007c111e6a2174fb91d61e383/la-3543-big-Data.db:level=4,
]
これが問題かどうかはわかりません。