问题背景:

  • 业务量不大,Mysql 内存持续上涨,虽然不是很明显,但随着时间慢慢增长,1~2个月左右内存达到80%
  • 一旦有一些执行缓慢的sql 内存会快速上去
  • 增加/修改大表的字段内存会快速上去

常规操作:

  • Mysql 设置告警规则85%~75%~65%(短信和邮件通知,实时监控异常状态)
  • 优化慢查询sql,这次的重点不是这个
  • innodb_buffer_pool_size 合理设置大小(32G内存,这里设置了20G,物理内存的60~70%

        现在的问题是已经没有慢查询,增加/修改大表的字段也是好几天前的,但上去的内存就是下不来,不会自动释放,找了很多方法看能否手动释放内存,发现并没有直接的方法(重启实例自然是可以,但不想这么干)

        最后,MYSQL 虽然没有直接释放内存的操作,但是可以通过手动降低innodb_buffer_pool_size 的大小,调到一个很小的值(暂时不考虑常规状态),发下内存一下子就下来了,当内存下来之后在调回原来的值,问题解决。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐