问题场景
(1)所有表使用:MergeTree
(2)用户对某表 table1 进行大量更新操作(1w+条UPDATE操作)
(3)查询页面部分数据异常
(4)运维侧定位到clickhouse故障,无法启动
问题排查
(1)初始版本上线未使用clickhouse Replicated功能,无法在从节点恢复数据。
(2)磁盘中可以看到 table1 下存在大量mutation文件。
(3)删除mutation文件文件,clickhouse重启成功。
问题总结
Mutation操作
(1)ClickHouse 提供了 DELETE 和 UPDATE 的能力,这类操作被称为 Mutation 查询。
(2)Mutation能最终实现修改和删除,是异步实现,没有事务控制。
(3)Mutation 语句是一种“很重”的操作,更适用于批量数据的修改和删除,单条数据的UPDATE 操作代价是高昂的。
副本引擎
(1)所有表使用:MergeTree 引擎,没有备份能力;后续调整为备份引擎:Replicated功能。
后续问题
(1)ReplicatedMergeTree引擎对数据无法去重,导致数据成倍增加,统计数值成倍累加。
(2)最后,重新定义表格引擎,采用副本去重引擎:ReplicatedReplacingMergeTree
(3)每次全量导出数据时,可能会先truncate表数据,存在一段时间查询空缺。
建议使用clickhouse表重命名能力,导出完成后,重命名临时表为新表。
重命名命令:
rename table db1.table1 to db1.table2;