今天临近下班同事发现线上访问非常卡。show processlist;发现经过查询发现是mysql进程数太多了,1400多条进程,其中有处于等待的,删除临时表的。
原来是因为一个表索引的问题
select * from information_schema.processlist where db like '%essa%'
同事再给一个表(400w+)添加索引的时候,索引添加失败,错误认为添加的索引没有起作用,又删除了,结果可能把另外一个索引删除了,导致mysql锁表,进程加多,线上访问导致缓慢。然后不断去kill进程id,但是不起作用,因为杀进程的速度远远赶不上线上用户请求的速度。
后来在重启实例迅速建立之前误删的索引,程序恢复正常。