mysql> select * from INNODB_TRX\G;
*************************** 1. row ***************************
trx_id: 4976519
trx_state: RUNNING
trx_started: 2018-02-01 18:11:25
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 3
trx_mysql_thread_id: 8368442
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 2
trx_lock_memory_bytes: 360
trx_rows_locked: 1
trx_rows_modified: 1
trx_concurrency_tickets: 0
trx_isolation_level: READ COMMITTED
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
1 row in set (0.00 sec)
ERROR:
No query specified
在这个视图中,我们看到有事务的开始时间和trx_query这个字段,可以根据这两个字段去检测是否有未提交的事务,一般情况下我们的线上mysql都要求的是小事务,如果trx_query这个字段是空的,并且当前时间与trx_stared的差值超过了1分钟,基本上可以告警出来了,有没有提交的事务。