暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 核心模块揭秘 | 专栏合集

180

作者:操盛春,爱可生技术专家,公众号『一树一溪』作者,专注于研究 MySQL 和 OceanBase 源码。
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。




✍ 作者的话

从发布专栏 第一篇 文章开始,专栏已经连载了一年,完成了 3 个模块的文章连载。按最初的计划,还剩下 MVCC 和 Redo 两个模块。

目前 AI 发展的热火朝天,试用之后,深感本人的学习能力在 AI 面前太弱了 🤣,写作文章的生产力也被甩了几百条大街。

本着与时俱进的原则,也为了能够提高生产力,我接下来会投入更多业余时间学习 AI,专栏会先暂停一段时间,具体多长时间不能确定。等到某天我觉得能和 AI 协同工作和写文章了,再和 AI 一起完成剩下两个模块的文章连载。

感谢各位读者过去一年对专栏的支持,期待未来再见 👋

1. 事务模块

01 期事务池和管理器的初始化
👆 事务池和管理器是事务模块的基石,把它们的初始化过程作为专栏的第一篇文章,再合适不过了。

02 期BEGIN 语句会马上启动事务吗?
👆 这篇文章介绍了开启一个事务的各种 SQL 语句,并且以 BEGIN 为代表,介绍了开始一个事务的过程。

03 期我是一个事务,请给我一个对象
👆 事务在内存中需要有一个东西承载,这个东西就是事务对象。这篇文章介绍了分配事务对象的过程。

04 期终于要启动事务了
👆 事务有了栖身之地以后,启动前的准备工作已经就绪,待到需要时就可以启动了。这篇文章介绍了事务的启动过程。

05 期读事务和只读事务的变形记
👆 事务有不同的身份,比如读事务、只读事务、读写事务。这篇文章介绍了读事务、只读事务的身份什么时候会发生变化,以及会发生什么样的变化。

06 期事务提交之前,binlog 写到哪里?
👆 事务执行过程中产生的 binlog 日志,写入 binlog 日志文件之前,需要有个临时存放的地方。这篇文章介绍了事务执行过程中 binlog 日志会临时存放到哪里,以及怎么存放。

07 期二阶段提交 (1) prepare 阶段
08 期二阶段提交 (2) commit 阶段
09 期二阶段提交 (3) flush、sync、commit 子阶段
10 期binlog 怎么写入日志文件?
11 期InnoDB 提交事务,提交了什么?
👆 二阶段提交分为 prepare、commit 两个阶段,commit 阶段又分为 flush、sync、commit 三个子阶段。

上面五篇文章介绍了二阶段提交的整个过程:

  • 前三篇介绍了二阶段提交的本身。
  • 第四篇介绍了 flush 子阶段从临时存放处读取 binlog 日志,写入 binlog 日志文件的过程。
  • 第五篇介绍了 InnoDB 存储引擎层提交事务的过程。

12 期创建 savepoint
13 期回滚到 savepoint
👆 我们日常使用 MySQL,很少用到 savepoint,但是 MySQL 内部用的却不少。

例如:插入、更新记录导致唯一索引冲突时,已经插入到主键索引的记录需要删除,就会用到 savepoint。

上面两篇文章介绍了创建 savepoint、回滚到 savepoint 的过程。

14 期回滚整个事务
👆 回滚整个事务,属于我们经常用到的功能,这篇文章介绍了回滚整个事务的过程。

15 期事务小结

2. 锁模块

16 期InnoDB 表锁
👆介绍了 InnoDB 的几种表锁。

17 期InnoDB 有哪几种行锁?
👆介绍了 InnoDB 的几种行锁(实际上是行锁的锁模式、精确模式)。

18 期锁在内存里长什么样?
👆介绍了 InnoDB 的表锁结构和行锁结构。

19 期锁模块里有什么?长什么样?
👆介绍了锁模块全局对象的各属性及初始化。

20 期怎么加表锁?
👆介绍了 InnoDB 加表锁的主要流程。

21 期行锁 (1) 快速加锁
22 期行锁 (2) 慢速加锁
👆这两篇介绍了 InnoDB 加行锁的主要流程。

23 期锁等待
👆介绍了后台线程处理锁等待的主要流程。

24 期锁等待超时
👆介绍了后台线程处理锁待锁超时的主要流程。

25 期死锁(1)准备工作
26 期死锁(2)发现死锁
27 期死锁(3)解决死锁
👆这三篇介绍了后台线程解决死锁的流程。

28 期什么时候释放锁?
👆介绍了 InnoDB 释放行锁和 AUTO-INC 锁的时机。

29 期授予锁
👆介绍了 InnoDB 获得表锁和行锁的两种场景。

30 期死锁日志详解
👆详细解释了死锁日志的各项输出表示的意思。

31 期隐式锁
👆介绍了什么是隐式锁,怎么判断记录上存在隐式锁,以及隐式锁什么时候转换为显式锁。

32 期插入记录,主键索引冲突加什么锁?
33 期RR 隔离级别插入记录,唯一索引冲突加什么锁?
34 期RC 隔离级别插入记录,唯一索引冲突加什么锁?
35 期主键索引等值查询加什么锁?
36 期非唯一索引等值查询加什么锁?
37 期主键索引范围查询加什么锁?
38 期非唯一索引范围查询加什么锁?
39 期死锁案例分析(1)插入意向锁
40 期insert on duplicate 加锁分析(1)
41 期insert on duplicate 加锁分析(2)
42 期insert on duplicate 加锁分析(3)
👆这十二篇分析了各种场景下,InnoDB 会加哪些行锁,以及为什么要加这些行锁。

3. Undo 模块

44 期Undo 表空间
👆介绍了 Undo 模块的重要概念,包括 Undo 表空间、回滚段、Undo 段、Undo 页。

45 期分配回滚段
👆介绍了回滚段的内存结构,以及分配用户普通表和用户临时表回滚段的流程。

46 期分配 Undo 段
👆介绍了从两个 Undo 段缓存链表(insert_undo_cached
update_undo_cached
)中分配回滚段、创建新的回滚段的流程。

47 期插入记录的 Undo 日志
48 期Insert 插入的记录,Rollback 怎么回滚?
👆这两篇介绍了 INSERT 语句插入记录产生的 Undo 日志格式,以及回滚操作的流程。

49 期更新记录的 Undo 日志
50 期Update 更新的记录,Rollback 怎么回滚?
👆这两篇介绍了 UPDATE 语句更新记录产生的 Undo 日志格式 ,以及回滚操作的流程。

52 期删除记录的 Undo 日志
53 期DELETE 删除的记录,ROLLBACK 怎么回滚?
👆这两篇介绍了 DELETE 语句删除记录产生的 Undo 日志格式,以及回滚操作的流程。

54 期事务提交了,Undo 日志怎么办?
👆介绍了事务提交过程中,INSERT UNDO 段和 UPDATE UNDO 段的处理流程。

如果有什么话想对作者说,欢迎文末留言~


以下是作者的个人公众号和联系方式,欢迎交流。


公众号一树一溪微信csch52

文章转载自爱可生开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论