因为公司刚成立一年,早期开发某个项目的时候,这个项目当时没有使用elk这些管理日志,直接放入到mysql innodb表中,而且该日志表一直是写频繁,查询少,只有在出现问题情况的时候,才让业务人员登录系统进行查询.现在这个表,经过一年后,业务爆发增长,占用磁盘空间780GB,目前已经部分业务停止向该表写入数据了,但是用的是阿里云的服务器,光一个表780GB就要花费不少费用,所以初期目标是对该表执行delete+optimize table,删除掉不需要的数据.但是delete操作好办,但是optimize table会对全表产生共享锁,可能费时将近一天左右,无法写入数据,这个显然是不能接受的,所以弱弱的问一下大佬,这个该如何优化以节省磁盘空间.
补充:delete操作好办,但是optimize table费时太大了.前者操作可以 直接基于MVCC 保证行锁,不影响业务写入.后者直接锁表,有点难.要短时间内能操作完,不要长时间停滞,导致升级费时太久.
你可以设计一张新的分区表,把在线数据先写入新的表,然后再变更时间,把业务操作写入新的表,历史数据再慢慢迁移。等把需要的历史数据都迁移到新的分区表之后,直接把旧表备份后,drop掉就可以了
来源:云原生后端社区
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。