三張InnoDB INFORMATION_SCHEMA表使您可以監視事務並診斷潛在的鎖定問題:html
INNODB_TRX
:提供有關InnoDB中當前正在執行的每一個事務的信息,包括事務狀態(例如,它是否正在運行或等待鎖定),事務什麼時候啓動以及事務正在執行的特定SQL語句。mysql
INNODB_LOCKS
:InnoDB中等待另外一個事務釋放鎖定(INNODB_TRX.TRX_STATE
爲LOCK WAIT
)的每一個事務都被一個阻塞鎖定請求阻止。阻塞鎖定請求是針對由不兼容模式中的另外一個事務持有的行或表鎖定。阻止事務的鎖始終處於與請求鎖定模式不兼容的模式(讀取與寫入,共享與排除)。在另外一個事務提交或回滾以前,阻塞的事務沒法繼續,從而釋放所請求的鎖。對於每一個被阻止的事務,INNODB_LOCKS包含一行描述事務已請求的每一個鎖,以及它正在等待的每一個鎖。對於阻止另外一個事務的每一個鎖,INNODB_LOCKS也包含一行,不管持有鎖的事務的狀態如何(INNODB_TRX.TRX_STATE
是RUNNING
,LOCK WAIT
,ROLLING BACK
或COMMITTING
)。sql
INNODB_LOCK_WAITS
:此表指示哪些事務正在等待給定鎖定,或者指定給定事務正在等待哪一個鎖定。此表包含每一個被阻止事務的一個或多個行,指示它已請求的鎖以及阻止該請求的任何鎖。 REQUESTED_LOCK_ID
值指的是事務請求的鎖,BLOCKING_LOCK_ID
值指的是阻止第一個事務繼續進行的鎖(由另外一個事務持有)。對於任何給定的阻塞事務,INNODB_LOCK_WAITS中的全部行都具備REQUESTED_LOCK_ID的相同值和BLOCKING_LOCK_ID的不一樣值。markdown
INNODB_LOCKS
表包含有關InnoDB事務已請求但還沒有獲取的每一個鎖的信息,以及事務持有的阻止另外一個事務的每一個鎖。併發
【注意】
此表從MySQL 5.7.14開始不推薦使用,並在MySQL 8.0中刪除。性能
INNODB_LOCKS
表包含如下列:優化
示例spa
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS\G *************************** 1. row *************************** lock_id: 3723:72:3:2 lock_trx_id: 3723 lock_mode: X lock_type: RECORD lock_table: `mysql`.`t` lock_index: PRIMARY lock_space: 72 lock_page: 3 lock_rec: 2 lock_data: 1, 9 *************************** 2. row *************************** lock_id: 3722:72:3:2 lock_trx_id: 3722 lock_mode: S lock_type: RECORD lock_table: `mysql`.`t` lock_index: PRIMARY lock_space: 72 lock_page: 3 lock_rec: 2 lock_data: 1, 9
Notes線程
使用此表可幫助診斷在併發負載較重時發生的性能問題。 其內容按「InnoDB事務和鎖定信息的持久性和一致性」中所述進行更新。code
您必須具備PROCESS權限才能查詢此表。
使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS語句查看有關此表的列的其餘信息,包括數據類型和默認值。
有關使用信息,請參見「使用InnoDB事務和鎖定信息」。
INNODB_LOCK_WAITS
表包含每一個被阻止的InnoDB事務的一行或多行,指示它已請求的鎖以及阻止該請求的任何鎖。
【注意】
此表從MySQL 5.7.14開始不推薦使用,並在MySQL 8.0中刪除。
INNODB_LOCK_WAITS
表包含如下列:
示例
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS\G *************************** 1. row *************************** requesting_trx_id: 3396 requested_lock_id: 3396:91:3:2 blocking_trx_id: 3395 blocking_lock_id: 3395:91:3:2
Notes
使用此表可幫助診斷在併發負載較重時發生的性能問題。 其內容按「InnoDB事務和鎖定信息的持久性和一致性」中所述進行更新。
您必須具備PROCESS權限才能查詢此表。
使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS語句查看有關此表的列的其餘信息,包括數據類型和默認值。
有關使用信息,請參見「使用InnoDB事務和鎖定信息」。
INNODB_TRX
表包含有關當前在InnoDB內執行的每一個事務(不包括只讀事務)的信息,包括事務是否在等待鎖定,事務什麼時候啓動以及事務正在執行的SQL語句(若是有)。
INNODB_TRX
表包含如下列:
示例
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G *************************** 1. row *************************** trx_id: 1510 trx_state: RUNNING trx_started: 2014-11-19 13:24:40 trx_requested_lock_id: NULL trx_wait_started: NULL trx_weight: 586739 trx_mysql_thread_id: 2 trx_query: DELETE FROM employees.salaries WHERE salary > 65000 trx_operation_state: updating or deleting trx_tables_in_use: 1 trx_tables_locked: 1 trx_lock_structs: 3003 trx_lock_memory_bytes: 450768 trx_rows_locked: 1407513 trx_rows_modified: 583736 trx_concurrency_tickets: 0 trx_isolation_level: REPEATABLE READ trx_unique_checks: 1 trx_foreign_key_checks: 1 trx_last_foreign_key_error: NULL trx_adaptive_hash_latched: 0 trx_adaptive_hash_timeout: 10000 trx_is_read_only: 0 trx_autocommit_non_locking: 0
Notes
使用此表可幫助診斷在併發負載較重時發生的性能問題。 其內容按「InnoDB事務和鎖定信息的持久性和一致性」中所述進行更新。
您必須具備PROCESS權限才能查詢此表。
使用INFORMATION_SCHEMA COLUMNS表或SHOW COLUMNS語句查看有關此表的列的其餘信息,包括數據類型和默認值。
有關使用信息,請參見「使用InnoDB事務和鎖定信息」。