clickhouse ttl不生效

现象:

日志保留31天, 但是发现1年前的数据还有。

表结构:

bash 复制代码
CREATE TABLE
   ads_xxxx_metrics_1m_local (
    `static_time` String COMMENT '统计时间',
     ......
  ) ENGINE = ReplacingMergeTree (process_time)
PARTITION BY
  toYYYYMMDD (toDate (static_time))
ORDER BY
  (
    static_time,
     xxx
    real_time_type
  ) TTL parseDateTimeBestEffort (static_time) + toIntervalDay (31) 

定位:

是因为删除数据速度 赶不上插入数据速度,造成历史数据无法被清理。

优化:

TTL 删除数据按照 分区时间删除。

bash 复制代码
  `TTL parseDateTimeBestEffort (static_time) + toIntervalDay (31)  这个改成  toDate (static_time) + toIntervalDay (31)`   

加速删除数据的速度。

历史使用通过删除分区的方式删除。

bash 复制代码
  select
* 
from
  system.parts
where
table = 'xxxxx'; 

通过 partition 字段查找 需要删除的分区。

alter table table_namexxxx DROP PARTITION '20231125';

注意:

bash 复制代码
为什么optimize后数据TTL仍未生效?
常见原因及解决方案如下。

常见原因1:数据的TTL淘汰是在主键合并阶段执行的,如果data part迟迟没有进行主键合并,那过期的数据就无法淘汰。

解决方案:

您可以通过手动optimize final或者optimize 指定分区的方式触发合并任务。

您可以在建表时设置merge_with_ttl_timeout、ttl_only_drop_parts等参数,提高含有过期数据data parts的合并频率。

常见原因2:表的TTL经过修改或者添加,存量的data part里缺少TTL信息或者不正确,这样也可能导致过期数据淘汰不掉。

解决方案:

您可以通过alter table materialize ttl命令重新生成TTL信息。

您可以通过optimize 分区更新TTL信息。
相关推荐
l1t2 天前
DeepSeek总结的clickhouse的二进制文件自解压机制
clickhouse
l1t3 天前
DeepSeek总结的pg_clickhouse 与 chdb 更新:编码、嵌套与类型
数据库·clickhouse·postgresql
拔剑纵狂歌6 天前
ClickHouse system.query_log 字段详解与排障实践
后端·clickhouse·1024程序员节
SelectDB技术团队6 天前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
SelectDB技术团队6 天前
ClickHouse 存日志的能力边界:并发、检索与 trace 回放的实测对照
数据结构·数据库·clickhouse·日志分析·apache doris·日志存储
SelectDB技术团队6 天前
Agent Trace 数据底座建设:宽表建模、全文检索与成本聚合的配置与验证步骤
大数据·python·clickhouse·elk·elasticsearch·全文检索·复杂查询
此时不提桶,更待何时7 天前
05-03-B-ClickHouse与OLAP面试与生产事故实战
clickhouse·面试·nosql
SelectDB技术团队7 天前
ELK 太占磁盘、ES 总报写入拒绝:从归因到可执行的优化清单
大数据·clickhouse·elk·elasticsearch·全文检索·复杂查询·实时更新
frjc8 天前
数据库选型:如何从众多数据库中选出最理想的那一个
redis·mysql·clickhouse·elasticsearch
dkgee15 天前
记录一次Clickhouse持续占用CPU超过100%问题分析
clickhouse·hermes