如何降低ClickHouse中asynchronous_metric_log的记录数量?
解决ClickHouse asynchronous_metric_log记录量过大的问题
先明确:和Prometheus写入无关
asynchronous_metric_log是ClickHouse自身的系统表,仅记录CH内部的异步运行指标,和外部Prometheus往CH写数据的操作完全无关,不用往这个方向排查。
先确认配置是否真的生效
你说修改配置无效,先核对以下几点:
- 控制采集频率的核心参数是
asynchronous_metrics_log_interval,默认值60秒(1分钟),单位为秒。要调整的话,需在config.xml或config.d目录下的自定义配置文件中添加/修改:<asynchronous_metrics_log_interval>60</asynchronous_metrics_log_interval> - 注意:修改该参数后必须重启ClickHouse服务才会生效,热加载(比如执行
SYSTEM RELOAD CONFIG)对这类系统表参数不生效。
检查是不是搞混了系统表
别搞错了!system.asynchronous_metric_log默认1分钟采集一次,但system.metric_log是同步指标表,默认1秒采集一次,记录量会大得多。你执行查询时,确认下是不是查错表了?如果是metric_log的话,要调整的是metrics_log_interval参数,而非异步指标的配置。
减少采集的指标数量
如果配置没问题,但记录还是多,可能是开启了太多不必要的异步指标:
- 先执行
SELECT * FROM system.asynchronous_metrics,查看当前采集的所有异步指标,挑出实际需要保留的核心指标。 - 在配置文件中通过
asynchronous_metrics指定仅采集这些指标,比如:
这样每条日志的指标数量减少,既能降低单条日志体积,也能避免无关高频指标带来的额外记录。<asynchronous_metrics> <metric>Query</metric> <metric>MemoryTracking</metric> <!-- 只保留你需要的指标,其余删除 --> </asynchronous_metrics>
加TTL自动清理旧数据
如果以上操作都完成了,还想控制表的大小,可以给表设置TTL,自动删除过期数据:
ALTER TABLE system.asynchronous_metric_log MODIFY TTL event_time + INTERVAL 7 DAY;
比如设置7天有效期,超过时间的数据会自动清理,无需手动操作。
内容的提问来源于stack exchange,提问作者mo mo
相关产品推荐
相关产品推荐

