概述
今天主要介绍MySQL会话锁等待关系原理。一般来说,如果要理解mysql会话依赖关系的话,主要是理解锁等待相关四张表的关系。
这里的主要逻辑是:先查询当前会话持有哪些事务的锁和依赖哪些事务的锁,通过这两种锁就可以得到一种图关系。
一、查询当前会话持有的锁
步骤如下:
1. 查询当前会话processlist.id
2. processlist.id对应innodb_trx表中的TRX_MYSQL_THREAD_ID,这样就可以查询到当前会话的事务id
3. 到lock_waits中查询,其中blocking_trx_id 为当前会话的事务id,这样就获得了当前会话的持有lock_id
4. 根据lock_id到innodb_lock可以查询出当前会话持有锁信息。
其实如果只需要查询会话的依赖的关系不需要知道锁信息的话,到第三步就可以了,通过第三步的REQUESTING_TRX_ID来反查innodb_trx表获取trx_id,反查processlist表就可以得到被当前会话阻塞的会话列表。
二、查询当前会话正等待的锁
步骤如下:
1. 查询当前会话processlist.id
2. processlist.id对应innodb_trx表中的TRX_MYSQL_THREAD_ID,这样就可以查询到当前会话的事务id
3. 到lock_waits中查询R