Por que isso ocorre
Quando esse erro ocorre, uma tabela fica como somente leitura, e a mensagem de erro indica partes sobrepostas.
Você pode ver o erro nos logs ou por meio de
SELECT *
FROM system.replicas
WHERE is_readonly = 1A mensagem de erro é semelhante a:
Code: 49. DB::Exception: Part XXXXX intersects previous part YYYYY. It is a bug or a result of manual intervention in the ZooKeeper data. (LOGICAL_ERROR) (version 21.12.4.1 (official build))Causa do erro
Esse erro pode ser causado por uma condição de corrida entre mergeSelectingTask e a reinicialização da fila.
Solução
Execute as consultas a seguir em todas as réplicas:
DETACH TABLE table_name; -- Necessário para DROP REPLICA
SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/table_path_in_zk/'; -- Isso removerá tudo de /table_path_in_zk
ATTACH TABLE table_name; -- A tabela ficará em modo somente leitura, pois não há metadados no ZKEm seguida, execute o seguinte em todas as réplicas:
SYSTEM RESTORE REPLICA table_name; -- Irá desanexar todas as partições, recriar os metadados no ZK (como se fosse uma nova tabela vazia) e então reanexar todas as partições
SYSTEM SYNC REPLICA table_name; -- Aguarda as réplicas sincronizarem as partes. Também é recomendável verificar `system.detached_parts` em todas as réplicas após a conclusão da recuperação.Recursos adicionais
PRs e issues relacionadas no GitHub:
- ClickHouse/ClickHouse#34096
- ClickHouse/ClickHouse#30651
- ClickHouse/ClickHouse#31060
- ClickHouse/ClickHouse#35863
Versões afetadas:
ClickHouse v22.12 e anteriores