当前位置:网站首页>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三个部分

边栏推荐
猜你喜欢
随机推荐
LeetCode 2312. 卖木头块
实例026:递归求阶乘
【论文精读】Geometric Structure Preserving Warp for Natural Image Stitching
FaceBook社媒营销高效转化技巧分享
2022.07.31(LC_6132_使数组中所有元素都等于零)
spark架构
查看僵尸进程
LeetCode刷题(7)
MPLS的相关技术
_2_顺序表
解决Pytorch模型在Gunicorn部署无法运行或者超时问题
逆变器锁相原理及DSP实现
张驰课堂:六西格玛测量系统的误差分析与判定
Find the largest n files
【ROS基础】map、odom、base_link、laser 的理解 及其 tf 树的理解
Agile, DevOps and Embedded Systems Testing
【机器学习】实验5布置:AAAI会议论文聚类分析
修改apt-get源为国内镜像源
实例032:反向输出II
Go implements distributed locks










