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
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐