大表更改字段问题
故障描述:
客户端各处接口请求失败
故障过程
- 晚上6点开始报警
- 回滚access新上线代码, 继续报警
- 发现数据库db02机器响应异常
- 45分dba确认在该机器上业务的query 等待mdl (这个需要去了解一下是啥),kill掉sleep的query后服务恢复
故障分析
- 6点的时候对歌曲表(一个4000w量级, 字段也很多的表进行了 该表操作, 新增了一个字段)
- 该操作同步到从库02机器后, 被慢查block, 整个block链路, 慢查block了改表的mdl, mdl又block了其他的查询, 其他的查询又block住了tornado服务
因为为了快速恢复服务, dba kill掉sleep的query操作, 无法查找具体的慢查询sql
推测:
确认改表引起的mdl为表级锁, 所以慢查肯定是发生在mi_song表。 并且我们使用了miproxy(小米的连接数据库的一个代理) miproxy在路由请求时会把事务都路由在主库上, 所以这次慢查询时没有显氏开启事务的, 另外查询都是通过music_access项目创建出来的对象, 该对象默认时开启事务, 所以排除这个项目引起次忙查。 其他可能的忙查源自人工操作, 或者数据工厂
(感觉这个结论有问题)