網站首頁 編程語言 正文
簡介
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維護了
系統表日志處理是日常數據維護的一種,業務數據的清理也可以參考這些方案
原文鏈接:https://juejin.cn/post/7199865975276126266
相關推薦
- 2022-10-12 python繪制發散型柱狀圖+誤差陰影時間序列圖+雙坐標系時間序列圖+繪制金字塔圖_python
- 2023-01-09 GO中優雅編碼與降低圈復雜度詳析_Golang
- 2022-06-22 Python實現npy/mat文件的保存與讀取_python
- 2022-10-28 react如何向數組中追加值_React
- 2023-03-16 python中split()函數的用法詳解_python
- 2022-03-30 Android?Jetpack?Compose無限加載列表_Android
- 2022-06-29 Python自定義模塊的創建與使用_python
- 2022-05-24 Django框架基礎認證模塊auth應用示例_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支