寻觅生命中的那一片浅草......

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

最近有台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

解决办法:

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