### 26.4.28 信息\_SCHEMA INNODB_TRX 表

[](<>)

这[`INNODB_TRX`](information-schema-innodb-trx-table.html)表提供有关当前在内部执行的每个事务的信息`InnoDB`，包括事务是否在等待锁，事务何时开始，以及事务正在执行的SQL语句，如果有的话。

有关使用信息，请参阅[第 15.15.2.1 节，“使用 InnoDB 事务和锁定信息”](innodb-information-schema-examples.html).

这[`INNODB_TRX`](information-schema-innodb-trx-table.html)表有这些列：

-   `TRX_ID`

    唯一的交易 ID 号，内部`InnoDB`.这些 ID 不是为只读且非锁定的事务创建的。有关详细信息，请参阅[第 8.5.3 节，“优化 InnoDB 只读事务”](innodb-performance-ro-txn.html).

-   `TRX_WEIGHT`

    事务的权重，反映（但不一定是确切的计数）更改的行数和事务锁定的行数。要解决死锁，`InnoDB`选择权重最小的事务作为“受害者”进行回滚。已更改非事务表的事务被认为比其他事务更重，无论更改和锁定的行数如何。

-   `TRX_STATE`

    事务执行状态。允许的值为`跑步`,`锁定等待`,`滚回来`， 和`承诺`.

-   `TRX_STARTED`

    交易开始时间。

-   `TRX_REQUESTED_LOCK_ID`

    事务当前正在等待的锁的 ID，如果`TRX_STATE`是`锁定等待`;否则`空值`.要获取有关锁的详细信息，请将此列与`ENGINE_LOCK_ID`性能模式的列[`数据锁`](performance-schema-data-locks-table.html)桌子。

-   `TRX_WAIT_STARTED`

    事务开始等待锁的时间，如果`TRX_STATE`是`锁定等待`;否则`空值`.

-   `TRX_MYSQL_THREAD_ID`

    MySQL 线程 ID。要获取有关线程的详细信息，请将此列与`ID`的列`INFORMATION_SCHEMA` [`进程列表`](information-schema-processlist-table.html)表，但见[第 15.15.2.3 节，“InnoDB 事务和锁定信息的持久性和一致性”](innodb-information-schema-internal-data.html).

-   `TRX_QUERY`

    事务正在执行的 SQL 语句。

-   `TRX_OPERATION_STATE`

    交易的当前操作，如果有的话；否则`空值`.

-   `TRX_TABLES_IN_USE`

    的数量`InnoDB`处理此事务的当前 SQL 语句时使用的表。

-   `TRX_TABLES_LOCKED`

    的数量`InnoDB`当前 SQL 语句具有行锁的表。（因为这些是行锁，而不是表锁，所以尽管某些行被锁定，但通常仍然可以由多个事务读取和写入表。）

-   `TRX_LOCK_STRUCTS`

    事务保留的锁数。

-   `TRX_LOCK_MEMORY_BYTES`

    此事务的锁结构在内存中占用的总大小。

-   `TRX_ROWS_LOCKED`

    此事务锁定的近似数或行数。该值可能包括实际存在但对事务不可见的删除标记行。

-   `TRX_ROWS_MODIFIED`

    此事务中修改和插入的行数。

-   `TRX_CONCURRENCY_TICKETS`

    一个值，指示当前事务在被换出之前可以做多少工作，由[`innodb_concurrency_tickets`](innodb-parameters.html#sysvar_innodb_concurrency_tickets)系统变量。

-   `TRX_ISOLATION_LEVEL`

    当前事务的隔离级别。

-   `TRX_UNIQUE_CHECKS`

    是否为当前事务打开或关闭唯一检查。例如，它们可能在批量数据加载期间被关闭。

-   `TRX_FOREIGN_KEY_CHECKS`

    是否为当前事务打开或关闭外键检查。例如，它们可能在批量数据加载期间被关闭。

-   `TRX_LAST_FOREIGN_KEY_ERROR`

    最后一个外键错误的详细错误信息，如果有的话；否则`空值`.

-   `TRX_ADAPTIVE_HASH_LATCHED`

    自适应哈希索引是否被当前事务锁定。当自适应哈希索引搜索系统被分区时，单个事务不会锁定整个自适应哈希索引。自适应哈希索引分区由[`innodb_adaptive_hash_index_parts`](innodb-parameters.html#sysvar_innodb_adaptive_hash_index_parts)，默认设置为 8。

-   `TRX_ADAPTIVE_HASH_TIMEOUT`

    是否立即放弃自适应哈希索引的搜索锁存器，或者在来自 MySQL 的调用中保留它。当没有自适应哈希索引争用时，该值保持为零，并且语句保留锁存器直到它们完成。在争用期间，它倒计时到零，并且语句在每行查找后立即释放锁存器。当自适应哈希索引搜索系统被分区时（由[`innodb_adaptive_hash_index_parts`](innodb-parameters.html#sysvar_innodb_adaptive_hash_index_parts))，值保持为 0。

-   `TRX_IS_READ_ONLY`

    值 1 表示事务是只读的。

-   `TRX_AUTOCOMMIT_NON_LOCKING`

    值为 1 表示事务是[`选择`](select.html)不使用的语句`更新`要么`锁定共享模式`子句，并且正在执行[`自动提交`](server-system-variables.html#sysvar_autocommit)启用，以便事务仅包含这一语句。当此列和`TRX_IS_READ_ONLY`都是1，`InnoDB`优化事务以减少与更改表数据的事务相关的开销。

-   `TRX_SCHEDULE_WEIGHT`

    由竞争感知事务调度 (CATS) 算法分配给等待锁的事务的事务调度权重。该价值是相对于其他交易的价值。较高的值具有较大的权重。仅针对 a 中的交易计算值`锁定等待`状态，如报告的`TRX_STATE`柱子。不等待锁的事务会报告 NULL 值。这`TRX_SCHEDULE_WEIGHT`值不同于`TRX_WEIGHT`值，它是由不同的算法为不同的目的计算的。

#### 例子

```
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
       trx_schedule_weight: NULL
```

#### 笔记

-   使用此表可帮助诊断在高并发负载期间发生的性能问题。其内容如中所述更新[第 15.15.2.3 节，“InnoDB 事务和锁定信息的持久性和一致性”](innodb-information-schema-internal-data.html).

-   你必须拥有[`过程`](privileges-provided.html#priv_process)查询此表的权限。

-   使用`INFORMATION_SCHEMA` [`列`](information-schema-columns-table.html)表或[`显示列`](show-columns.html)语句以查看有关此表的列的其他信息，包括数据类型和默认值。
