##MDL锁导致的等待队列
四个事务都在各自的事务里面没有提交。
事务A读取数据的时候会给t3加一个锁,让别的事务不能修改表结构;
然后事务B是要修改表,需要加一个写锁,但是先前事务A已经加了读锁,读写锁互斥所以造成了事务B等待,而之后的事务C,D都需要读表要加读锁,虽然读锁与A事务的读锁兼容,但是由于事务B已经等待了,所以后续的事务不管你兼容不兼容都得排在后面给我等待。
以上就是造成MDL锁队列等待的情况。
#####实例
当事务A提交的时候:
事务B就立马获取到锁然后完成,然后紧接着事务C,D也都完成读取。
##解决方法
首先当然是不要在业务的高峰期做,不然万一前面有一个长事务,你这边alter一下,后面一下子就堆了一堆事务。
##如何查看影响性能的锁
而且在8.0版本之后会有更详细的记录:
##业务上的建议
这边解释下,业务尽量放在事务后部也是希望锁尽可能的晚点加,快点释放的意思。
##总结