问题背景:
- 业务量不大,Mysql 内存持续上涨,虽然不是很明显,但随着时间慢慢增长,1~2个月左右内存达到80%
- 一旦有一些执行缓慢的sql 内存会快速上去
- 增加/修改大表的字段内存会快速上去
常规操作:
- Mysql 设置告警规则85%~75%~65%(短信和邮件通知,实时监控异常状态)
- 优化慢查询sql,这次的重点不是这个
- innodb_buffer_pool_size 合理设置大小(32G内存,这里设置了20G,物理内存的60~70%)
现在的问题是已经没有慢查询,增加/修改大表的字段也是好几天前的,但上去的内存就是下不来,不会自动释放,找了很多方法看能否手动释放内存,发现并没有直接的方法(重启实例自然是可以,但不想这么干)
最后,MYSQL 虽然没有直接释放内存的操作,但是可以通过手动降低innodb_buffer_pool_size 的大小,调到一个很小的值(暂时不考虑常规状态),发下内存一下子就下来了,当内存下来之后在调回原来的值,问题解决。