### 15.15.2 InnoDB INFORMATION\_SCHEMA Transaction and Locking Information

[15.15.2.1 Using InnoDB Transaction and Locking Information](innodb-information-schema-examples.html)
[15.15.2.2 InnoDB Lock and Lock-Wait Information](innodb-information-schema-understanding-innodb-locking.html)
[15.15.2.3 Persistence and Consistency of InnoDB Transaction and Locking
Information](innodb-information-schema-internal-data.html)

[]()[]()

Note

 This section describes locking information as exposed by the Performance Schema [`data_locks`](performance-schema-data-locks-table.html) and [`data_lock_waits`](performance-schema-data-lock-waits-table.html) tables, which supersede the `INFORMATION_SCHEMA` `INNODB_LOCKS` and `INNODB_LOCK_WAITS` tables in MySQL 8.0. For similar discussion written in terms of the older `INFORMATION_SCHEMA` tables, see [InnoDB INFORMATION\_SCHEMA Transaction and Locking Information](https://dev.mysql.com/doc/refman/5.7/en/innodb-information-schema-transactions.html), in [MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/).

 One `INFORMATION_SCHEMA` table and two Performance Schema tables enable you to monitor `InnoDB` transactions and diagnose potential locking problems:

* [`INNODB_TRX`](information-schema-innodb-trx-table.html): This `INFORMATION_SCHEMA` table provides information about every transaction currently executing inside `InnoDB`, including the transaction state (for example, whether it is running or waiting for a lock), when the transaction started, and the particular SQL statement the transaction is executing.

  []()
* [`data_locks`](performance-schema-data-locks-table.html): This Performance Schema table contains a row for each hold lock and each lock request that is blocked waiting for a held lock to be released:

  * There is one row for each held lock, whatever the state of the transaction that holds the lock (`INNODB_TRX.TRX_STATE` is `RUNNING`, `LOCK WAIT`, `ROLLING BACK` or `COMMITTING`).

  * Each transaction in InnoDB that is waiting for another transaction to release a lock (`INNODB_TRX.TRX_STATE` is `LOCK WAIT`) is blocked by exactly one blocking lock request. That blocking lock request is for a row or table lock held by another transaction in an incompatible mode. A lock request always has a mode that is incompatible with the mode of the held lock that blocks the request (read vs. write, shared vs. exclusive).

     The blocked transaction cannot proceed until the other transaction commits or rolls back, thereby releasing the requested lock. For every blocked transaction, [`data_locks`](performance-schema-data-locks-table.html) contains one row that describes each lock the transaction has requested, and for which it is waiting.

  []()
* [`data_lock_waits`](performance-schema-data-lock-waits-table.html): This Performance Schema table indicates which transactions are waiting for a given lock, or for which lock a given transaction is waiting. This table contains one or more rows for each blocked transaction, indicating the lock it has requested and any locks that are blocking that request. The `REQUESTING_ENGINE_LOCK_ID` value refers to the lock requested by a transaction, and the `BLOCKING_ENGINE_LOCK_ID` value refers to the lock (held by another transaction) that prevents the first transaction from proceeding. For any given blocked transaction, all rows in [`data_lock_waits`](performance-schema-data-lock-waits-table.html) have the same value for `REQUESTING_ENGINE_LOCK_ID` and different values for `BLOCKING_ENGINE_LOCK_ID`.

  []()

 For more information about the preceding tables, see [Section 26.4.28, “The INFORMATION\_SCHEMA INNODB\_TRX Table”](information-schema-innodb-trx-table.html), [Section 27.12.13.1, “The data\_locks Table”](performance-schema-data-locks-table.html), and [Section 27.12.13.2, “The data\_lock\_waits Table”](performance-schema-data-lock-waits-table.html).

