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