关键系统表
system.errors
system.replicas
system.replication_queue
system.merges
system.parts
常见的生产环境问题
磁盘空间问题
“parts 过多”错误
- 按 30 秒或 200MB 的阈值对数据进行批量处理
- 启用 async_insert 以自动批量处理
- 使用 Buffer 表进行服务端批量处理
- 配置 Kafka 以控制批次大小
无效时间戳问题
ALTER 操作风险
ALTER 操作可能会消耗大量资源,甚至可能锁定数据库。社区中有一个案例:对 14TB 数据执行从 Integer 到 Float 的类型更改,结果锁定了整个数据库,并且需要通过备份重新构建。
监控高开销的变更:
内存与性能
外部聚合
max_bytes_before_external_group_by 来实现,这有助于防止大型 GROUP BY 操作因内存不足而崩溃。你可以在这里了解有关此设置的更多信息。
异步插入详情
分布式表配置
insert_distributed_sync 可实现并行处理,并立即将数据发送到各个分片。
使用分布式表时,请留意临时数据的积压情况。
性能监控阈值
- 每个分区的 parts 数量:最好少于 100
- 延迟插入:应保持为 0
- 插入速率:为获得最佳性能,应限制在大约每秒 1 次
快速参考
| 问题 | 检测 | 解决方案 |
|---|---|---|
| 磁盘空间 | 检查 system.parts 的总字节数 | 监控使用情况,规划扩缩容 |
| parts 过多 | 统计每个表的 parts 数量 | 批量插入,启用 async_insert |
| 复制延迟 | 检查 system.replicas 的延迟 | 监控网络,重启副本 |
| 异常数据 | 验证分区日期 | 实施时间戳校验 |
| 变更停滞 | 检查 system.mutations 状态 | 先在小规模数据上测试 |