文章 2024-05-10 来自:开发者社区

10个行锁、死锁案例⭐️24张加锁分析图彻底搞懂Innodb行锁加锁规则!

10个行锁、死锁案例⭐️24张加锁分析图彻底搞懂Innodb行锁加锁规则! 上篇文章 我们描述原子性与隔离性的实现,其中描述读操作解决隔离性问题的方案时还遗留了一个问题:写操作是如何解决不同的隔离性问题? 本篇文章将会解决这个问题并描述MySQL中的锁、总结Innodb中行锁加锁规则、列举行锁、死锁案例分析等 再阅读本篇文章前,至少要理解查询使用索引的流程、mvcc等知识...

10个行锁、死锁案例⭐️24张加锁分析图彻底搞懂Innodb行锁加锁规则!
文章 2022-10-27 来自:开发者社区

从一个案例深入剖析InnoDB隐式锁和可见性判断(4)

五、关于锁的判定5.1 lock_sec_rec_read_check_and_lock函数主要用于二级索引数据查找段阶段加显示锁,,对于update/delete而言,首先是需要找到需要修改的数据,加锁前需要判断本记录是否存在隐式锁,由于二级索引行数据不包含trx id,因此先用page的max trx id和当前活跃的最小读写事务进行比对判断,如果大于等于则可能存在显示锁,然后需要回表通过主....

文章 2022-10-27 来自:开发者社区

从一个案例深入剖析InnoDB隐式锁和可见性判断(3)

4.3 delete语句通过二级索引删除数据TIMES1S2T1begin;delete from testimp4 where b=9999;(不提交)T2select * from testimp4 where d='a' for update#T1时刻S1锁状态: ---TRANSACTION 94501, ACTIVE 109 sec 3 lock struct(s), heap siz....

文章 2022-10-27 来自:开发者社区

从一个案例深入剖析InnoDB隐式锁和可见性判断(2)

4、关于page的max trx id我们上面多次提到二级索引page的max trx id,这个max trx id实际就是PAGE_MAX_TRX_ID,它位于page的offset 56后的8个字节,实际上这个值只会存在于二级索引上,主键没有这个值,我们可以看到如下:表结构和数据 mysql> show create table testimp4 \G ***************....

从一个案例深入剖析InnoDB隐式锁和可见性判断(2)
文章 2022-10-27 来自:开发者社区

从一个案例深入剖析InnoDB隐式锁和可见性判断(1)

一、问题抛出最近遇到一个问题,得到栈如下(5.6.25):出现这个问题的时候只存在一个读写事务,那就是本事务。对这里的红色部分比较感兴趣,但是这里不是所有的内容都和这个问题相关,主要还是围绕可见性判断和隐式锁判定进行,算是我的思考过程。但是对Innodb认知水平有限,如有误导请谅解。使用的源码版本5.7.29。二、read view 简述关于read view说明的文章已经很多了,我这里简单记录....

从一个案例深入剖析InnoDB隐式锁和可见性判断(1)
文章 2022-10-19 来自:开发者社区

[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响

本次,我们通过对比,明明白白的知道索引、提交频率对InnoDB表写入速度的影响,了解有哪些需要注意的。先直接说几个结论吧:1、关于索引对写入速度的影响:a、如果有自增列做主键,相对完全没索引的情况,写入速度约提升 3.11%;b、如果有自增列做主键,并且二级索引,相对完全没索引的情况,写入速度约降低 27.37%;因此,InnoDB表最好总是有一个自增列做主键。2、关于提交频率对写入速度的影响(....

[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
文章 2022-10-19 来自:开发者社区

[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率

首先,介绍下关于InnoDB引擎存储格式的几个要点:1、InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理、维护。启用 innodb_file_per_table 选项,5.5以后可以在线动态修改生效,并且执行 ALTER TABLE xx ENGINE = InnoDB 将现有表转成独立表空间,早于5.5的版本,修改完这个选项后,需要重启才能生效;2、Inno....

[MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
文章 2022-02-17 来自:开发者社区

从一个案例深入剖析InnoDB隐式锁和可见性判断(4)

五、关于锁的判定5.1 lock_sec_rec_read_check_and_lock函数主要用于二级索引数据查找段阶段加显示锁,,对于update/delete而言,首先是需要找到需要修改的数据,加锁前需要判断本记录是否存在隐式锁,由于二级索引行数据不包含trx id,因此先用page的max trx id和当前活跃的最小读写事务进行比对判断,如果大于等于则可能存在显示锁,然后需要回表通过主....

文章 2022-02-17 来自:开发者社区

从一个案例深入剖析InnoDB隐式锁和可见性判断(3)

4.3 delete语句通过二级索引删除数据TIMES1S2T1begin;delete from testimp4 where b=9999;(不提交)T2select * from testimp4 where d='a' for update#T1时刻S1锁状态: ---TRANSACTION 94501, ACTIVE 109 sec 3 lock struct(s), heap siz....

文章 2022-02-17 来自:开发者社区

从一个案例深入剖析InnoDB隐式锁和可见性判断(2)

4、关于page的max trx id我们上面多次提到二级索引page的max trx id,这个max trx id实际就是PAGE_MAX_TRX_ID,它位于page的offset 56后的8个字节,实际上这个值只会存在于二级索引上,主键没有这个值,我们可以看到如下:表结构和数据 mysql> show create table testimp4 \G ***************....

从一个案例深入剖析InnoDB隐式锁和可见性判断(2)

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。