一、背景

ClickHouse中的query_log、query_thread_log、trace_log等日志表,在开启之后,如果一段时间没有清理,这些日志表会占用大量的存储空间,query_log是最常用的查询日志,它记录了ClickHouse服务中所有已经执行的查询记录,下图为query_log表中的部分内容。ClickHouse默认不清理日志,这里需要自己配置。

二、解决方案

查了些资料发现,大家基本都是通过设置相应日志表的TTL来清理,如

ALTER TABLE system.query_log on cluster cluster_name MODIFY TTL event_date + INTERVAL 15 DAY

保存一个月的数据

    ALTER TABLE query_log MODIFY TTL event_date + toIntervalMonth(1);
     
    ALTER TABLE query_thread_log MODIFY TTL event_date + toIntervalMonth(1);

保存15天的数据

    ALTER TABLE query_log MODIFY TTL event_date + toIntervalDay(15);
     
    ALTER TABLE query_thread_log MODIFY TTL event_date + toIntervalDay(15);

这样处理虽然也可以,但是不太安全也不太方便

官方资料建议:直接在配置文件中设置

query_log 配置参数

使用下列参数进行日志配置(配置文件位置 /etc/clickhouse-server/config.xml)

  •     database – 数据库名
  •     table – 日志存放的系统表名
  •     partition_by — 系统表分区键,如果定义了 engine 则不能使用
  •     engine -系统表 表引擎,如果定义了 partition_by 则不能使用
  •     flush_interval_milliseconds – 将数据从内存的缓冲区刷新到表的时间间隔。
<query_log>
    <database>system</database>
    <table>query_log</table>
    <engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>


 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐