発生する理由
このエラーが発生すると、テーブルは読み取り専用として表示され、エラーメッセージに「交差するパーツ」と表示されます。
ログで、または次の方法でこのエラーを確認できます
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 Issue:
- ClickHouse/ClickHouse#34096
- ClickHouse/ClickHouse#30651
- ClickHouse/ClickHouse#31060
- ClickHouse/ClickHouse#35863
影響を受けるバージョン:
ClickHouse v 22.12 以前のバージョン