Clickhouse集群副本同步完成时间问题

问题描述 投票:0回答:1

我正在尝试删除 400 亿行表中的约 5000 万行(基于 event_date 列的某一天),我使用带有“where”子句的轻量级删除,并且“where”没有属于 ORDER BY 的列主键,所以我需要扫描整个表才能找到具有特定“event_date”的数据。我知道我可以对表进行分区或创建主键或使用特定的“ORDER BY”创建表,但是在上面提到的没有任何提到的解决方案的情况下,有没有什么方法可以仅在所有副本删除其数据时结束操作?当 SQL 操作在掩码 DELETE FROM ... ON CLUSTER SETTINGS alter_sync = 2 、replication_wait_for_inactive_replica_timeout = 600 、mutations_sync = 2 上超过 120 秒时,我仍然收到错误

DB::异常:观察任务 /clickhouse/cluster_name/task_queue/ddl/query-0023446431 的执行时间超过了distributed_ddl_task_timeout (= 180)秒。有 10 个未完成的主机(其中 0 个当前处于活动状态),它们将在后台执行查询。

我想让sql运行直到所有副本上的删除完成,即使这需要无限的时间,我不想在180秒后中断SQL操作(我知道它仍在后台运行),我怎样才能实现这一点?

database synchronization replication sql-delete clickhouse
1个回答
0
投票

您可以使用设置distributed_ddl_task_timeout = 3600

因为你有全盘扫描 在这种情况下,最好使用

ALTER TABLE .. DELETE WHERE ...

并投票

SELECT hostName(), * FROM clusterAllReplicas('cluster_name',system.mutations) WHERE is_done=0 FORMAT Vertical

© www.soinside.com 2019 - 2024. All rights reserved.