Назад | Перейти на главную страницу

Запускайте уплотнения при изменении TWCS TTL в Cassandra 3.0

У меня есть таблица в cassandra, где я сохранял данные, используя TTL клиентов = 1 месяц (TTL таблиц равен 0), таблица настроена со стратегией сжатия временного окна.

Ежедневно Кассандра очищала одну-единственную стабильную работу, содержащую просроченные данные за месяц назад. Недавно я изменил TTL клиентов на 15 дней, я ожидал, что cassandra в какой-то момент очистит два контура в день и освободит место. Но он продолжает чистить один стабильный компьютер в день и хранить мертвые данные в течение 15 дней.

Откуда мне знать?

for f in /data/cassandra/data/keyspace/table-*/*Data.db; do meta=$(sudo sstablemetadata $f); echo -e "Max:" $(date --date=@$(echo "$meta" | grep Maximum\ time | cut -d" " -f3| cut -c 1-10) '+%m/%d/%Y') "Min:" $(date --date=@$(echo "$meta" | grep Minimum\ time | cut -d" " -f3| cut -c 1-10) '+%m/%d/%Y') $(echo "$meta" | grep droppable) ' \t ' $(ls -lh $f | awk '{print $5" "$6" "$7" "$8" "$9}'); done | sort

Эта команда перечисляет все sstables

Max: 05/19/2018 Min: 05/18/2018 Estimated droppable tombstones: 0.9876591095477787        84G May 21 02:59 /data/cassandra/data/pcc/data_history-c46a3220980211e7991e7d12377f9342/mc-218473-big-Data.db
Max: 05/20/2018 Min: 05/19/2018 Estimated droppable tombstones: 0.9875830312750179        84G May 22 15:25 /data/cassandra/data/pcc/data_history-c46a3220980211e7991e7d12377f9342/mc-221915-big-Data.db
Max: 05/21/2018 Min: 05/20/2018 Estimated droppable tombstones: 0.9876636061230402        85G May 23 13:56 /data/cassandra/data/pcc/data_history-c46a3220980211e7991e7d12377f9342/mc-224302-big-Data.db
...

На данный момент я запускал уплотнения вручную с помощью JMX, но я хочу, чтобы все было стерто, как обычно.

run -b org.apache.cassandra.db:type=CompactionManager forceUserDefinedCompaction /data/cassandra/data/keyspace/sstable_path

Я думаю, что разобрался. Пришлось запускать ручное сжатие на самой старой и новейшей стабильных версиях со всем ее содержимым, срок действия которых истек, обе версии одновременно. Через пару дней все почистил.

Как я узнаю, что он запущен? Потому что, когда я пытался запустить forceUserDefinedCompaction на любом другом sstable между ними, он всегда возвращал null.

РЕДАКТИРОВАТЬ: это не сработало, просроченное количество Sstable снова увеличивается