MySQL-mdl鎖

什麼是MDL鎖?

MDL鎖是MySQL5.5中新加的MetaDataLock,主要目的是為了保證DML和DDL併發執行時的數據一致性問題。在5.1版本中,一個事務在執行查詢或數據更新操作的時候,另外一個事務可以修改表的結構,這樣會導致數據的不一致。

MDL鎖是在哪一次實現的?

由於MySQL是Sever-Engine的結構。由於MDL鎖需要對所有的存儲引擎都生效,所以肯定只能在Server層實現。

MDL鎖是如何工作的?

MySQL中的鎖都有自己的類型,主要的鎖類型有Share鎖和Exclusive鎖,也就是共享鎖和排它鎖。MySQL的MDL鎖的實現更加複雜,它的鎖的分類更細。主要說最常見的幾種場景:

1)普通的select語句會對錶加MDL_SHARE_READ類型的鎖;

2)普通的update語句會對錶加MDL_SHARE_WRITE類型的鎖;

3)DDL語句會對錶加MDL_EXCLUSIVE類型的鎖。

所以,1)和2)是可以共享的鎖,不會衝突; 1)2)和3)之間是互斥的鎖。


分享到:


相關文章: