ClickHouse 操作:社区调试洞察
本指南是从社区见面会中获得的一系列发现的一部分。有关更多现实世界的解决方案和洞察,您可以 按特定问题浏览。 高运营成本困扰您吗?请查看 成本优化 社区洞察指南。
基本系统表
这些系统表对于生产调试至关重要:
system.errors
显示您 ClickHouse 实例中的所有活动错误。
system.replicas
包含用于监控集群健康的复制延迟和状态信息。
system.replication_queue
提供用于诊断复制问题的详细信息。
system.merges
显示当前的合并操作,并可以识别卡住的进程。
system.parts
对于监控部分计数和识别碎片问题至关重要。
常见生产问题
磁盘空间问题
在复制设置中,磁盘空间耗尽会导致级联问题。当一个节点耗尽空间时,其他节点继续尝试与其同步,从而导致网络流量激增和混淆的症状。一位社区成员花了 4 小时调试,结果只是磁盘空间过低。请查看此 查询 以监控特定集群上的磁盘存储。
AWS 用户应注意,默认的一般用途 EBS 卷有 16TB 的限制。
部件过多错误
小的频繁插入会造成性能问题。社区发现,插入速率超过每秒 10 次通常会触发“部件过多”错误,因为 ClickHouse 无法快速合并部件。
解决方案:
- 使用 30 秒或 200MB 的阈值进行批量数据处理
- 启用 async_insert 进行自动分批
- 使用缓冲表进行服务器端批处理
- 配置 Kafka 以控制批量大小
官方建议:每次插入至少 1,000 行,理想状态下为 10,000 到 100,000。
时间戳无效问题
发送任意时间戳数据的应用程序会造成分区问题。这会导致具有不现实日期(例如 1998 或 2050 年)数据的分区,从而导致意外的存储行为。
ALTER
操作风险
在多 TB 表上进行大规模 ALTER
操作可能会消耗大量资源并可能锁定数据库。一位社区示例涉及在 14TB 数据上将一个整数更改为浮点数,这导致整个数据库被锁定,并需要从备份中重建。
监控高成本变更:
首先在较小的数据集上测试模式更改。
内存和性能
外部聚合
为内存密集型操作启用外部聚合。这虽然较慢,但可以防止由于溢出到磁盘而导致的内存不足崩溃。您可以通过使用 max_bytes_before_external_group_by
来实现,这将帮助防止在大型 GROUP BY
操作中出现内存不足崩溃。您可以在 这里 了解更多关于此设置的信息。
异步插入详细信息
异步插入会自动在服务器端对小插入进行批处理以提高性能。您可以配置是否在返回确认之前等待数据写入磁盘——立即返回速度更快但耐久性较差。现代版本支持去重,以处理批次内的重复数据。
相关文档
分布式表配置
默认情况下,分布式表使用单线程插入。启用 insert_distributed_sync
进行并行处理并立即将数据发送到分片。
使用分布式表时监控临时数据的积累。
性能监控阈值
社区建议的监控阈值:
- 每个分区的部件:最好少于 100
- 延迟插入:应保持在零
- 插入速率:为了最佳性能,限制在每秒约 1 次
相关文档
快速参考
问题 | 检测 | 解决方案 |
---|---|---|
磁盘空间 | 检查 system.parts 总字节 | 监控使用情况,规划扩展 |
部件过多 | 计算每个表的部件 | 批量插入,启用 async_insert |
复制延迟 | 检查 system.replicas 延迟 | 监控网络,重启副本 |
错误数据 | 验证分区日期 | 实施时间戳验证 |
卡住的变更 | 检查 system.mutations 状态 | 先在小数据上测试 |