Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DB::Exception:Part XXXXX 与前一个 part YYYYY 发生相交。这是一个 bug,或是手动干预 ZooKeeper 数据所致。

为什么会出现

发生此错误时,表会显示为只读,错误信息中会提示存在相交的 parts。

你可以在日志中看到该错误,或者通过

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; -- 等待副本同步 parts。建议在恢复完成后检查所有副本上的 `system.detached_parts`。

更多资源

相关 PR 和 GitHub issue:

受影响的版本:

ClickHouse v 22.12 及之前版本

Navigation