ClickHouse:诊断、异步变更与恢复
前置:能读EXPLAIN并理解parts与异步变更。40-diagnostics.sql、50-mutation.sql及60-backup.sql均在完整事件工程;备份分支应先于重放和修改。适用:单节点ClickHouse 24.8 LTS基础语法;资料核对2026-10-17。示例未执行,本轮仅静态解析和文本审阅,不连接数据库、启动服务或调用产品接口。
ClickHouse 诊断证据
ClickHouse 诊断证据从query_log的读取量、内存和异常结合parts的行数、字节与数量判断瓶颈。慢不一定缺索引:可能是全表聚合、列宽、磁盘压力、并发或parts过多。先保存query_id与实际SQL,再检查EXPLAIN和日志,不先执行OPTIMIZE FINAL或修改全局设置。
40-diagnostics.sql只读当前实验库的active parts,以及包含目标表文字的近期查询日志。query_log可能未启用、被采样或尚未刷盘;空结果不是“没有查询”的证明。日志内容和查询来源筛选也不等于完备审计,真实排查还需节点、时间与权限信息。
同样数量的rows可能有完全不同的read_bytes和内存。先比输入规模与读取比例,再观察分区/主键是否裁剪;六行数据只检验SQL语义,parts数随合并变化,不能给出固定parts=2的运行断言。恢复动作需要明确作用对象和失败后证据。
ClickHouse mutations异步
ClickHouse mutations异步重写受影响parts,system.mutations提供is_done、parts_to_do与失败原因;提交成功不等于已完成,也不提供自动回滚。查询可能看到已替换和未替换parts的混合状态,取消mutation只停止剩余工作,不能恢复已经改写的数据。ALTER UPDATE/DELETE与元数据ALTER等待机制不可混为一谈。
50-mutation.sql只在后置分支把event_id=4的country改为CA,显式mutations_sync=1等待当前节点,之后查询country并检查状态。若使用副本,等待当前节点不代表所有副本都完成。mutation不阻塞后续INSERT,也不应被当作持续逐行更新OLTP接口。
源表mutation不会像新的INSERT那样驱动增量视图撤回旧贡献。本项目daily维度不含country,所以该次修改金额和笔数本来不变;若汇总按country则US旧值不会自动迁移到CA。错误变更前应已有可恢复数据,事后“杀掉任务”不是数据还原。
ClickHouse 备份恢复
ClickHouse 备份恢复必须在独立介质保存可恢复副本,并对恢复后的行数、金额、对象依赖和业务水位进行校验。本机相同磁盘目录的ZIP只便于学习命令,不能抵抗磁盘损坏;复制也不能自动替代备份,因为误删可能传播。备份成功与业务恢复成功是两项不同证据。
60-backup.sql备份干净基线events,再RESTORE到events_restored新表,避免非空目标混入历史数据。它仅含指定表,不含daily、latest、物化视图、用户和服务配置;若要恢复整个应用,必须列出这些依赖并验证恢复顺序。增量备份依赖基础备份,删除基础链可能导致无法恢复。
故障排查依次核对磁盘是否被允许、路径权限、空间、归档是否存在、目标是否为空及版本兼容。不要通过allow_non_empty_tables=true绕过校验后直接当作恢复完成,该设置可能引入重复。跨表一致快照、分片恢复、Keeper与对象存储均不在本单节点练习保证范围;本轮没有实际备份、读取归档或恢复服务。
官方依据与范围
中文与英文MergeTree、ReplacingMergeTree对照核对;翻译或当前文档包含的新功能不自动适用于24.8。本课没有运行该版本,只有静态证据。旧文ClickHouse概述保留原URL与正文,旧容量描述不作为本课性能结论。
继续阅读
- 列式模型与SQL
- 引擎、导入与聚合
- 引擎、导入与聚合