Pourquoi cela se produit
Lorsque cette erreur se produit, une table apparaît en lecture seule et le message d'erreur indique des parties intersectantes.
Vous pouvez voir l'erreur dans les logs ou en
SELECT *
FROM system.replicas
WHERE is_readonly = 1Le message d’erreur ressemble à ceci :
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))Cause de l’erreur
Cette erreur peut être causée par une condition de concurrence entre mergeSelectingTask et la réinitialisation de la file d’attente.
Solution
Exécutez les requêtes suivantes sur toutes les répliques :
DETACH TABLE table_name; -- Required for DROP REPLICA
SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/table_path_in_zk/'; -- It will remove everything from /table_path_in_zk
ATTACH TABLE table_name; -- Table will be in readonly mode, because there is no metadata in ZKExécutez ensuite la commande suivante sur toutes les répliques :
SYSTEM RESTORE REPLICA table_name; -- It will detach all partitions, re-create metadata in ZK (like it's new empty table), and then attach all partitions back
SYSTEM SYNC REPLICA table_name; -- Wait for replicas to synchronize parts. Also it's recommended to check `system.detached_parts` on all replicas after recovery is finished.Ressources supplémentaires
PR et issues GitHub associées :
- ClickHouse/ClickHouse#34096
- ClickHouse/ClickHouse#30651
- ClickHouse/ClickHouse#31060
- ClickHouse/ClickHouse#35863
Versions affectées :
ClickHouse v 22.12 et versions antérieures