社區(qū)版MySQL無法獲取表MDL鎖的詳細信息,當(dāng)客戶遇到類似“Waiting for metadata lock”的問題而阻塞DML或DDL后,由于無法確定各session之間的關(guān)聯(lián),往往無從下手,復(fù)雜情況下,只能重啟實例,從而增加解決問題的成本,對業(yè)務(wù)產(chǎn)生較大影響。而且在業(yè)務(wù)場景較復(fù)雜的情況下,一旦涉及對 數(shù)據(jù)庫 元數(shù)據(jù)的互斥操作(如DDL、LOCK Table等),此類問題便會頻繁發(fā)生,給一線運維和客戶帶來很大的困擾。
針對以上痛點,華為 云數(shù)據(jù)庫MySQL 在充分調(diào)研內(nèi)核的基礎(chǔ)上,推出了MDL鎖視圖特性,可以清晰查看數(shù)據(jù)庫各session持有和等待的元數(shù)據(jù)鎖信息,方便現(xiàn)網(wǎng)運維進行問題定位,有效進行系統(tǒng)診斷,幫助客戶更好地優(yōu)化自身業(yè)務(wù)。
MDL鎖視圖以系統(tǒng)表的形式呈現(xiàn),該表位于INFORMATION_SCHEMA,表名:METADATA_LOCK_INFO,表結(jié)構(gòu)如下:
MDL鎖視圖主要由7個字段組成,各字段詳情為:
THREAD_ID:session的ID,即會話ID
LOCK_STATUS:MDL鎖的狀態(tài),主要分為PENDING和GRANTED兩種,分別表示session正在等待該MDL鎖和session已獲得該MDL鎖
LOCK_MODE:加鎖的模式,如MDL_SHARED、MDL_EXCLUSIVE、MDL_SHARED_READ、MDL_SHARED_WRITE等
LOCK_TYPE:MDL鎖的類型,如Table metadata lock、Schema metadata lock、Global read lock、Tablespace lock等
LOCK_DURATION:MDL鎖的范圍,有三種取值:MDL_STATEMENT、MDL_TRANSACTION、MDL_EXPLICIT,分別表示語句級別、事務(wù)級別、global級別
TABLE_SCHEMA:數(shù)據(jù)庫名,對于部分global級別的MDL鎖,該值為空
TABLE_NAME:表名,對于部分global級別的MDL鎖,該值為空