如何禁用ClickHouse系统数据库日志?已尝试多种方法无效
ClickHouse系统数据库日志(trace_log/part_log)空间占用解决方法
你之前的操作都是针对**查询日志(query_log)**的配置,而问题核心是trace_log和part_log这两张系统日志表,需要单独配置禁用或调整保留策略:
一、直接禁用指定系统日志表
修改ClickHouse主配置文件/etc/clickhouse-server/config.xml,添加以下配置:
- 禁用trace_log
<trace_log> <enabled>false</enabled> </trace_log>
- 禁用part_log
<part_log> <enabled>false</enabled> </part_log>
修改完成后重启ClickHouse服务:
sudo systemctl restart clickhouse-server
二、调整日志保留策略(不完全禁用)
如果需要保留部分日志用于排查问题,可设置自动清理过期数据:
- 配置trace_log的自动清理(保留7天数据,可自行调整天数)
<trace_log> <database>system</database> <table>trace_log</table> <retention_days>7</retention_days> </trace_log>
- 配置part_log的自动清理
<part_log> <database>system</database> <table>part_log</table> <retention_days>7</retention_days> </part_log>
重启服务后,ClickHouse会自动清理超过保留天数的日志。
三、补充说明
log_queries配置仅控制query_log生成,与trace_log/part_log无关,因此之前的设置无效;<logger>节点是控制服务端文件日志(如/var/log/clickhouse-server/下的日志),不影响system库内的日志表。- 若配置修改后未生效,可先验证配置文件语法:
clickhouse-server --config-file /etc/clickhouse-server/config.xml --validate-config
- 已占用的磁盘空间需手动清理,执行以下SQL(低峰期操作):
-- 删除trace_log中30天前的数据 ALTER TABLE system.trace_log DELETE WHERE event_time < now() - INTERVAL 30 DAY; -- 删除part_log中30天前的数据 ALTER TABLE system.part_log DELETE WHERE event_time < now() - INTERVAL 30 DAY;
清理后可执行OPTIMIZE TABLE system.trace_log FINAL;和OPTIMIZE TABLE system.part_log FINAL;强制释放空间(此操作会占用系统资源)。
内容的提问来源于stack exchange,提问作者Sardar
相关产品推荐
相关产品推荐

