Acho que as lápides não estão sendo excluídas em uma tabela do Cassandra 4.1.7.
gc_grace_seconds da tabela = 345600
Mesmo depois de executar nodetool garbagecollect
(muito mais de 4 dias após a exclusão), se eu executar, nodetool tablestats
recebo o seguinte:
O tamanho no disco também não diminui após executar o garbage collect.
Não tenho certeza se já corri no passado nodetool compact
(o que acho que significa que preciso continuar usando?)
Pergunta paralela: como posso fazer com que o tablestats retorne informações mais recentes (em vez de 2024-12-12)
Obrigado
Parece que a compactação não está em execução. É uma droga, mas é o que pode acontecer se for executada manualmente, mesmo que uma vez.
Tente executar um
SELECT * FROM system.compaction_history
. Se o keyspace.table em questão não foi executado por um tempo, talvez seja necessário começar a agendá-lo para execução recorrente.Depois que a compactação for executada para essa tabela, dê outra olhada
nodetool tablestats
novamente. Se não houver uma melhora significativa, então algum outro problema pode estar em jogo aqui.Editar 20241223
Eu ainda não correria
nodetool compact
.Os snapshots estão habilitados? Se as compactações estiverem realmente em execução, é possível que um snapshot antigo tenha um hard link para uma ou mais SSTables. Se sim, veja sobre como limpar alguns dos snapshots antigos e então veja se a compactação será executada novamente por conta própria.
O
nodetool garbagecollect
comando foi projetado para remover especificamente os dados excluídos das tabelas, não necessariamente as lápides.O que é importante notar aqui é que as lápides serão descartadas
garbagecollect
se a partição inteira for excluída. Não acho que isso se aplique ao seu caso porque parece que você está excluindo linhas dentro das partições. As lápides de linha não serão necessariamente descartadas, principalmente se fragmentos da partição ainda existirem em outras SSTables.A captura de tela que você postou mostra partições com milhões de tombstones de linha. Isso indica que você está usando o Cassandra para gerenciar filas, excluindo entradas (linhas) quando elas foram processadas.
Filas e conjuntos de dados semelhantes a filas não são uma boa opção para o Cassandra, pois acumulam muitas lápides (veja a postagem do blog sobre filas como um antipadrão ). No seu caso, você está acionando compactações manualmente como uma solução alternativa, mas isso cria outros problemas, como expliquei em outra postagem (veja por que forçar grandes compactações não é o ideal ).
No curto prazo, você realmente não tem muita escolha além de continuar fazendo o que está fazendo. A solução de longo prazo é revisar seu caso de uso e possivelmente redesenhar seu modelo de dados. Saúde!