MySQL 8.4 版本資訊
當交易更新資料表中的列,或使用 SELECT FOR UPDATE
鎖定時,InnoDB
會在該列上建立鎖定清單或佇列。同樣地,InnoDB
會維護資料表層級鎖定的資料表鎖定清單。如果第二個交易想要更新列或鎖定先前交易以不相容模式鎖定的資料表,InnoDB
會將該列的鎖定請求新增至對應的佇列。若要讓交易取得鎖定,必須移除先前輸入到該列或資料表鎖定佇列的所有不相容鎖定請求 (當持有或請求這些鎖定的交易提交或回滾時就會發生)。
交易可以針對不同的列或資料表發出任意數量的鎖定請求。在任何給定的時間,交易可能會請求另一個交易持有的鎖定,在這種情況下,它會被其他交易封鎖。請求的交易必須等待持有封鎖鎖定的交易提交或回滾。如果交易沒有在等待鎖定,則它處於 RUNNING
狀態。如果交易正在等待鎖定,則它處於 LOCK WAIT
狀態。( INFORMATION_SCHEMA
INNODB_TRX
資料表會顯示交易狀態值。)
效能綱要 data_locks
資料表針對每個 LOCK WAIT
交易保留一或多列,指示任何阻礙其進度的鎖定請求。此資料表還包含一列,描述佇列中每個等待給定列或資料表的鎖定。效能綱要 data_lock_waits
資料表會顯示交易已持有的哪些鎖定正在封鎖其他交易請求的鎖定。