mysql的锁机制实现原理

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: mysql的锁机制实现原理

Innodb的锁机制

   

    innodb中有行锁、间隙锁、表锁。其中表锁属于server层实现,不同的存储引擎都有表锁。而行锁、间隙锁属于存储引擎层的实现,只有innodb引擎才有。

   表锁的实现

   在server层,每个表都有一个表对象。这个表对象中有两个链表,分别为获取到的列表和等待获取锁的列表。线程获取到锁时先创建一个MDL_ticket对象,记录获取锁的线程、事务id、线程id、锁类型(共享锁(S锁)或排他锁(X锁))等信息,然后将这个对象加入到获取到的列表中。未获取到锁的线程则将MDL_ticket对象添加到等待获取锁的列表,阻塞线程。

   行锁的实现

   行锁和间隙锁是innodb中的特性,间隙锁是行锁的特殊形式。他们都是以行锁的记录存于innodb的全局锁哈希表中,key为表空间ID、页号和记录号。value为锁对象。锁对象包含了锁的类型(共享锁、排他锁、间隙锁等)、被锁定的记录以及锁定该记录的事务信息。行锁的实现主要由全局锁哈希表和锁等待队列配合完成工作。线程在获取行锁时,如果在全局锁哈希表中未检查到锁冲突,则生成对应的锁对象添加到全局锁哈希表中。如果产生了锁冲突,则将当前事务的锁请求放入锁定队列。如果在等待未超时期间锁被释放,则从锁定队列中取出一个事务获取锁,否则,一旦等待超时,则事务被回滚。

总结: 一个请求过来时,会先到达server层检查是否有表锁冲突,然后进入存储引擎层判断是否有行锁冲突。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
2月前
|
关系型数据库 MySQL
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】一文带你搞懂MySQL中的各种锁
【MySQL】一文带你搞懂MySQL中的各种锁
60 0
|
1月前
|
存储 关系型数据库 MySQL
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
最全MySQL面试60题(含答案):存储引擎+数据库锁+索引+SQL优化等
178 0
|
2月前
|
SQL 关系型数据库 MySQL
Mysql事务隔离级别和锁特性
Mysql事务隔离级别和锁特性
|
20小时前
|
SQL 存储 关系型数据库
MySQL锁详解
MySQL锁详解
4 0
|
1天前
|
算法 关系型数据库 MySQL
|
2天前
|
SQL 关系型数据库 MySQL
MySQL 锁
MySQL 锁
|
8天前
|
关系型数据库 MySQL 索引
MySQL 锁机制
MySQL 锁机制
7 0
|
16天前
|
关系型数据库 MySQL 数据库
MySQL锁三部曲:临键、间隙与记录的奇妙旅程
MySQL锁三部曲:临键、间隙与记录的奇妙旅程
18 0