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

边栏推荐
猜你喜欢
随机推荐
有趣的网站
分离轴定理SAT凸多边形精确碰撞检测
根据一个字段的内容去更新另一个字段的数据,这样的sql语句该怎么样书写
论文《Deep Multifaceted Transformers for Multi-objective Ranking in Large-Scale E-commerce Recommender》
新产品立大功 伟世通第二季度营收双增
线程的创建方式
Splunk Filed Alias 字段改名
Link with Game Glitch(spfa判负环)
实例027:递归输出
聊天机器人如何提升独立站的营销水平?
倍福使用AdsRemote组件实现和C#的ADS通讯
Go 实现分布式锁
FaceBook社媒营销高效转化技巧分享
概率论与数理统计
21 days learning challenge 】 【 sequential search
【CNN回归预测】基于matlab卷积神经网络CNN数据回归预测【含Matlab源码 2003期】
交换--STP协议
逆变器绝缘检测检测功能及软件实现
【机器学习】实验6布置:基于集成学习的Amazon用户评论质量预测
交换部分 VLAN










