mysql的锁机制实现原理

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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
相关文章
|
21天前
|
关系型数据库 MySQL 数据库
【MySQL实战笔记】 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?-01
【4月更文挑战第17天】MySQL的锁分为全局锁、表级锁和行锁。全局锁用于全库备份,可能导致业务暂停或主从延迟。不加锁备份会导致逻辑不一致。推荐使用`FTWRL`而非`readonly=true`因后者可能影响其他逻辑且异常处理不同。表级锁如`lock tables`限制读写并限定操作对象,常用于并发控制。元数据锁(MDL)在访问表时自动加锁,确保读写正确性。
70 31
|
1月前
|
关系型数据库 MySQL 数据库
数据安全之路:深入了解MySQL的行锁与表锁机制
数据安全之路:深入了解MySQL的行锁与表锁机制
19 1
|
3天前
|
存储 算法 关系型数据库
MySQL事务与锁,看这一篇就够了!
MySQL事务与锁,看这一篇就够了!
|
4天前
|
存储 关系型数据库 MySQL
MySQL数据库锁定机制
MySQL数据库锁定机制
11 0
|
8天前
|
存储 关系型数据库 MySQL
MySQL的锁机制
MySQL的锁机制主要用于管理并发事务对数据的一致性和完整性的访问控制
25 4
|
13天前
|
存储 SQL 关系型数据库
|
16天前
|
关系型数据库 MySQL 数据库
MySQL锁解密:读锁与写锁
【4月更文挑战第20天】
24 1
|
16天前
|
关系型数据库 MySQL 数据库
|
16天前
|
算法 关系型数据库 MySQL
|
16天前
|
SQL 关系型数据库 MySQL
MySQL锁:解析隐式锁与显式锁
【4月更文挑战第20天】
38 0