一、背景
最近在做计费重构的项目,项目开发工作基本收尾,但是遇到了一个字段加不上的问题,排查过程中也学到了一些东西,这里记录下。
二、问题
2.1 问题反馈
由于要加的字段是另外一个同事负责的内容,到我这里收到反馈说是没加上,所以就跟进一下,从技术方案文档上找到对应的alter 表 DDL语句直接执行了一把,发现执行超时了,明显有问题,执行结果显示如下:
ErrorCode:2013 Lost Connection To Mysql Server during query。
下面进入正式的排查过程。
2.2 表信息收集
出现这种情况就想到了两种可能,于是直接尝试百度了下:Mysql 加表字段超时。根据搜索结果初步的信息判断,有两种可能:
- 数据量过大
- 索引过多
于是查了下表,表数据量不超过500,但是索引太多是真的,而且有外键,但是直觉或者常识告诉我上面两种可能都不是真正的原因。
三、排查过程
3.1 粗略排查&解决
到这一步就直接使用show processlist 命令来看一下是不是上面执行的命令还没有结束掉,存在锁等问题。
确实发现了有几个Mysql 连接出现了锁等待,信息如下:
Waiting for table metadata lock
到这里就发现问题确实不简单,因为一般情况下加字段应该是很快的,所以这里直接继续请教百度