搜索
写经验 领红包
 > 动物

mysql锁等待(mysql会话是什么意思)

导语:详解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

2.The INFORMATION_SCHEMA INNODB_TRX Table

3.The INFORMATION_SCHEMA INNODB_LOCK_WAITS Table

4.The INFORMATION_SCHEMA INNODB_LOCKS Table

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

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

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小涵创作整理编辑!