Почему это происходит
При возникновении этой ошибки таблица становится доступной только для чтения, а в сообщении об ошибке указаны пересекающиеся части.
Вы можете увидеть эту ошибку в журналах или с помощью
SELECT *
FROM system.replicas
WHERE is_readonly = 1Сообщение об ошибке выглядит следующим образом:
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))Причина ошибки
Эта ошибка может возникать из-за состояния гонки между mergeSelectingTask и повторной инициализацией очереди.
Решение
Выполните следующие запросы на всех репликах:
DETACH TABLE table_name; -- Требуется для DROP REPLICA
SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/table_path_in_zk/'; -- Удалит всё из /table_path_in_zk
ATTACH TABLE table_name; -- Таблица будет в режиме только для чтения, поскольку метаданные в ZK отсутствуютЗатем выполните следующее на всех репликах:
SYSTEM RESTORE REPLICA table_name; -- Отсоединит все партиции, пересоздаст метаданные в ZK (как для новой пустой таблицы) и присоединит все партиции обратно
SYSTEM SYNC REPLICA table_name; -- Ожидание синхронизации частей между репликами. Также рекомендуется проверить `system.detached_parts` на всех репликах после завершения восстановления.Дополнительные ресурсы
Связанные PR и задачи на GitHub:
- ClickHouse/ClickHouse#34096
- ClickHouse/ClickHouse#30651
- ClickHouse/ClickHouse#31060
- ClickHouse/ClickHouse#35863
Затронутые версии:
ClickHouse v 22.12 и более ранних версий