MySQL查询当前最新事务ID的方法

  介绍

这篇文章给大家分享的是有关MySQL查询当前最新事务ID的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

写在前面:在个别时候可能需要查看当前最新的事务ID,以便做一些业务逻辑上的判断(例如利用事务ID变化以及前后时差,统计每次事务的响应时长等用途)。

通常地,我们有两种方法可以查看当前的事务ID:

<强> 1,执行显示引擎INNODB状态,查看事务相关信息

=====================================150303年17:16:11 INNODB监视器输出=====================================从过去的15秒每秒平均计算   …   ------------   交易   Trx id计数器3359877657——当前最大事务id   清除了trx # 39; n: o & lt;3359877468撤销n: o & lt;0状态:运行   324年历史列表的长度   每个会话的事务列表:   ——没有开始事务0——该会话中执行显示引擎INNODB状态,不会产生事务,所以事务ID为0   MySQL线程id 4692367, 0 x51103940 OS线程处理,查询id 677284426 xx.173ops.com 10. x.x。x yejr init   显示/* !50000引擎*/INNODB的地位   ——没有开始事务3359877640——非活跃事务,还未开始   在使用mysql表1,锁定0   MySQL线程id 4678384, 0 x41a57940 OS线程处理,查询id 677284427 xx.173ops.com 10. x.x。x yejr系统锁   选择polinfo0_。Fid Fid39_0_,…      ——交易3359877652,而不是开始   MySQL线程id 4678383, 0 x50866940 OS线程处理,查询id 677284420 xx.173ops.com 10. x.x。x yejr清理      ——交易3359877635,活跃的1358秒,线程内宣布InnoDB 5000——活跃长事务,运行了1358秒还未结束,要引起注意,可能会导致大量锁等待发生   在使用mysql表1,锁定1   1锁结构(s),堆大小376,0行锁,undo日志条目1   MySQL线程id 3120717, 0 x529b4940 OS线程处理,查询id 677284351 xx.173ops.com 10. x.x。x yejr查询结束   插入t_live_room……

<强> 2,查看INFORMATION_SCHEMA。INNODB_TRX、INNODB_LOCKS INNODB_LOCK_WAITS三个表,通过这些信息能快速发现哪些事务在阻塞其他事务

先查询INNODB_TRX表,看看都有哪些事务

mysql>SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX \ G   * * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行 ***************************   trx_id: 17778——当前事务ID   trx_state:锁等待——处于锁等待状态,也就是等待其他会话释放锁资源   trx_started: 2015-03-04 10:40:26   trx_requested_lock_id: 17778:82:3:6——欲请求的锁   trx_wait_started: 2015-03-04 10:40:26   trx_weight: 2——大意是该锁影响了2行记录   trx_mysql_thread_id: 657——processlist中的线程ID   trx_query:更新trx_fee设置费用=rand () * 1000 id=4   trx_operation_state:指数开始阅读   trx_tables_in_use: 1   trx_tables_locked: 1   trx_lock_structs: 2   trx_lock_memory_bytes: 360   trx_rows_locked: 1   trx_rows_modified: 0   trx_concurrency_tickets: 0   trx_isolation_level:可重复读   trx_unique_checks: 1   trx_foreign_key_checks: 1   trx_last_foreign_key_error:零   trx_adaptive_hash_latched: 0   trx_adaptive_hash_timeout: 10000   trx_is_read_only: 0   trx_autocommit_non_locking: 0   * * * * * * * * * * * * * * * * * * * * * * * * * * * 2。行 ***************************   trx_id: 17773   trx_state:跑步   trx_started: 2015-03-04 10:40:23   trx_requested_lock_id:零   trx_wait_started:零   trx_weight: 10   trx_mysql_thread_id: 656   trx_query:零   trx_operation_state:零   trx_tables_in_use: 0   trx_tables_locked: 0   trx_lock_structs: 2   trx_lock_memory_bytes: 360   trx_rows_locked: 9   trx_rows_modified: 8   trx_concurrency_tickets: 0   trx_isolation_level:可重复读   trx_unique_checks: 1   trx_foreign_key_checks: 1   trx_last_foreign_key_error:零   trx_adaptive_hash_latched: 0   trx_adaptive_hash_timeout: 10000   trx_is_read_only: 0   trx_autocommit_non_locking: 0

<强>再看INNODB_LOCKS表,看看都有什么锁

mysql>select * from information_schema.INNODB_LOCKS \ G   * * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行 ***************************   lock_id: 17778:82:3:6——当前锁ID   lock_trx_id: 17778,该锁对应的事务ID   lock_mode: X——锁类型,排它锁X   lock_type:记录——锁范围,记录锁:锁,记录其他锁范围:间隙锁:锁的差距,或者键锁(记录锁+间隙锁)   lock_table:‘测试’。“trx_fee”   lock_index:主——加载在哪个索引上的锁   lock_space: 82   lock_page: 3   lock_rec: 6   lock_data: 4   * * * * * * * * * * * * * * * * * * * * * * * * * * * 2。行 ***************************   lock_id: 17773:82:3:6   lock_trx_id: 17773   lock_mode: X   lock_type:记录   lock_table:‘测试’。“trx_fee”   lock_index:主   lock_space: 82   lock_page: 3   lock_rec: 6   lock_data: 4

MySQL查询当前最新事务ID的方法