伪 influxdb删除数据
前言
大早上的,一大佬跟我说grafan登不上了,让帮忙看看啥情况,登录服务器一通乱看,磁盘满了,因为那台服务器还装了个influxdb,估计也就是数据写的,没空间了。
influxdb作为时序数据库的一种,是不提供类似mysql的delete操作,也就是,原则上,你删不了数据,除非删库。
但是,influxdb提供了数据保留策略policies
,通过对policies
操作,可以达到删除数据的效果
数据保存策略(Retention Policies)
influxdb的数据保存策略policies
主要是用于指定数据的保留时间,超过指定时间,就会删除这部分数据。
查询策略
1 | > show retention policies on exceptionless; |
- name: 策略名称
- duration: 保留时间,0s表示永久保存
- shardGroupDuration:shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,个人理解为时间分区
- replicaN:全称是REPLICATION,副本个数
- default:是否是默认策略
新建策略
语法如下:
1 | CREATE RETENTION POLICY ON <retention_policy_name> |
示例
1 | CREATE RETENTION POLICY "3_day" ON "exceptionless" DURATION 3d REPLICATION 1 SHARD DURATION 3h DEFAULT; |
为库exceptionless创建了一个名称为3_day的策略,其中数据保存时间为3天,SHARDDURATION为3h。
ShardGroup
shardgroup是InfluxDB中一个重要的逻辑概念,它负责指定时间跨度的数据存储,这个时间跨度在创建RP时指定。如果没有指定,系统将通过RP的数据保留时间来计算:
Retention Policy‘s DURATION | Shard Group Duration |
---|---|
< 2days | 1h |
>= 2days and <= 6months | 24h |
> 6months | 168h |
不同shardgroup的时间跨度不会重叠。shardgroup实现了数据按时间分区,这样的设计可以:
- 一定程度上缓解数据写入热点问题
- 加快数据删除效率(将数据按照时间分割成小的粒度会使得数据过期实现非常简单,InfluxDB中数据过期删除的执行粒度就是Shard Group,系统会对每一个Shard Group判断是否过期,而不是一条一条记录判断。InfluxDB没有提供删除和更新数据的接口,数据只能通过RP进行删除)
- 加快数据按时间维度查找的效率(实现了将数据按照时间分区的特性。将时序数据按照时间分区是时序数据库一个非常重要的特性,基本上所有时序数据查询操作都会带有时间的过滤条件,比如查询最近一小时或最近一天,数据分区可以有效根据时间维度选择部分目标分区,淘汰部分分区)
修改及删除策略
1 | # 修改策略 |
后序
说回大佬的问题,连接进influxdb:influx -host ip:port -precision rfc3339
之后,查看当前库的存储策略:
1 | > show retention policies on exceptionless; |
嗯,保存时间是永久。。再新建一个7天的策略,把原策略删除即可。
以上,完~