influxdb的保留策略不生效解决方法
遇到的一个问题:对influxdb中的库加保留策略后,默认的保留策略对表中数据不生效,无法清理其中超时内容。下面写一下当时的解决办法
(一)shardGroup设置
使用show retention policies查看当前设置的保留策略如下:
可以看到默认的保留策略是rp_default,时间是30d,注意其中的shardGroupDuration是7d。查看其中数据:
目前我的时间是02-08,正常情况下,01-03的数据已经达到了30d的清理条件,应该被删除。
查看influxdb的资料后发现,保留策略对超时的数据清理的单位是shardGroupDuration,也就是每次不是单独的清理一条超时数据,而是清理一个shardGroupDuration分区数据,如果为7d,那么是每次选取7d来清理这7d区间中的超时数据。
之后修改了shardGroupDuration的时间为1d,1-03的数据就被正常清理了。
(二)立即生效问题
还有需要注意的是,设置了保留策略以后,不是当下立即生效。
例子如下:
在库中,设置的默认保留策略是1d。
在此刻3.12的11:42查询到一条数据,time是3.08的12:27。正常来说。这条数据已经超了一天,应该删除。
在11:49再次查询,还没有删除。
仍然没有生效的情况下,查找了一下关于rp不立即生效的原因:有原因说是要等compator组件合并tsm文件的时候删除。关于TSM的讲解可以参考这篇文章:TSM存储引擎解析
但是如果想立即生效,是否会有关于此的配置。找到influx的配置,对其进行查看。
(三)关于rp的conf
[retention]
enabled = true # 是否启用该模块,默认值 : true
check-interval = "30m" # 检查时间间隔,默认值 :"30m"
可以看到,retention policy有一个检查时间间隔,默认值是30m。可以理解为30分钟检查一次rp。如果发生改变,将此保留策略约束的数据进行清理。我们如果缩短检查时间间隔,应该会按照检查的时间生效。