O que a exceção significa
Too many parts quando um INSERT excederia um limite configurado para o número de partes de dados ativas em uma tabela MergeTree. A exceção geralmente inclui a mensagem Merges are processing significantly slower than inserts.
Cada INSERT síncrono cria pelo menos uma parte de dados. Se uma inserção contiver linhas para vários valores de partição, o ClickHouse poderá criar uma parte para cada partição afetada. A mesclagem em segundo plano combina partes menores em partes maiores, mas, se novas partes forem criadas mais rápido do que o ClickHouse consegue mesclá-las, o número de partes ativas continuará aumentando.
A exceção pode ser causada por qualquer uma destas configurações:
parts_to_throw_insert, que limita o número de partes ativas em uma única partição.max_parts_in_total, que limita o número total de partes ativas em uma tabela.
Diagnostique a causa
max_parts_in_total, conte todas as partes ativas da tabela:
- Inserções síncronas frequentes e pequenas.
- Uma chave de particionamento de alta cardinalidade.
- Inserções que contêm linhas para muitos valores de partição.
- Mesclagens em segundo plano que não conseguem acompanhar devido ao throughput de armazenamento limitado, espaço livre em disco insuficiente ou outra contenção de recursos.
system.merges e revisar os logs do servidor para identificar falhas de merge.
Resolva a exceção
Inserções síncronas em lote
INSERT síncrono por segundo. Inserções menos frequentes, porém maiores, criam menos partes e reduzem o trabalho necessário da mesclagem em segundo plano.
Use inserções assíncronas
wait_for_async_insert = 1 para que o ClickHouse confirme uma inserção somente depois que os dados forem gravados com sucesso.
Revise a chave de particionamento
Investigue gargalos de merge
Evite aumentar os limites de partes como correção principal
parts_to_throw_insert ou max_parts_in_total não resolve a causa da criação excessiva de partes. Limites mais altos podem adiar a exceção, mas também podem aumentar a sobrecarga do sistema de arquivos e dos metadados, além de reduzir o desempenho das consultas. Altere essas configurações somente depois de identificar a causa e confirmar que o sistema tem capacidade suficiente.
Verifique a recuperação
insert ou o esquema de particionamento. O número de partes ativas deve se estabilizar e depois diminuir, à medida que as mesclagens em segundo plano colocam o processamento em dia. Continue monitorando falhas de insert, o espaço livre em disco e system.merges até que o backlog seja eliminado.