三张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事务和锁定信息”。