##MDL锁导致的等待队列

四个事务都在各自的事务里面没有提交。

事务A读取数据的时候会给t3加一个锁,让别的事务不能修改表结构;

然后事务B是要修改表,需要加一个写锁,但是先前事务A已经加了读锁,读写锁互斥所以造成了事务B等待,而之后的事务C,D都需要读表要加读锁,虽然读锁与A事务的读锁兼容,但是由于事务B已经等待了,所以后续的事务不管你兼容不兼容都得排在后面给我等待。

以上就是造成MDL锁队列等待的情况。

#####实例

当事务A提交的时候:

事务B就立马获取到锁然后完成,然后紧接着事务C,D也都完成读取。

##解决方法

首先当然是不要在业务的高峰期做,不然万一前面有一个长事务,你这边alter一下,后面一下子就堆了一堆事务。

##如何查看影响性能的锁

而且在8.0版本之后会有更详细的记录:

##业务上的建议

这边解释下,业务尽量放在事务后部也是希望锁尽可能的晚点加,快点释放的意思。

##总结