INNODB_TRX表提供了当前在InnoDB内部执行的所有事务信息,包含事务是否在等待锁,事务何时开始以及事务正在执行的SQL语句(如果有的话,sql语句阻塞就可以显示)。
使用此表可帮助诊断在高并发负载期间发生的性能问题。
使用下面的语句,可以查询该表:
select * from information_schema.INNODB_TRX;
表有如下列
TRX_ID:
InnoDB内部的唯一事务ID,不会为只读且非锁定事务创建ID。
TRX_WEIGHT:
事务的权重,反映事务修改和锁定的行数(不一定是准确的数量),当解决死锁时,InnoDB会选择权重最小的事务作为 牺牲品 让其回滚。已经更改非事务表的事务被认为比其他事务的 权重 更重,不管其修改和锁定的行数。
TRX_STATE:
事务的执行状态。值为 RUNNING(运行), LOCK WAIT(等待锁), ROLLING BACK(正在回滚), 和 COMMITTING(正在提交)。
TRX_STARTED:事务开始的时间。
TRX_REQUESTED_LOCK_ID:
如果状态为 锁等待 则为事务当前等待的锁id,否则为空。
TRX_WAIT_STARTED:开始等待锁的时间,如果状态不是 LOCK WAIT,则为空。
TRX_MYSQL_THREAD_ID:MySQL线程ID,要获取更多的线程信息,需要关联INFORMATION_SCHEMA PROCESSLIST表进行查询。
TRX_QUERY:事务正在执行的SQL语句。
TRX_OPERATION_STATE:事务当前的状态。updating or deleting
TRX_TABLES_IN_USE:事务执行SQL语句时使用的表的数量。
TRX_TABLES_LOCKED:当前SQL语句在多少张表(表的数量)上持有锁。因为这些是行锁,不是表锁,所以,尽管某些行被锁定,这些表仍然可以被多个事务读写。
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_LAST_FOREIGN_KEY_ERROR:最后一次外键的错误详情,没有的话为空。
TRX_ADAPTIVE_HASH_LATCHED:
自适应哈希索引是否被当前事务锁定。当自适应哈希索引搜索系统被分区时,单个事务不会锁定整个自适应哈希索引。自适应哈希索引分区由 innodb_adaptive_hash_index_parts 参数控制,默认设为 8。
TRX_ADAPTIVE_HASH_TIMEOUT:
自适应哈希超时时间。是否立即放弃自适应哈希索引的搜索latch,或者在MySQL 的调用中保留它。当没有自适应哈希索引争用时,该值保持为零,并且语句保留 latch 直到它们完成。在争用期间,它倒计时到零,并且语句在每行查找后立即释放 latch。当自适应哈希索引搜索系统被分区(由 innodb_adaptive_hash_index_parts 控制)时,该值保持为 0。
TRX_IS_READ_ONLY:只读事务标识。1代表只读事务。
TRX_AUTOCOMMIT_NON_LOCKING:
无锁自动提交标识。值为1表示事务是一个没有使用 FOR UPDATE 或者 LOCK IN SHARED MODE 字句的SELECT 语句,并且自动提交开启,这样事务就会只包含一条语句。如果这行和 TRX_IS_READ_ONLY 都为1的话,InnoDB会优化事务,以减少事务改变表数据的开销。
要获取锁的细节信息,需要关联INNODB_LOCKS表的LOCK_ID字段
使用INFORMATION_SCHEMA COLUMNS 表,或者 SHOW COLUMNS 语句可以查看表中的列的附加信息,包括数据类型和默认值。
示例
{
"trx_id":"55840",
"trx_state":"LOCK WAIT",
"trx_started":"2022-08-16 22:45:38",
"trx_requested_lock_id":"55840:24:6:150",
"trx_wait_started":"2022-08-16 22:46:14",
"trx_weight":5,
"trx_mysql_thread_id":9,
"trx_query":"/* ApplicationName=DataGrip 2022.2 */ update address set address2='xian' where address_id=12",
"trx_operation_state":"starting index read",
"trx_tables_in_use":1,
"trx_tables_locked":2,
"trx_lock_structs":4,
"trx_lock_memory_bytes":1136,
"trx_rows_locked":2,
"trx_rows_modified":1,
"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":0,
"trx_is_read_only":0,
"trx_autocommit_non_locking":0
}