IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    mysqldump引起MySQL内存飙升事例一则

    夜行人发表于 2015-10-28 03:04:16
    love 0

    最近有台MySQL,在运行一段时间后,res和virt内存都会去到很高,res会占到物理内存的90%,最终导致业务异常

    期间做过的尝试:

    • 用tcpcopy来把生产环境的流量导到测试服,但MySQL内存并无异常
    • 将innodbfilepertable=1修改为innodbfilepertable=0,运行1天后,内存飙升还是比较厉害

    上面的措施都没有用。

    下面这个,不确定有没有试过,也记录下吧

    mysqldump -q,就是把数据尽快写到磁盘,而不是存在内存

    最后是同事看监控,发现在凌晨,MySQL备份后,内存才飙升,我们最后定位到MySQL内存异常的原因是以下2个:

    • xxx_db下表太多:近2W了,一个区服就一个表来寸配置
    • 由于表太多,下面的指令把整个库的表结构导出来的时候,估计会把整个结构先写入内存,但理论上,这个表结构不会大
    mysqldump -d $1 > $1_db_struc.sql

    解决办法:

    • 不导整个库的结构,一个表一个表地导(这个也是目前的做法),或者直接就不导结构,因为都是一样的
    • 减少表数量,我们后来把它改为了这种方式,单个表存所有区服的信息


沪ICP备19023445号-2号
友情链接