您好,登錄后才能下訂單哦!
什么是MDL
MDL,Meta Data lock,元數據鎖,一般稱為字典鎖。字典鎖與數據鎖相對應。字典鎖是為了保護數據對象被改變,一般是一些DDL會對字典對象改變,如兩個事物,事物1先查詢表,然后事物2試圖alter,其首先需要等待事物1結束(提交或回滾),此時的狀態便是Waiting for table metadata lock,然后才能獲得字典鎖。后續對TableA的任何操作(包括讀)都無法進行,也會在Opening tables的階段進入Waiting for table metadata lock的隊列。如果是線上業務的核心表出現了這樣的鎖等待隊列,就會造成災難性的后果。數據鎖是保護表中的數據,如兩個事物同時更新一行時,先得到row lock的事務會先執行,后者只能等待。
出現的情況:
場景一:
通過show processlist可以看到TableA上有正在進行的操作(包括讀),此時alter table語句無法獲取到metadata 獨占鎖,會進行等待。出現Waiting for table metadata lock
場景二:
通過show processlist看不到TableA上有任何操作,但實際上存在有未提交的事務,可以information_schema.innodb_trx中查看到。在事務沒有完成之前,TableA上的鎖不會釋放,alter table同樣獲取不到metadata的獨占鎖。
場景三:
通過show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也沒有任何進行中的事務。這很可能是因為在一個顯式的事務中,對TableA進行了一個失敗的操作(比如查詢了一個不存在的字段),這時事務沒有開始,但是失敗語句獲取到的鎖依然有效。從performance_schema.events_statements_current表中可以查到失敗的語句。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。