1.设置策略
InfluxDB 设置数据保留策略,验证保留的数据存储大小
基本概念说明
1.1 InfluxDB 数据保留策略说明
InfluxDB的数据保留策略(RP)用来定义数据在InfluxDB中存放的时间,或者定义保存某个期间的数据。 一个数据库可以有多个保留策略, 但每个策略必须是独一无二的。
数据保留策略提供了一个简单高效的方法用来清除InfluxDB数据库中的过期数据,一旦数据超过过期时间,数据会自动从InfluxDB中清除,而过期数据清除的时间单位以shard group的duration为单位
1.2 InfluxDB数据保留策略目的
InfluxDB本身不提供数据的删除操作, 因此用来控制数据量的方式就是定义数据保留策略。 因此定义数据保留策略的目的是让InfluxDB能够知道可以丢弃哪些数据, 节省数据存储空间,避免数据冗余的情况
2.操作示例
2.1查看数据保留策略
- 语法:
show retention policies on <database name>
show retention policies on <database name>
比如:
# 选择使用telegraf数据库
> use telegraf;
Using database telegraf
>
>
# 查询数据保留策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
# 选择使用telegraf数据库
> use telegraf;
Using database telegraf
>
>
# 查询数据保留策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
2.2 新建数据保留策略
- 语法:
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
参数说明:
参数名字 | 说明 |
---|---|
name | 策略名称,默认autogen |
duration | 持续时间, 0s 代表无限制,单位(s,h,d,w,m) |
shardGroupDuration shardGroup | 数据存储时间,shardGroup是InfluxDB的一个基本存储结构, 应该大于这个时间的数据在查询效率上应该有所降低 |
replicaN | 副本个数,1 代表只有一个副本 |
default | 是否默认策略:true 代表设置为该数据库的默认策略 |
# 新建一个策略
CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数;
# 新建一个策略并且直接设置为默认策略
CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数 DEFAULT;
# 新建一个策略
CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数;
# 新建一个策略并且直接设置为默认策略
CREATE RETENTION POLICY "策略名称" ON 数据库名 DURATION 时长 REPLICATION 副本个数 DEFAULT;
- 新增一个新的默认策略
要注意的是,一个数据库的保留策略可以有多个,但是只能有一个是默认的
# 创建新的默认策略之前的策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
>
# 创建新的默认策略role_01保留数据时长1小时
> CREATE RETENTION POLICY "role_01" ON telegraf DURATION 1h REPLICATION 1 DEFAULT;
>
# 查看策略的变化
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 1h0m0s 1h0m0s 1 true
>
# 创建新的默认策略之前的策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
>
# 创建新的默认策略role_01保留数据时长1小时
> CREATE RETENTION POLICY "role_01" ON telegraf DURATION 1h REPLICATION 1 DEFAULT;
>
# 查看策略的变化
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 1h0m0s 1h0m0s 1 true
>
因为默认策略已经修改为role_01
,那么如果还想用之前的autogen
策略来查询数据,则需要在查询表之前加上策略的名称:"策略名".表名
,如下:
> select * from "autogen".cpu limit 2;
name: cpu
time cpu host usage_guest usage_guest_nice usage_idle usage_iowait usage_irq usage_nice usage_softirq usage_steal usage_system usage_user
---- --- ---- ----------- ---------------- ---------- ------------ --------- ---------- ------------- ----------- ------------ ----------
1574663960000000000 cpu-total locust03 0 0 99.44972486076016 0.05002501250678571 0 0 0 0 0.2501250625248291 0.2501250625430281
1574663960000000000 cpu0 locust03 0 0 99.59959959921699 0.10010010010243535 0 0 0 0 0.20020020020031867 0.10010010005008706
>
> select * from "autogen".cpu limit 2;
name: cpu
time cpu host usage_guest usage_guest_nice usage_idle usage_iowait usage_irq usage_nice usage_softirq usage_steal usage_system usage_user
---- --- ---- ----------- ---------------- ---------- ------------ --------- ---------- ------------- ----------- ------------ ----------
1574663960000000000 cpu-total locust03 0 0 99.44972486076016 0.05002501250678571 0 0 0 0 0.2501250625248291 0.2501250625430281
1574663960000000000 cpu0 locust03 0 0 99.59959959921699 0.10010010010243535 0 0 0 0 0.20020020020031867 0.10010010005008706
>
2.3 修改数据保留策略
- 语法
ALTER RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> SHARD DURATION <duration> DEFAULT
ALTER RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> SHARD DURATION <duration> DEFAULT
ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长
ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长 DEFAULT
ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长
ALTER RETENTION POLICY "策略名称" ON "数据库名" DURATION 时长 DEFAULT
在这里示例修改role_01
策略的时长为2h
,如下:
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 1h0m0s 1h0m0s 1 true
>
>
# 执行修改时长为2小时
> ALTER RETENTION POLICY "role_01" ON "telegraf" DURATION 2h
>
# 可以看到role_01的duration为2h
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 2h0m0s 1h0m0s 1 true
>
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 1h0m0s 1h0m0s 1 true
>
>
# 执行修改时长为2小时
> ALTER RETENTION POLICY "role_01" ON "telegraf" DURATION 2h
>
# 可以看到role_01的duration为2h
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 2h0m0s 1h0m0s 1 true
>
2.4 删除数据保留策略
- 语法
DROP RETENTION POLICY <retention_policy_name> ON <database_name>
DROP RETENTION POLICY <retention_policy_name> ON <database_name>
drop retention POLICY "策略名" ON "数据库名"
drop retention POLICY "策略名" ON "数据库名"
- 删除
role_01
策略,如下:
# 查看当前的数据保留策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 2h0m0s 1h0m0s 1 true
>
# 删除role_01的策略
> drop retention POLICY "role_01" ON "telegraf"
>
# 查看删除后的策略,可以看到剩余的策略autogen并不会自动设置为默认default策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
>
# 修改autogen策略为default策略
> ALTER RETENTION POLICY "autogen" ON "telegraf" DEFAULT
>
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
# 查看当前的数据保留策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
role_01 2h0m0s 1h0m0s 1 true
>
# 删除role_01的策略
> drop retention POLICY "role_01" ON "telegraf"
>
# 查看删除后的策略,可以看到剩余的策略autogen并不会自动设置为默认default策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
>
# 修改autogen策略为default策略
> ALTER RETENTION POLICY "autogen" ON "telegraf" DEFAULT
>
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
>
3. 验证变更策略之后,存储数据是否会变少
默认的telegraf数据库的存储策略是一直保存数据,并无限制。那么为了节省数据存储,我下面创建一个保留1小时的策略,然后删除默认的策略,观察存储数据是否变少
3.1 变更策略之前的数据存储大小
在变更策略之前,我特意运行了采集数据服务几天,查看目前的存储数据大小如下:
[root@server influxdb]# du -h --max-depth=1 .
69M ./data
69M .
[root@server influxdb]#
[root@server influxdb]# du -h --max-depth=1 .
69M ./data
69M .
[root@server influxdb]#
3.2 创建新策略,删除旧策略
# 创建新策略
> CREATE RETENTION POLICY "rule_telegraf" ON telegraf DURATION 1h REPLICATION 1 DEFAULT;
>
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
rule_telegraf 1h0m0s 1h0m0s 1 true
>
# 删除历史策略
> drop retention POLICY "autogen" ON "telegraf";
>
# 查看当前的数据策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
rule_telegraf 1h0m0s 1h0m0s 1 true
>
# 创建新策略
> CREATE RETENTION POLICY "rule_telegraf" ON telegraf DURATION 1h REPLICATION 1 DEFAULT;
>
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
rule_telegraf 1h0m0s 1h0m0s 1 true
>
# 删除历史策略
> drop retention POLICY "autogen" ON "telegraf";
>
# 查看当前的数据策略
> show retention policies on telegraf
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
rule_telegraf 1h0m0s 1h0m0s 1 true
>
3.3 删除旧策略之后,确认数据存储大小
# 删除旧策略之前,数据有69M
[root@server influxdb]# du -h --max-depth=1 .
69M ./data
69M .
[root@server influxdb]#
# 删除旧策略之后,数据只保留15M
[root@server influxdb]# du -h --max-depth=1 .
15M ./data
15M .
[root@server influxdb]#
# 删除旧策略之前,数据有69M
[root@server influxdb]# du -h --max-depth=1 .
69M ./data
69M .
[root@server influxdb]#
# 删除旧策略之后,数据只保留15M
[root@server influxdb]# du -h --max-depth=1 .
15M ./data
15M .
[root@server influxdb]#
注意,这个会把所有的删除
4.三者关系
4.1 retention policy(RP)
数据保留策略提供了一个简单高效的方法用来清除InfluxDB数据库中的过期数据,一旦数据超过过期时间,数据会自动从InfluxDB中清除,而过期数据清除的时间单位以shard group的duration为单位
4.2shard
shard是InfluxDB存储引擎的实现,负责数据的编码存储、读写服务等。将InfluxDB中时间序列化的数据按照时间的先后顺序存入到shard中,每个shard中都负责InfluxDB中一部分的数据存储工作,并以tsm文件的表现形式存储在物理磁盘上,每个存放了数据的shard都属于一个shard group
4.3shard group
shard group可以理解为存放shard的容器,所有的shard在逻辑上都属于这个shard group,每个shard group中的shard都有一个对应的时间跨度和过期时间,每一个shard group都有一个默认的时间跨度,叫做shard group duration
Retention Policy’s DURATION | Shard Group Duration |
---|---|
< 2 days | 1 hour |
>= 2 days and <= 6 months | 1 day |
> 6 months | 7 days |
- 官方推荐
InfluxDB默认设置的shard duration在大多数场景都工作的很好,但对于高吞吐量、长时间运行的InfluxDB实例来说,较长的shard group duration更加适合。所以对于需要较长的shard group duration的场景,官方推荐如下
Retention Policy’s DURATION | Shard Group Duration |
---|---|
< = 1 天 | 6小时 |
> 1 天 and <= 7天 | 1 day |
> 7天 and <= 3个月 | 7 days |
> 3个月 | 30 days |
= 永久 | 52 w或更长 |
4.4三者之间的关系
在一个RP中,如果指定的保留时间为24小时,那么每个shard的duration为1小时,即每个shard的时间跨度为1小时,那么总共会有24个跨度为1小时的shard,在触发数据的RP后,删除最早时间跨度的shard。
例如,我们在mydb数据库中指定保留策略为24小时
> CREATE RETENTION POLICY "role_01" ON ProxyMarketOffer DURATION 180d REPLICATION 1 DEFAULT;
> show retention policies on ProxyMarketOffer
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
keep_24_hours 24h0m0s 1h0m0s 1 true
> CREATE RETENTION POLICY "role_01" ON ProxyMarketOffer DURATION 180d REPLICATION 1 DEFAULT;
> show retention policies on ProxyMarketOffer
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
keep_24_hours 24h0m0s 1h0m0s 1 true
那么此时shard group中对应就会存在24个shard,每次到达过期时间时,删除最早的shard,并生成一个新的shard
> show shard groups
name: shard groups
id database retention_policy start_time end_time expiry_time
-- -------- ---------------- -----> show shard groups
name: shard groups
id database retention_policy start_time end_time expiry_time
-- -------- ---------------- ---------- -------- -----------
1 mydb keep_24_hours 2020-04-24T19:00:00Z 2020-04-24T20:00:00Z 2020-04-25T20:00:00Z
2 mydb keep_24_hours 2020-04-24T20:00:00Z 2020-04-24T21:00:00Z 2020-04-25T21:00:00Z
3 mydb keep_24_hours 2020-04-24T21:00:00Z 2020-04-24T22:00:00Z 2020-04-25T22:00:00Z
4 mydb keep_24_hours 2020-04-24T22:00:00Z 2020-04-24T23:00:00Z 2020-04-25T23:00:00Z
5 mydb keep_24_hours 2020-04-24T23:00:00Z 2020-04-25T00:00:00Z 2020-04-26T00:00:00Z
6 mydb keep_24_hours 2020-04-25T00:00:00Z 2020-04-25T01:00:00Z 2020-04-26T01:00:00Z
7 mydb keep_24_hours 2020-04-25T01:00:00Z 2020-04-25T02:00:00Z 2020-04-26T02:00:00Z
8 mydb keep_24_hours 2020-04-25T02:00:00Z 2020-04-25T03:00:00Z 2020-04-26T03:00:00Z
9 mydb keep_24_hours 2020-04-25T03:00:00Z 2020-04-25T04:00:00Z 2020-04-26T04:00:00Z
10 mydb keep_24_hours 2020-04-25T04:00:00Z 2020-04-25T05:00:00Z 2020-04-26T05:00:00Z
11 mydb keep_24_hours 2020-04-25T05:00:00Z 2020-04-25T06:00:00Z 2020-04-26T06:00:00Z
12 mydb keep_24_hours 2020-04-25T06:00:00Z 2020-04-25T07:00:00Z 2020-04-26T07:00:00Z
13 mydb keep_24_hours 2020-04-25T07:00:00Z 2020-04-25T08:00:00Z 2020-04-26T08:00:00Z
14 mydb keep_24_hours 2020-04-25T08:00:00Z 2020-04-25T09:00:00Z 2020-04-26T09:00:00Z
15 mydb keep_24_hours 2020-04-25T09:00:00Z 2020-04-25T10:00:00Z 2020-04-26T10:00:00Z
16 mydb keep_24_hours 2020-04-25T10:00:00Z 2020-04-25T11:00:00Z 2020-04-26T11:00:00Z
17 mydb keep_24_hours 2020-04-25T11:00:00Z 2020-04-25T12:00:00Z 2020-04-26T12:00:00Z
18 mydb keep_24_hours 2020-04-25T12:00:00Z 2020-04-25T13:00:00Z 2020-04-26T13:00:00Z
29 mydb keep_24_hours 2020-04-25T13:00:00Z 2020-04-25T14:00:00Z 2020-04-26T14:00:00Z
20 mydb keep_24_hours 2020-04-25T14:00:00Z 2020-04-25T15:00:00Z 2020-04-26T15:00:00Z
21 mydb keep_24_hours 2020-04-25T15:00:00Z 2020-04-25T16:00:00Z 2020-04-26T16:00:00Z
22 mydb keep_24_hours 2020-04-25T16:00:00Z 2020-04-25T17:00:00Z 2020-04-26T17:00:00Z
23 mydb keep_24_hours 2020-04-25T17:00:00Z 2020-04-25T18:00:00Z 2020-04-26T17:00:00Z
24 mydb keep_24_hours 2020-04-25T18:00:00Z 2020-04-25T19:00:00Z 2020-04-26T17:00:00Z
> show shard groups
name: shard groups
id database retention_policy start_time end_time expiry_time
-- -------- ---------------- -----> show shard groups
name: shard groups
id database retention_policy start_time end_time expiry_time
-- -------- ---------------- ---------- -------- -----------
1 mydb keep_24_hours 2020-04-24T19:00:00Z 2020-04-24T20:00:00Z 2020-04-25T20:00:00Z
2 mydb keep_24_hours 2020-04-24T20:00:00Z 2020-04-24T21:00:00Z 2020-04-25T21:00:00Z
3 mydb keep_24_hours 2020-04-24T21:00:00Z 2020-04-24T22:00:00Z 2020-04-25T22:00:00Z
4 mydb keep_24_hours 2020-04-24T22:00:00Z 2020-04-24T23:00:00Z 2020-04-25T23:00:00Z
5 mydb keep_24_hours 2020-04-24T23:00:00Z 2020-04-25T00:00:00Z 2020-04-26T00:00:00Z
6 mydb keep_24_hours 2020-04-25T00:00:00Z 2020-04-25T01:00:00Z 2020-04-26T01:00:00Z
7 mydb keep_24_hours 2020-04-25T01:00:00Z 2020-04-25T02:00:00Z 2020-04-26T02:00:00Z
8 mydb keep_24_hours 2020-04-25T02:00:00Z 2020-04-25T03:00:00Z 2020-04-26T03:00:00Z
9 mydb keep_24_hours 2020-04-25T03:00:00Z 2020-04-25T04:00:00Z 2020-04-26T04:00:00Z
10 mydb keep_24_hours 2020-04-25T04:00:00Z 2020-04-25T05:00:00Z 2020-04-26T05:00:00Z
11 mydb keep_24_hours 2020-04-25T05:00:00Z 2020-04-25T06:00:00Z 2020-04-26T06:00:00Z
12 mydb keep_24_hours 2020-04-25T06:00:00Z 2020-04-25T07:00:00Z 2020-04-26T07:00:00Z
13 mydb keep_24_hours 2020-04-25T07:00:00Z 2020-04-25T08:00:00Z 2020-04-26T08:00:00Z
14 mydb keep_24_hours 2020-04-25T08:00:00Z 2020-04-25T09:00:00Z 2020-04-26T09:00:00Z
15 mydb keep_24_hours 2020-04-25T09:00:00Z 2020-04-25T10:00:00Z 2020-04-26T10:00:00Z
16 mydb keep_24_hours 2020-04-25T10:00:00Z 2020-04-25T11:00:00Z 2020-04-26T11:00:00Z
17 mydb keep_24_hours 2020-04-25T11:00:00Z 2020-04-25T12:00:00Z 2020-04-26T12:00:00Z
18 mydb keep_24_hours 2020-04-25T12:00:00Z 2020-04-25T13:00:00Z 2020-04-26T13:00:00Z
29 mydb keep_24_hours 2020-04-25T13:00:00Z 2020-04-25T14:00:00Z 2020-04-26T14:00:00Z
20 mydb keep_24_hours 2020-04-25T14:00:00Z 2020-04-25T15:00:00Z 2020-04-26T15:00:00Z
21 mydb keep_24_hours 2020-04-25T15:00:00Z 2020-04-25T16:00:00Z 2020-04-26T16:00:00Z
22 mydb keep_24_hours 2020-04-25T16:00:00Z 2020-04-25T17:00:00Z 2020-04-26T17:00:00Z
23 mydb keep_24_hours 2020-04-25T17:00:00Z 2020-04-25T18:00:00Z 2020-04-26T17:00:00Z
24 mydb keep_24_hours 2020-04-25T18:00:00Z 2020-04-25T19:00:00Z 2020-04-26T17:00:00Z
https://blog.csdn.net/weixin_36586120/category_10514352.html