技术分享 | 什么情况下 MySQL 连查询都能被阻塞?

技术分享 | 什么情况下 MySQL 连查询都能被阻塞?-1

作者:贾特特,MySQL DBA 从业者,公众号『数据库运维札记』作者,目前任职于某游戏公司担任DBA工程师

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 2000 字,预计阅读需要 8 分钟。


MySQL 的锁也是不少,在哪种情况下会连查询都能被阻塞?这是一个有意思的问题。

工作中,很多开发和 DBA 可能接触较多的锁也就行锁了。对于行锁,阻塞写能理解,阻塞读实在是想不到。能阻塞读的那肯定是颗粒度更大的锁了,比如表级别的。

本文操作环境为 MySQL 8.0。

1MySQL 表级锁有两种实现
  1. 服务器(SERVER)层:本层的锁定主要是元数据锁(metadata lock,MDL)。
  2. 存储引擎(ENGINE)层:本层不同的存储引擎可能会实现不同的锁定策略。例如 MyISAM 引擎实现了表级锁,InnoDB 存储引擎实现了行级锁和表级锁,其中表级锁是通过意向锁体现的。