MongoDB经验教训:一次批量删除历史数据引发的悲剧

以下是引用同事分享经验

MongoDB经验教训:一次批量删除历史数据引发的悲剧


缘起:mongodb数据量过大,准备删除mongodb无用历史数据
=> 我们分了32张表,实施过程中逐表删除


经过:
4:00左右:  开始跑脚本删除数据,偶有报警,不影响服务;
9:00左右:  流量上行,数据库请求排队,MongoDB逐步扛不住了;
            DBA尝试重启MongoDB数据库,结束已经在排队的请求,未果;
9:40左右:  业务流量激增,雪崩,MongoDB扛不住;
            业务限流,让MongoDB预热,只为50%用户提供服 务;
            DBA反馈有慢查询,MongoDB继续预热;
            业务层升级,将导致慢查询的非核心业务下线;
            升级业务模块,MongoDB预热完成 + DBA数据压缩完成,全流量放开,恢复服务;


核心提示:
(1)删除操作, MongoDB是异步处理的,在处理的过程中会分片Yield出全局锁 => 批量删除需要谨慎;
(2)我们对数据库进行了分表,逐表清理数据,还是导致内存热数据大量换出,磁盘IO激增 => 务必控制删除粒度;


其他启示:
(3)数据库恢复服务需要一定预热期,期间可逐步放开流量,否则可能导致持续雪崩;
(4)DBA期间进行了数据压缩操作,数据压缩可以大大减小索引大小,降低内存使用量;
(5)恢复服务过程中,导致慢查询的非核心服务,可以升级下线;


希望本次血的教训 对其他人起到启示作用,今后避免出现类似问题。
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值