详解MySQL会话锁等待关系原理--4张核心表

概述

今天主要介绍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中查询REQUESTING_TRX_ID为当前会话的事务id,这样就获得了当前会话的正等待lock_id

4. 根据lock_id到innodb_lock可以查询出当前会话正在等待的锁信息。

同样,其实如果只需要查询会话的依赖的关系不需要知道锁信息的话,到第三步就可以了,通过第三步的blocking_trx_id来反查innodb_trx表获取trx_id,反查processlist表就可以得到被当前会话等待的锁被哪些会话占用了。


核心的4张表

下面列出关于锁的核心表部分表结构:

1.INFORMATION_SCHEMA.PROCESSLIST

The PROCESSLIST table provides information about which threads are running.

INFORMATION_SCHEMA Name SHOW Name Remarks

详解MySQL会话锁等待关系原理--4张核心表

2.The INFORMATION_SCHEMA INNODB_TRX Table

详解MySQL会话锁等待关系原理--4张核心表

3.The INFORMATION_SCHEMA INNODB_LOCK_WAITS Table

详解MySQL会话锁等待关系原理--4张核心表

4.The INFORMATION_SCHEMA INNODB_LOCKS Table

详解MySQL会话锁等待关系原理--4张核心表


篇幅有限,这里就不用实验测试了,大家也可以简单模拟一下死锁,然后再去查这4张表,加深下印象。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

详解MySQL会话锁等待关系原理--4张核心表

相关推荐