INNODB_TRX 表提供有关 InnoDB 内部当前正在执行的每个事务的信息,包括事务是否正在等待锁,事务何时启动以及事务正在执行的 SQL 语句(如果有)。
有关用法信息,请参阅 第 17.15.2.1 节,“使用 InnoDB 事务和锁定信息”。
INNODB_TRX 表包含以下列:
TRX_IDInnoDB内部唯一的事务 ID 号。不会为只读和非锁定事务创建这些 ID。有关详细信息,请参阅 第 10.5.3 节,“优化 InnoDB 只读事务”。TRX_WEIGHT事务的权重,反映(但不一定是确切计数)事务更改的行数和锁定的行数。为了解决死锁,
InnoDB选择权重最小的事务作为要回滚的““受害者”。更改了非事务性表的事务被认为比其他事务更重,而不管更改和锁定的行数是多少。TRX_STATE事务执行状态。允许的值为
RUNNING、LOCK WAIT、ROLLING BACK和COMMITTING。TRX_STARTED事务开始时间。
TRX_REQUESTED_LOCK_ID如果
TRX_STATE为LOCK WAIT,则为事务当前正在等待的锁的 ID;否则为NULL。要获取有关锁的详细信息,请将此列与性能模式data_locks表的ENGINE_LOCK_ID列联接。TRX_WAIT_STARTED如果
TRX_STATE为LOCK WAIT,则为事务开始等待锁的时间;否则为NULL。TRX_MYSQL_THREAD_IDMySQL 线程 ID。要获取有关线程的详细信息,请将此列与
INFORMATION_SCHEMAPROCESSLIST表的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 的调用之间保留它。当没有自适应哈希索引争用时,此值保持为零,并且语句会保留锁存器,直到它们完成。在争用期间,它会倒计时到零,并且语句会在每次行查找后立即释放锁存器。当自适应哈希索引搜索系统被分区时(由
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) 算法分配给等待锁的事务的事务调度权重。该值是相对于其他事务的值而言的。值越高,权重越大。仅为
TRX_STATE列报告的处于LOCK WAIT状态的事务计算值。对于未等待锁的事务,将报告 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
注意
使用此表可以帮助诊断在高并发负载期间发生的性能问题。其内容会按照 第 17.15.2.3 节 “InnoDB 事务和锁信息的持久性和一致性” 中的描述进行更新。
您必须具有
PROCESS权限才能查询此表。使用
INFORMATION_SCHEMACOLUMNS表或SHOW COLUMNS语句可以查看有关此表列的其他信息,包括数据类型和默认值。