clickhouse系统表日志清理方式详解

 更新时间:2023年02月15日 09:01:11   作者:爱吃红薯粉  
这篇文章主要为大家介绍了clickhouse系统表日志清理方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

简介

clickhouse会将查询日志,度量日志和堆栈采集日志记录下来,存储到自身数据库的system库中, 分别是query_log,query_thread_log,trace_log,metric_log等5个表,如果长时间不清查,该表数据会一直累积。

清理

清理方式

清理这些日志表有多种方式

第1种是设置表的TTL,clickhouse是支持设置表的TTL,不管是系统表还是业务表。

第2种是使用DDL语句+DML语句删除指定范围内数据

第3种配置文件设置,在config.xml中提供了日志表的配置

字段释义:

  • database – 数据库名
  • table – 日志存放的系统表名
  • partition_by — 系统表分区键,如果定义了 engine 则不能使用
  • engine -系统表 表引擎,如果定义了 partition_by 则不能使用
  • flush_interval_milliseconds – 将数据从内存的缓冲区刷新到表的时间间隔。
  • ttl 保存时间

图中没有ttl的配置,可以自行添加, event_date是表中的时间字段,格式是: 2020-01-01

<!--
            Table TTL specification: https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/mergetree/#mergetree-table-ttl
            Example:
                event_date + INTERVAL 1 WEEK
                event_date + INTERVAL 7 DAY DELETE
                event_date + INTERVAL 2 WEEK TO DISK 'bbb'
-->
        <ttl>event_date + INTERVAL 7 DAY DELETE</ttl>

实际操作

方案选择

第3种改配置文件方案适合在集群搭建的时候,后期再改就需要重启服务,因服务不能随意重启,需要配置维护期间操作,所以不具灵活性,排除掉了。

第1种设置TTL的方案也是可以的,但是现在不合适,因为已经累积了很长时间的数据,数据量比较大,直接设置会消耗比较多的资源

所以会使用第2种+第1种组合方案,先分批删除历史的日志,然后再使用第1种方案设置TTL。这样后期就不需要维护了

删除数据

使用DDL+DML语句删除指定日期内的数据

先用小一点的表操作一下,通常trace_log比较小,query_log表比较大

use system;
#统计一下2020年有多少条数据
select count(*) from trace_log where event_date >= '2020-01-01' and  event_date <= '2020-12-31';
#根据统计,只有几十万或者几百万的话,可以执行删除
alter table trace_log delete where event_date >= '2020-01-01' and  event_date <= '2020-12-31';

clickhouse的delete,update等操作是异步的,当sql语句一提交,就会有反馈,这个时候是将任务提交到排队执行了

如果表非常小,不想选定时间范围。也可以一次性清完

ALTER table `system`.trace_log DELETE where event_date is not null;

查看任务执行情况

队列数据在mutations表中

#统计历史次数
select count(*) from mutations;
#排序,查看最新10条
select database,table,command,create_time,is_done from mutations order by create_time desc limit 10;

表信息显示了命令发现的在system库,表名已经执行命令的时间,判断sql是正在排还是已经执行完成的是is_done字段。1表示执行完成,0表示正在排队

单机操作

clickhouse是支持创建集群库,集群表的,但是system库属于系统自带的,需要查看库和表的创建信息

show create database system;
show create table trace_log;

因为system属于系统自带的库,集群建好时已存在,但是创建该库的sql文件确没有,所以报错。

但是查看clickhouse元数据文件时发现 data/system/trace_log文件在变小,说明本节点删除成功了,如果换个节点执行sql语句又能查出来。

所以需要在每个节点上执行删除数据语句

在元数据存储的目录可以看到有个mutations_xxxx.log的文件,是删除语句的记录日志 data/system/trace_log

元数据的配置

<!-- Path to data directory, with trailing slash. -->
<path>xxxxx/clickhouse/data/</path>

设置TTL

大部分数据删除完成之后,就可以设置TTL了

#系统表
ALTER table `system`.trace_log MODIFY TTL event_date + toIntervalDay(30);
#业条表
ALTER TABLE `test`.app_version MODIFY TTL time_stamp + toIntervalYear(30);

总结

通过删除表数据+设置TTL的方式,后期就可以0维护了

系统表日志处理是日常数据维护的一种,业务数据的清理也可以参考这些方案

以上就是clickhouse系统表日志清理方式详解的详细内容,更多关于clickhouse系统表日志清理的资料请关注脚本之家其它相关文章!

相关文章

  • Sybase 复制与热切换数据

    Sybase 复制与热切换数据

    SYBASE复制服务器(Sybase Replication Server)用来满足日益发展的企业客户/服务器计算机环境的需要。自从复制服务器被广泛应用以来,已成为企业范围内客户/服务器应用模式的基础。
    2009-06-06
  • access mysql mssql 随机 10条数据的sql语句

    access mysql mssql 随机 10条数据的sql语句

    好多情况下,大家需要随机抽取几个数据,当然数据是从数据库来的,所以脚本之家特为大家准备了一些。
    2009-05-05
  • 简单聊一聊SQL注入及防止SQL注入

    简单聊一聊SQL注入及防止SQL注入

    众所周知SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,下面这篇文章主要给大家介绍了关于SQL注入及防止SQL注入的相关资料,需要的朋友可以参考下
    2022-03-03
  • 对分区表进行alter-switch时遇到的错误

    对分区表进行alter-switch时遇到的错误

    将一个表的数据加入分区表中,可以通过如下步骤进行
    2009-07-07
  • 关于SQL注入绕过的一些知识点

    关于SQL注入绕过的一些知识点

    网上关于SQL注入的绕过技巧有很多,最近正好空下来,想着整理下关于SQL注入绕过的一些姿势。欢迎大牛补充,下面这篇文章主要介绍了关于SQL注入绕过的一些知识点,总结的还是相对比较全面的,需要的朋友可以参考下。
    2017-03-03
  • SQL中Having与Where的区别及注意

    SQL中Having与Where的区别及注意

    这篇文章给大家详细的介绍了SQL中Having与Where的区别,以及这两者的注意事项,文中还分享了Having与Where的示例代码,相信对大家的理解和学习很有帮助,感兴趣的朋友们可以参考借鉴,有需要的朋友们可以一起学习学习。
    2016-11-11
  • 交互分布式系统下如何生成唯一序列

    交互分布式系统下如何生成唯一序列

    在分布式系统中,由于涉及到多个不同业务module的交互,以及高并发的场景。我们需要系统能够生成一个跨业务module的全网唯一序列号,来保证我们业务操作的独立性和唯一性
    2022-01-01
  • RBAC简介_动力节点Java学院整理

    RBAC简介_动力节点Java学院整理

    这篇文章主要介绍了RBAC简介,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • SQL关系模型的知识梳理总结

    SQL关系模型的知识梳理总结

    这篇文章主要为大家介绍了SQL关系模型,文中对SQL关系模型的知识作了详细的梳理总结,有需要的朋友可以借鉴参考下希望能够有所帮助
    2021-10-10
  • Navicat打开表的速度慢的问题解决

    Navicat打开表的速度慢的问题解决

    最近使用Navicat打开表或者设计表都很慢,需要等十几秒才能打开,一开始我以为是我电脑老了,没想到新电脑打开也很慢,所以本就给大家分享一下Navicat打开表的速度慢的问题解决方法,需要的朋友可以参考下
    2023-12-12

最新评论