clickhouse ttl不生效

时间:2024-04-19 12:23:08

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

表结构:

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 删除数据按照 分区时间删除。

  `TTL parseDateTimeBestEffort (static_time) + toIntervalDay (31)  这个改成  toDate (static_time) + toIntervalDay (31)`   

加速删除数据的速度。

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

  select
* 
from
  system.parts
where
table = 'xxxxx'; 

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

alter table table_namexxxx DROP PARTITION ‘20231125’;

注意:

  1. TTL 策略默认不会对存量数据生效