也就是前天吧,午休之后,本身要晚上要上线,DBA进行了数据库的更新,因为这张表数据量比较多,更改表中一个字段长度大小,所以dba就在生产上提前执行该操作,可是就是因为这个原因造成了我们的app首页出现问题,报系统异常。可以看到下面图片中,在这十分钟内系统都没有日志。
最后在准生产上重现了该情况,的确是由于这个该表造成的,可是为什么改这张表数据就造成这种问题了,我们一直查代码,最后得到如下结果:
1:在修改表结构期间,数据库连接一直有8个连接,用show processlist命令看到,都是Waiting for table metadata lock...一直都是8个。对于这8个显示我们追查到了原因,本身设置数据库最大连接数位256,但是由于代码没有设置这个值,因此默认大小为8个。
2:锁表为什么会造成没有日志?
我们这么理解,由于数据库连接数最大只有8个,并且对于这个大表我们是做一些埋点统计的,所以访问相当频繁,碰巧这张表因为修改表结构锁表了,请求就等着表的锁释放,然后进行插入操作,所以造成其他请求进来要操作数据库的都没有数据库连接可用。造成整个系统处于假死状态,进而整个系统没有任何响应。