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

边栏推荐
猜你喜欢

jvm 二之 栈帧内部结构

21 days learning challenge 】 【 sequential search

Facebook社媒营销的5大技巧,迅速提高独立站转化率!

59:第五章:开发admin管理服务:12:MongoDB的使用场景;(非核心数据,数据量比较大的非核心数据,人脸照片等隐私的小文件;)

Mysql报错2003 解决办法 Can‘t connect to MySQL server on ‘localhost‘ (10061)

埋点开发流程

新产品立大功 伟世通第二季度营收双增

Redis 常用命令和基本数据结构(数据类型)

你认同这个观点吗?大多数企业的数字化都只是为了缓解焦虑

2022夏暑假每日一题(六)
随机推荐
根据一个字段的内容去更新另一个字段的数据,这样的sql语句该怎么样书写
LeetCode 2360. The longest cycle in a graph
LeetCode 2312. 卖木头块
spark架构
2022夏暑假每日一题(六)
带手续费买卖股票的最大利益[找DP的状态定义到底缺什么?]
实验7 MPLS实验
论文《Deep Multifaceted Transformers for Multi-objective Ranking in Large-Scale E-commerce Recommender》
【网络】IP、子网掩码
问个问题,我的Flinkcdc已经跑通了,可以监听msql的binlog了,也能发送kafk
聊天机器人如何提升独立站的营销水平?
结构体大小计算--结构体内存对齐
初探形式化方法基本原理
【机器学习】课程设计布置:某闯关类手游用户流失预测
【杂】pip换国内源教程及国内源地址
OC-范畴
OC-NSNumber和NSValue一般用来装箱拆箱
有趣的网站
正则表达式
实例032:反向输出II
