Por qué ocurre
Cuando se produce este error, una tabla aparece como de solo lectura y el mensaje de error indica partes superpuestas.
Puedes ver el error en los registros o mediante
SELECT *
FROM system.replicas
WHERE is_readonly = 1El mensaje de error es similar a este:
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 del error
Este error puede deberse a una condición de carrera entre mergeSelectingTask y la reinicialización de la cola.
Solución
Ejecute las siguientes consultas en todas las réplicas:
DETACH TABLE table_name; -- Necesario para DROP REPLICA
SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/table_path_in_zk/'; -- Eliminará todo lo que haya en /table_path_in_zk
ATTACH TABLE table_name; -- La tabla estará en modo de solo lectura, ya que no hay metadatos en ZKLuego, ejecute lo siguiente en todas las réplicas:
SYSTEM RESTORE REPLICA table_name; -- Desconectará todas las particiones, recreará los metadatos en ZK (como si fuera una tabla nueva vacía) y luego volverá a adjuntar todas las particiones
SYSTEM SYNC REPLICA table_name; -- Espera a que las réplicas sincronicen las partes. También se recomienda verificar `system.detached_parts` en todas las réplicas una vez finalizada la recuperación.Recursos adicionales
PR e incidencias relacionadas en GitHub:
- ClickHouse/ClickHouse#34096
- ClickHouse/ClickHouse#30651
- ClickHouse/ClickHouse#31060
- ClickHouse/ClickHouse#35863
Versiones afectadas:
ClickHouse v 22.12 y versiones anteriores