28.4.28 INFORMATION_SCHEMA INNODB_TRX 表
INNODB_TRX 表提供了当前正在执行中的每个事务的信息,包括该事务是否等待锁、事务开始时间和事务执行的 SQL 语句,如果有的话。
使用信息,请参见第17.15.2.1节,“使用 InnoDB 事务和锁定信息”。
INNODB_TRX 表具有以下列:
-
TRX_ID
InnoDB 内部唯一的事务 ID 号,这些 ID 对于只读且不锁定的事务不会被创建。详细信息,请参见第10.5.3节,“优化 InnoDB 只读事务”。
-
TRX_WEIGHT
事务的权重,反映了(但不是确切计数)事务修改的行数和锁定的行数。为了解决死锁,InnoDB 选择权重最小的事务作为““victim””以回滚。已经更改非事务表的 transactions 将被认为是更重的,无论修改和锁定的行数多少。
-
TRX_STATE
事务执行状态。允许的值是
RUNNING
、LOCK WAIT
、ROLLING BACK
和COMMITTING
。 -
TRX_STARTED
事务开始时间。
-
TRX_REQUESTED_LOCK_ID
如果
TRX_STATE
是LOCK WAIT
,则表示当前事务等待的锁ID;否则为NULL
。要获取锁的详细信息,可以将该列与性能chemadata_locks
表中的ENGINE_LOCK_ID
列进行连接。 -
TRX_WAIT_STARTED
如果
TRX_STATE
是LOCK WAIT
,则表示事务开始等待锁的时间;否则为NULL
。 -
TRX_MYSQL_THREAD_ID
MySQL线程ID。要获取线程详细信息,可以将该列与
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
是否立即释放自适应哈希索引搜索 latch,或者保留它直到 MySQL 语句完成。当没有自适应哈希索引争用时,这个值保持为0,语句保留 latch 直到完成。在争用时,它计数下降到0,然后语句立即释放 latch 之后每个行查找。当自适应哈希索引搜索系统被分区时(由
innodb_adaptive_hash_index_parts
控制),这个值保持为0。 -
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
由内容感知事务调度(CATS)算法分配给等待锁的事务的调度权重。该值相对其他事务的值,高值具有更大的权重。只有在
LOCK WAIT
状态下报告的交易才会计算该值,其他情况下报告为NULL。该值不同于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
-
使用这个表来诊断在高并发负载期间出现的性能问题。其内容根据第17.15.2.3节,“InnoDB事务和锁定信息的持久性和一致性”中描述的方式进行更新。
-
您必须拥有
PROCESS
特权,以便查询该表。 -
使用
INFORMATION_SCHEMA
中的COLUMNS
表或SHOW COLUMNS
语句,以查看该表的列信息,包括数据类型和默认值。