该 INNODB_TRX
表提供了当前在 InnoDB
中执行的每个事务的信息,包括事务是否等待锁、事务何时开始、事务执行的 SQL 语句(如果有)。
有关使用信息,请参阅 第 17.15.2.1 节,“使用 InnoDB 事务和锁定信息”。
该 INNODB_TRX
表具有以下列:
-
TRX_ID
一个唯一的事务 ID 号,内部在
InnoDB
中。这些 ID 不会为只读且非锁定的事务创建。有关详细信息,请参阅 第 10.5.3 节,“优化 InnoDB 只读事务”。 -
TRX_WEIGHT
事务的权重,反映(但不一定是确切的)事务所更改和锁定的行数。为了解决死锁,
InnoDB
选择权重最小的事务作为“受害者”回滚。更改非事务表的事务被认为比其他事务更重,不管更改和锁定的行数。 -
TRX_STATE
事务执行状态。允许的值是
RUNNING
、LOCK WAIT
、ROLLING BACK
和COMMITTING
。 -
TRX_STARTED
事务开始时间。
-
TRX_REQUESTED_LOCK_ID
事务当前等待的锁 ID,如果
TRX_STATE
是LOCK WAIT
;否则为NULL
。要获取锁的详细信息,请将该列与 Performance Schemadata_locks
表的ENGINE_LOCK_ID
列进行连接。 -
TRX_WAIT_STARTED
事务开始等待锁的时间,如果
TRX_STATE
是LOCK WAIT
;否则为NULL
。 -
TRX_MYSQL_THREAD_ID
MySQL 线程 ID。要获取线程的详细信息,请将该列与
INFORMATION_SCHEMA
PROCESSLIST
表的ID
列进行连接,但请参阅 第 17.15.2.3 节,“InnoDB 事务和锁定信息的持久性和一致性”。 -
TRX_QUERY
事务执行的 SQL 语句。
-
TRX_OPERATION_STATE
事务当前操作,如果没有则为
NULL
。 -
TRX_TABLES_IN_USE
事务处理当前 SQL 语句时使用的
InnoDB
表数。 -
TRX_TABLES_LOCKED
当前 SQL 语句在
InnoDB
表上锁定的行数。(因为这些是行锁,而不是表锁,所以这些表通常仍可以被多个事务读取和写入,尽管某些行被锁定。) -
TRX_LOCK_STRUCTS
事务保留的锁的数量。
-
TRX_LOCK_MEMORY_BYTES
事务锁结构在内存中的总大小。
-
TRX_ROWS_LOCKED
事务锁定的行数的近似值。该值可能包括删除标记的行,这些行物理存在但对事务不可见。
-
TRX_ROWS_MODIFIED
事务中修改和插入的行数。
-
TRX_CONCURRENCY_TICKETS
当前事务可以执行的工作量之前被交换出去的指示,如指定的
innodb_concurrency_tickets
系统变量。 -
TRX_ISOLATION_LEVEL
当前事务的隔离级别。
-
TRX_UNIQUE_CHECKS
当前事务中唯一检查是否打开或关闭。例如,在批量数据加载期间可能关闭。
-
TRX_FOREIGN_KEY_CHECKS
当前事务中外键检查是否打开或关闭。例如,在批量数据加载期间可能关闭。
-
TRX_LAST_FOREIGN_KEY_ERROR
最后一个外键错误的详细错误消息,如果没有则为
NULL
。 -
TRX_ADAPTIVE_HASH_LATCHED
当前事务是否锁定了自适应哈希索引。当自适应哈希索引搜索系统被分区时,单个事务不锁定整个自适应哈希索引。自适应哈希索引分区由
innodb_adaptive_hash_index_parts
控制,默认为 8。 -
TRX_ADAPTIVE_HASH_TIMEOUT
是否立即释放自适应哈希索引的搜索锁,还是保留它跨越 MySQL 的调用。当没有自适应哈希索引争用时,该值保持为零,语句保留锁直到完成。在争用期间,它倒计时到零,语句立即释放锁。
-
TRX_IS_READ_ONLY
值为 1 表示事务是只读的。
-
TRX_AUTOCOMMIT_NON_LOCKING
值为 1 表示事务是一个不使用
FOR UPDATE
或LOCK IN SHARED MODE
子句的SELECT
语句,并且启用了autocommit
,因此事务仅包含该语句。在该列和TRX_IS_READ_ONLY
都为 1 时,InnoDB
优化事务以减少事务更改表数据时的开销。 -
TRX_SCHEDULE_WEIGHT
Contention-Aware Transaction Scheduling (CATS) 算法为等待锁的事务分配的计划权重。该值相对于其他事务的值。较高的值具有更高的权重。该值仅计算等待锁的事务,报告为
LOCK WAIT
状态的状态。对于不等待锁的事务,报告为 NULL。
示例
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
注意
-
使用该表来帮助诊断高并发负载期间出现的性能问题。其内容如 第 17.15.2.3 节 所述。
-
您必须拥有
PROCESS
权限来查询该表。 -
使用
INFORMATION_SCHEMA
COLUMNS
表或SHOW COLUMNS
语句来查看该表的列的更多信息,包括数据类型和默认值。