需求如下
我们有些生产mongo数据库的大表需要做归档,数据库为matrix_db,只保留最近三个月的数据,将三个月之前的数据删除,注意要先备份,过几天验证期以后再删备用表(我会通知),注意删除的时候不能影响线上流程,需要后台执行,具体的执行语句如下所示:
db.getCollection('neo.riskengine.PolicyExecutionTracking').deleteMany({createTime:{$lt:ISODate("2018-08-28 00:00:00")}})
解决办法
先备份
mongodump -ureader -p'Password$1' --port 27127 -d bos_braavos -c events -q '{"timeStamp" : {"$lte":"2017-11-28T00:00:23.870+08:00"}}' -o /u01/
再查看要删除数据大小
rep01:PRIMARY> db.neo.riskengine.PolicyExecutionTracking.find({"createTime":{"$lt":ISODate("2018-08-28 00:00:00")}}).count()
1976824
查看很慢,发现此collection没有索引
删除优化1:
建相关索引
rep01:PRIMARY> db.neo.riskengine.PolicyExecutionTracking.ensureIndex({"createTime":1},{background:tr