clickhouse的query_log
2023-05-22 15:33 abce 阅读(1452) 评论(0) 编辑 收藏 举报clickhouse的query_log包含了执行过的的查询的信息,比如开始时间、持续时长、错误信息等
开启该功能通过参数log_queries=1进行设置。一般不建议关闭该功能。
'log_queries'是用户级别的配置。打开clickhouse的users.xml文件,在profiles中加入<log_queries>1</log_queries>。高版本中默认就是开启的。
默认设置:
1 2 3 4 | :) select * from system.settings where name = 'log_queries' ; ┌─ name ────────┬─value─┬─changed─┬─description─────────────────────────────────────────┬─ min ──┬─ max ──┬─readonly─┬─type─┬─ default ─┬─alias_for─┐ │ log_queries │ 1 │ 0 │ Log requests and write the log to the system table . │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ 0 │ Bool │ 1 │ │ └─────────────┴───────┴─────────┴─────────────────────────────────────────────────────┴──────┴──────┴──────────┴──────┴─────────┴───────────┘ |
打开clickhouse的users.xml文件,在profiles中加入<log_queries>1</log_queries>
1 2 3 4 5 6 7 | <profiles> <! -- Default settings. --> <log_queries>1</log_queries> < default > <max_memory_usage>10000000000</max_memory_usage> </ default > </profiles> |
在配置文件的query_log标签中配置(参考控制文件config.xml)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <! -- Query log. Used only for queries with setting log_queries = 1. --> <query_log> <! -- What table to insert data. If table is not exist, it will be created. When query log structure is changed after system update , then old table will be renamed and new table will be created automatically. --> < database >system</ database > < table >query_log</ table > <partition_by>toYYYYMM(event_date)</partition_by> <ttl>event_date + INTERVAL 30 DAY DELETE </ttl> <! -- Interval of flushing data. --> <flush_interval_milliseconds>7500</flush_interval_milliseconds> <! -- example of using a different storage policy for a system table --> <! -- storage_policy>local_ssd</storage_policy --> </query_log> |
其中:
·database – 数据库名
·table – 表名
·partition_by — 分区列,如果定义了engine,该参数就不被使用
·engine - 表的引擎,如果定义了partition_by,该参数就不被使用
·flush_interval_milliseconds – 刷新数据到表的时间间隔。要将日志从内存缓冲区强制刷新到表中,可以使用SYSTEM FLUSH LOGS。
·storage_policy – 表的存储策略,是可选参数
日志信息存储在表system.query_log中,包含两种查询:
1.客户端执行的查询
2.由其他查询发起的子查询(分布式查询执行)。对于这些类型的查询,有关父查询的信息显示在initial_*列中
一个查询会产生一条或两条记录,这个取决与状态(查看type列):
1.执行成功的查询,会生成两条记录,type的值分别是QueryStart和QueryFinish
2.查询执行过程中产生了错误,会生成两个事件,type的值分别是QueryStart和ExceptionWhileProcessing
3.在查询执行之前发生了错误,会生成一个事件,type的值是ExceptionBeforeStart
手动配置过期TTL
1 2 3 | ALTER TABLE system.query_log on cluster cluster_name MODIFY TTL event_date + INTERVAL 30 DAY |
配置文件中配置过期TTL
1 2 3 4 5 6 | <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> |
查看对磁盘的使用情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | select partition, database , table , sum ( rows ) as row, formatReadableSize( sum (bytes_on_disk)) as used_disk, formatReadableSize( sum (data_uncompressed_bytes)) as before_compress, formatReadableSize( sum (data_compressed_bytes)) as after_compress, round( sum (data_compressed_bytes) / sum (data_uncompressed_bytes) * 100, 0) compress_rate from system.parts where database = 'system' and table = 'query_log' group by table , database ,partition order by row desc limit 10; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)