clickhouse系統(tǒng)表日志清理方式詳解
簡介
clickhouse會將查詢?nèi)罩?,度量日志和堆棧采集日志記錄下來,存儲到自身?shù)據(jù)庫的system庫中, 分別是query_log,query_thread_log,trace_log,metric_log等5個表,如果長時間不清查,該表數(shù)據(jù)會一直累積。
清理
清理方式
清理這些日志表有多種方式
第1種是設(shè)置表的TTL,clickhouse是支持設(shè)置表的TTL,不管是系統(tǒng)表還是業(yè)務(wù)表。
第2種是使用DDL語句+DML語句刪除指定范圍內(nèi)數(shù)據(jù)
第3種配置文件設(shè)置,在config.xml中提供了日志表的配置

字段釋義:
- database – 數(shù)據(jù)庫名
- table – 日志存放的系統(tǒng)表名
- partition_by — 系統(tǒng)表分區(qū)鍵,如果定義了 engine 則不能使用
- engine -系統(tǒng)表 表引擎,如果定義了 partition_by 則不能使用
- flush_interval_milliseconds – 將數(shù)據(jù)從內(nèi)存的緩沖區(qū)刷新到表的時間間隔。
- 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種改配置文件方案適合在集群搭建的時候,后期再改就需要重啟服務(wù),因服務(wù)不能隨意重啟,需要配置維護(hù)期間操作,所以不具靈活性,排除掉了。
第1種設(shè)置TTL的方案也是可以的,但是現(xiàn)在不合適,因為已經(jīng)累積了很長時間的數(shù)據(jù),數(shù)據(jù)量比較大,直接設(shè)置會消耗比較多的資源
所以會使用第2種+第1種組合方案,先分批刪除歷史的日志,然后再使用第1種方案設(shè)置TTL。這樣后期就不需要維護(hù)了
刪除數(shù)據(jù)
使用DDL+DML語句刪除指定日期內(nèi)的數(shù)據(jù)
先用小一點(diǎn)的表操作一下,通常trace_log比較小,query_log表比較大
use system; #統(tǒng)計一下2020年有多少條數(shù)據(jù) select count(*) from trace_log where event_date >= '2020-01-01' and event_date <= '2020-12-31'; #根據(jù)統(tǒng)計,只有幾十萬或者幾百萬的話,可以執(zhí)行刪除 alter table trace_log delete where event_date >= '2020-01-01' and event_date <= '2020-12-31';
clickhouse的delete,update等操作是異步的,當(dāng)sql語句一提交,就會有反饋,這個時候是將任務(wù)提交到排隊執(zhí)行了
如果表非常小,不想選定時間范圍。也可以一次性清完
ALTER table `system`.trace_log DELETE where event_date is not null;
查看任務(wù)執(zhí)行情況
隊列數(shù)據(jù)在mutations表中
#統(tǒng)計歷史次數(shù) select count(*) from mutations; #排序,查看最新10條 select database,table,command,create_time,is_done from mutations order by create_time desc limit 10;

表信息顯示了命令發(fā)現(xiàn)的在system庫,表名已經(jīng)執(zhí)行命令的時間,判斷sql是正在排還是已經(jīng)執(zhí)行完成的是is_done字段。1表示執(zhí)行完成,0表示正在排隊
單機(jī)操作
clickhouse是支持創(chuàng)建集群庫,集群表的,但是system庫屬于系統(tǒng)自帶的,需要查看庫和表的創(chuàng)建信息
show create database system; show create table trace_log;
因為system屬于系統(tǒng)自帶的庫,集群建好時已存在,但是創(chuàng)建該庫的sql文件確沒有,所以報錯。
但是查看clickhouse元數(shù)據(jù)文件時發(fā)現(xiàn) data/system/trace_log文件在變小,說明本節(jié)點(diǎn)刪除成功了,如果換個節(jié)點(diǎn)執(zhí)行sql語句又能查出來。
所以需要在每個節(jié)點(diǎn)上執(zhí)行刪除數(shù)據(jù)語句
在元數(shù)據(jù)存儲的目錄可以看到有個mutations_xxxx.log的文件,是刪除語句的記錄日志 data/system/trace_log
元數(shù)據(jù)的配置
<!-- Path to data directory, with trailing slash. --> <path>xxxxx/clickhouse/data/</path>
設(shè)置TTL
大部分?jǐn)?shù)據(jù)刪除完成之后,就可以設(shè)置TTL了
#系統(tǒng)表 ALTER table `system`.trace_log MODIFY TTL event_date + toIntervalDay(30); #業(yè)條表 ALTER TABLE `test`.app_version MODIFY TTL time_stamp + toIntervalYear(30);
總結(jié)
通過刪除表數(shù)據(jù)+設(shè)置TTL的方式,后期就可以0維護(hù)了
系統(tǒng)表日志處理是日常數(shù)據(jù)維護(hù)的一種,業(yè)務(wù)數(shù)據(jù)的清理也可以參考這些方案
以上就是clickhouse系統(tǒng)表日志清理方式詳解的詳細(xì)內(nèi)容,更多關(guān)于clickhouse系統(tǒng)表日志清理的資料請關(guān)注腳本之家其它相關(guān)文章!
- ClickHouse數(shù)據(jù)庫的監(jiān)控與運(yùn)維:監(jiān)控指標(biāo)、監(jiān)控工具、運(yùn)維策略、故障處理
- clickhouse遠(yuǎn)程連接以及用戶名密碼設(shè)置方式
- 在docker中搭建部署clickhouse過程
- clickhouse數(shù)據(jù)庫刪除數(shù)據(jù)的五種方式
- clickhouse中Nullable與非空字段的建表與類型互轉(zhuǎn)方式
- clickhouse復(fù)雜時間格式的轉(zhuǎn)換方式
- 關(guān)于clickhouse幾種create table的情況
- clickhouse分布式表的操作示例詳解
- 數(shù)據(jù)分析數(shù)據(jù)庫ClickHouse在大數(shù)據(jù)領(lǐng)域應(yīng)用實踐
- 以示例講解Clickhouse Docker集群部署以及配置
- ClickHouse在高并發(fā)寫入場景下的性能優(yōu)化實踐(CPU利用率飆升)
相關(guān)文章
Win2003系統(tǒng)安裝SQL Server2000后1433端口未開放的解釋
這篇文章主要介紹了Win2003系統(tǒng)安裝SQL Server2000后1433端口未開放的解釋2007-02-02
在SQL Server和Oracle中創(chuàng)建job
有的時候,我們可能需要在數(shù)據(jù)庫中設(shè)定一些自動執(zhí)行的任務(wù)(job),以此來自動完成一些包括統(tǒng)計、備份方面的需求,下面就簡單說明一下有關(guān)ms server和oracle兩種數(shù)據(jù)庫中如何新建自動任務(wù)。2009-06-06
DBeaver連接GBase數(shù)據(jù)庫的簡單步驟記錄
DBeaver數(shù)據(jù)庫連接工具,是我用了這么久最好用的一個數(shù)據(jù)庫連接工具,擁有的優(yōu)點(diǎn),支持的數(shù)據(jù)庫多、快捷鍵很贊、導(dǎo)入導(dǎo)出數(shù)據(jù)非常方便,下面這篇文章主要給大家介紹了關(guān)于DBeaver連接GBase數(shù)據(jù)庫的簡單步驟,需要的朋友可以參考下2024-03-03
對分區(qū)表進(jìn)行alter-switch時遇到的錯誤
將一個表的數(shù)據(jù)加入分區(qū)表中,可以通過如下步驟進(jìn)行2009-07-07
使用Bucardo5實現(xiàn)PostgreSQL的主數(shù)據(jù)庫復(fù)制
這篇文章主要介紹了使用Bucardo5實現(xiàn)PostgreSQL的主數(shù)據(jù)庫復(fù)制,作者基于AWS給出演示,需要的朋友可以參考下2015-04-04
面向云服務(wù)的GaussDB全密態(tài)數(shù)據(jù)庫現(xiàn)狀及問題小結(jié)
全密態(tài)數(shù)據(jù)庫,顧名思義與大家所理解的流數(shù)據(jù)庫、圖數(shù)據(jù)庫一樣,就是專門處理密文數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng),這篇文章主要介紹了面向云服務(wù)的GaussDB全密態(tài)數(shù)據(jù)庫,未來GaussDB會將該能力逐步開源到openGauss,與社區(qū)共同推進(jìn)和完善全密態(tài)數(shù)據(jù)庫解決方案,一起打造數(shù)據(jù)庫安全生態(tài)2024-02-02
一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實戰(zhàn)記錄
這篇文章主要給大家介紹了一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實戰(zhàn)記錄,本文通過圖文以及示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者了解sql具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-11-11

