线上数据库增加字段导致服务请求超时总结

今天的一个需求上线需要在数据库的某个表中增加一个字段。这个数据库是服务中一个业务量比较少的数据库,与主要业务的数据库是隔离的。执行增加操作后生效比较慢,没有关注,过了一段时间收到服务超时量报警。

分析原因:

修改的数据库表数据量比较大,修改数据库字段时会锁住表。

线上业务虽然很少的业务请求会想表中插入数据,当表锁住后会造成数据库连接挂起,当大量连接数据库的线程被挂起之后,服务线程池中的有效线程就会大量减少,此时会造成大量请求超时。

这时用工具连接数据库时会报错:1040 too many connections
这个错误的原因就是,数据库的连接量过多无法连接。原因就是服务中插入数据的数据库连接都被挂住引起总的数据库连接数达到配置的最大量,拒绝更多的连接请求。

解决:

重启数据库服务。

重启之后超时请求消失。

总结:

Mysql在5.6版本之前,直接修改表结构的过程中会锁表,具体的操作步骤如下:
(1)首先创建新的临时表,表结构通过命令ALTAR TABLE新定义的结构
(2)然后把原表中数据导入到临时表
(3)删除原表
(4)最后把临时表重命名为原来的表名

具体操作可以再深入学习。

猜你喜欢

转载自my.oschina.net/u/1760932/blog/1632142