在 mysql 5.5 版本中引入了 mdl,當對乙個表做增刪改查操作的時候,加 mdl 讀 鎖;當要對錶做結構變更操作的時候,加 mdl 寫鎖。
因此,如果有兩個線 程要同時給乙個表加字段,其中乙個要等另乙個執行完才能開始執行。 雖然 mdl 鎖是系統缺省會加的,但卻是你不能忽略的乙個機制。比如下面這個例子,我經常看 到有人掉到這個坑里:給乙個小表加個字段,導致整個庫掛了。 你肯定知道,給乙個表加字段,或者修改字段,或者加索引,需要掃瞄全表的資料。在對大表操 作的時候,你肯定會特別小心,以免對線上服務造成影響。而實際上,即使是小表,操作不慎也 會出問題。我們來看一下下面的操作序列,假設表 t 是乙個小表。
我們可以看到 session a 先啟動,這時候會對錶 t 加乙個 mdl 讀鎖。由於 session b 需要的也 是 mdl 讀鎖,因此可以正常執行。 之後 session c 會被 blocked,是因為 session a 的 mdl 讀鎖還沒有釋放,而 session c 需要 mdl 寫鎖,因此只能被阻塞。 如果只有 session c 自己被阻塞還沒什麼關係,但是之後所有要在表 t 上新申請 mdl 讀鎖的請 求也會被 session c 阻塞。前面我們說了,所有對錶的增刪改查操作都需要先申請 mdl 讀鎖, 就都被鎖住,等於這個表現在完全不可讀寫了。 如果某個表上的查詢語句頻繁,而且客戶端有重試機制,也就是說超時後會再起乙個新 session 再請求的話,這個庫的執行緒很快就會爆滿。 事務中的 mdl 鎖,在語句執行開始時申請,但是語句結束後並不會馬上釋 放,而會等到整個事務提交後再釋放。
了解一下Mysql的MDL鎖
產生的原因 事務訪問資料時會自動加mdl鎖,也就是元資料讀鎖。這個事務訪問資料不是當前讀,不是forupdate,只是普通的select。事務修改元資料的時候,會自動給表加mld寫鎖。也就是加寫鎖,別的表都不能訪問該錶資料了。在專案大規模上線改表的時候,有時候會給 下線,上線成功後才會開啟。舉例 下...
了解一下NTLM
ntlm 在客戶機與伺服器之間提供身份認證的安全包。ntlm 身份驗證協議 是 質詢 應答身份驗證協議,是windows nt 4.0 及其早期版本中用於網路身份驗證的預設協議。windows 2000 中仍然支援該協議,但它不再是預設的。ntlm身份驗證過程 ntlm 是用於 windows nt...
了解一下 display flex
一 display flex flex 是flexuble box的縮寫,意為 彈性盒子 用來為盒狀模型提供最大的靈活性.任何乙個容器都可以指定為flex布局.box 行內元素也可以使用flex布局.box webkit核心的瀏覽器,必須加上 webkit box 注意為父級設計flex布局以後,子...