一個 INFORMATION_SCHEMA
表格和兩個效能綱要表格可讓您監控 InnoDB
交易並診斷潛在的鎖定問題
INNODB_TRX
:這個INFORMATION_SCHEMA
表格提供目前在InnoDB
內執行的每個交易的相關資訊,包括交易狀態(例如,它是正在執行還是等待鎖定)、交易開始時間,以及交易正在執行的特定 SQL 陳述式。data_locks
:這個效能綱要表格包含每個持有鎖定和每個被封鎖等待釋放持有鎖定的鎖定請求的列每個持有鎖定都有一個列,無論持有鎖定的交易狀態如何(
INNODB_TRX.TRX_STATE
為RUNNING
、LOCK WAIT
、ROLLING BACK
或COMMITTING
)。InnoDB 中每個等待另一個交易釋放鎖定的交易(
INNODB_TRX.TRX_STATE
為LOCK WAIT
)都被恰好一個封鎖鎖定請求封鎖。該封鎖鎖定請求是針對另一個交易以不相容模式持有的列或表格鎖定。鎖定請求始終具有與封鎖請求的持有鎖定模式不相容的模式(讀取 vs. 寫入、共用 vs. 獨佔)。被封鎖的交易必須等到其他交易提交 (commit) 或回滾 (roll back) 後,才能繼續進行,藉此釋放請求的鎖定。對於每個被封鎖的交易,
data_locks
表格會包含一個資料列,描述該交易已請求且正在等待的每個鎖定。
data_lock_waits
:這個 Performance Schema 表格指出哪些交易正在等待給定的鎖定,或者給定的交易正在等待哪個鎖定。這個表格為每個被封鎖的交易包含一或多個資料列,指出它已請求的鎖定以及任何正在封鎖該請求的鎖定。REQUESTING_ENGINE_LOCK_ID
值指的是交易請求的鎖定,而BLOCKING_ENGINE_LOCK_ID
值指的是(由另一個交易持有的)阻止第一個交易繼續進行的鎖定。對於任何給定的被封鎖交易,data_lock_waits
中的所有資料列對於REQUESTING_ENGINE_LOCK_ID
都有相同的值,而對於BLOCKING_ENGINE_LOCK_ID
則有不同的值。
有關上述表格的更多資訊,請參閱第 28.4.28 節,「The INFORMATION_SCHEMA INNODB_TRX Table」、第 29.12.13.1 節,「The data_locks Table」 和 第 29.12.13.2 節,「The data_lock_waits Table」。