ClickHouse 20.8使用独立<ttl>标签配置system.query_log TTL不生效
问题原因与解决方法
核心原因
- 版本兼容性问题:你使用的ClickHouse 20.8.2.3版本暂不支持system.query_log配置的独立
<ttl>标签,该特性是在21.3及之后的LTS版本才正式纳入的,20.8版本仅支持通过完整<engine>标签定义整段引擎规则时附带TTL配置。 - 配置项缺失问题:即使后续升级到支持独立
<ttl>标签的版本,你给出的第二份配置也缺少必填的<order_by>配置项,拆分配置引擎规则时,<order_by>是必须显式配置的参数,否则表创建会出现异常导致TTL不生效。
可行解决步骤
方案一:升级ClickHouse版本(推荐)
- 将ClickHouse升级到21.3或更高的LTS版本
- 调整config.xml里的query_log配置,补全必填的
<order_by>项,配置示例如下:
<query_log> <database>system</database> <table>query_log</table> <partition_by>toYYYYMM(event_date)</partition_by> <order_by>(event_date, event_time)</order_by> <ttl>event_date + INTERVAL 1 MINUTE DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </query_log>
- 重启ClickHouse服务,执行
DROP TABLE system.query_log删除旧表,再执行SYSTEM FLUSH LOGS触发新表自动重建,执行SHOW CREATE TABLE system.query_log即可验证TTL规则是否已经生效。
方案二:20.8版本下的临时替代方案
如果暂时无法升级版本,只能通过自定义<engine>标签的方式配置TTL,你已经验证过该方式可以正常生效,暂时可以先使用该配置方式,等后续升级版本后再切换为独立<ttl>标签配置。
内容的提问来源于stack exchange,提问作者Ann Z
相关产品推荐
相关产品推荐

