当前位置:网站首页>MySQL-锁机制
MySQL-锁机制
2022-08-02 07:00:00 【kk_lina】
协调并发访问某一资源的机制。
一、并发问题的解决方案
如何解决脏读、不可重复读、幻读的问题?
1、方案一:读操作利用多版本并发控制,写操作进行加锁
生成一个ReadView,通过ReadView找到符合条件的记录版本。查询语句只能读到在生成ReadView之前已提交事务所做的更改,在生成ReadView之前未提交的事务或者之后才开启的事务所做的更改是看不到的。而写操作肯定针对的是最新版本的记录,读操作的历史版本和改动记录的最新版本本身并不冲突,也就是采用mvcc时,读-写操作并不冲突。
普通的select语句在read commited和repeatable read隔离级别下会使用到MVCC读取记录。
在read committed 隔离级别下,一个事务在执行过程中每次执行select操作时会生成一个ReadView,ReadView存在的本身就保证了事务不可以读取到未提交的事务所做的更改,也就避免了脏读现象;
在repeatable read隔离级别下,一个事务在执行过程中只有第一次执行select操作才会生成一个ReadView,之后的select复用这个ReadView,这样可以避免幻读和不可重复读的问题。
2、方案二:读写操作都采用加锁的方式
读写操作需要排队执行吗,影响性能。
二、锁的不同角度分类
- 锁监控
show status like 'innodb_row_lock%'
二、锁的内部结构
- 锁所在的事务信息:指针,通过指针找到内存中关于该事务的更多信息,例如事务的Id;
- 索引信息:指针,对于行锁来说,需要记录一下加锁的记录属于哪个索引;
- 表锁/行锁信息:space id:记录所在表空间,page number:记录所在页号,n_bits:用比特位来区分哪一条记录加锁,在行锁结构的末尾放置了一堆比特位,这个代表使用了多少比特位;
- type_mode:32位的数,分成了lock_mode,lock_type,rec_lock_type三个部分
边栏推荐
- 初探形式化方法基本原理
- WebGPU 导入[2] - 核心概念与重要机制解读
- JS初识高阶函数和函数柯里化
- 【机器学习】实验4布置:AAAI会议论文聚类分析
- “蔚来杯“2022牛客暑期多校训练营4,签到题NDKHL
- gdalinfo: error while loading shared libraries: libgdal.so.30: cannot open shared object file: No su
- 吃透Chisel语言.30.Chisel进阶之通信状态机(二)——FSMD:以Popcount为例
- 敏捷、DevOps和嵌入式系统测试
- mysql 注入
- About the SQL concat () function problem, how to splice
猜你喜欢
随机推荐
【云原生】如何快速部署Kubernetes
PWA 踩坑 - 第一次加载页面后无法获取CacheStorage某些资源
WebGPU 导入[2] - 核心概念与重要机制解读
【请教】SQL语句按列1去重来计算列2之和
ADS通信--倍福PLC和C#TextBox控件实现数据绑定的方法
【机器学习】实验4布置:AAAI会议论文聚类分析
Find the largest n files
OC-Category
飞桨paddle技术点整理
【CV】OpenVINO安装教程
初探形式化方法基本原理
修改apt-get源为国内镜像源
实例027:递归输出
gdalinfo: error while loading shared libraries: libgdal.so.30: cannot open shared object file: No su
LeetCode 2360. 图中的最长环
张驰课堂:六西格玛培训工具——箱线图
Analysis of GCC compiler technology
OC-NSSet(集合)
_2_顺序表
自然语言处理 文本预处理(上)(分词、词性标注、命名实体识别等)