现象:
日志保留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’;
注意:
- TTL 策略默认不会对存量数据生效