sstableofflinerelevel — SSTable 오프라인 릴레벨링

sstableofflinerelevel — SSTable 오프라인 릴레벨링

LeveledCompactionStrategy를 사용할 때, 최근 부트스트랩된 노드에서 SSTable이 L0에 쌓여(blocked) 컴팩션이 따라잡지 못하는 경우가 있어요. 이 도구는 SSTable을 가능한 가장 높은 레벨로 올려주는 데 사용합니다.

관련 문서: CASSANDRA-8301

이 방식은 다음과 같아요. SSTable을 마지막 토큰(last token) 기준으로 정렬합니다. 원래의 레벨링이 이렇게 있다고 할 때([ ]는 토큰 경계를 나타내며, 디스크상의 SSTable 크기가 아님에 주의하세요. 모든 SSTable은 같은 크기입니다):

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

이것을 L0으로 내린 뒤 마지막 토큰으로 정렬하면 다음과 같이 보입니다(겹침을 보여주기 위해 겹치는 것들은 새 줄에 배치했습니다):

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

그런 다음 가장 작은 마지막 토큰부터 반복하면서, 겹침(overlap)을 일으키지 않는 모든 SSTable을 한 레벨에 추가합니다. 원래의 레벨링을 위에서 아래로 재구성하게 되는 셈이에요. SSTable을 레벨에 추가할 때마다 정렬된 목록에서 제거합니다. 정렬된 목록의 끝에 도달하면 하나의 완전한 레벨이 되고, 그 아래 레벨부터 다시 시작합니다.

예상보다 많은 레벨이 나오게 되면, 예상치를 초과하는 모든 레벨을 L0에 둡니다. 예를 들어 원래의 L0 파일은 대부분 다른 많은 SSTable과 겹치므로 대개 자기만의 레벨에 배치됩니다.

이 도구 실행 전에 Cassandra를 반드시 중지해야 해요. 그렇지 않으면 예상치 못한 결과가 발생할 수 있으며, 스크립트는 Cassandra가 정지되었는지 검증하지 않습니다.

출처: sstableofflinerelevel — SSTable 오프라인 릴레벨링

본문

기본 사용법은 다음과 같습니다.

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

드라이 런(dry run) 하기

--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)

더 알아보기 (Learn more)