ClickHouse有很多系统表(见参考文档1),如query_log、query_thread_log、trace_log等。默认情况下,ClickHouse永远不会清理日志,因此这些表可能占用大量磁盘空间。我们可以使用如下的SQL查看:
1 2 3 4 5 6 7 |
SELECT sum(rows) AS `总行数`, formatReadableSize(sum(data_uncompressed_bytes)) AS `原始大小`, formatReadableSize(sum(data_compressed_bytes)) AS `压缩大小`, round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS `压缩率`, `table` AS `表名` FROM system.parts where database = 'system' group by `table` order by sum(data_compressed_bytes) desc; |
官网推荐的方法是在配置文件中配置对应的TTL,文档为:https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings#max-table-size-to-drop
这里面有个模糊的问题在于,看默认的配置文件时,我们会发现query_log、trace_log、query_thread_log、query_views_log、part_log看上去是有event_date字段的,而metric_log、asynchronous_metric_log、session_log看上去没有event_date字段。不过,通过SHOW CREATE TABLE我们也可以确定metric_log、asynchronous_metric_log、session_log实际都是分区和有event_date字段的。
这些系统表都是分区的,分区信息可以在system.parts里查询到:
1 |
SELECT * FROM system.parts where database = 'system' and `table`= 'query_log' |
进行查看,默认情况下按月存储:
因此,为了保证删除的效率,我们可以直接删除分区,如:
1 |
salter table system.query_log drop partition '202112'; |
当分区太大时删除会报错,如:
按提示2选1操作即可。唯一需要注意的是如果生成文件的话只能用一次就会自动删掉,因此还是改配置文件好:
参考文档:
1、https://clickhouse.com/docs/zh/operations/system-tables/#system-tables-introduction
转载时请保留出处,违法转载追究到底:进城务工人员小梅 » Clickhouse清理大日志表