InnoDB源码解析-日志系统

InnoDB源码解析-日志系统
MySQL 5.7中 Log Sys锁冲突比较大,MySQL 8.0对InnoDB Log Sys进行了重构。 我们先描述下5.7的 Log Sys看看锁冲突,然后再介绍8.0的方案以及部分代码实现细节。 mtr mtr 表示 mini-transaction,表示操作的一个最小原子单元,比数据库事务概念要更小。比如一个事务可能插入两行数据,但每插入一行都可能触发B-Tree的叶子分裂,页面的分裂操作涉及多个页面,这些页面的修改必须保持原子(不能发生分裂的第...

InnoDB源码解析-事务系统

InnoDB源码解析-事务系统
InnoDB事务系统负责InnoDB层事务管理,快照管理,MVCC等。 事务对象 InnoDB层事务对象为 struct trx_t 类型。 12345678910111213141516 // 部分字段struct trx_t {    trx_id_t id; // 事务开启序    trx_id_t no; // 事务提交序    trx_state_t state; // 事务状态  ...

InnoDB源码解析-存储管理层次

InnoDB源码解析-存储管理层次
InnoDB的存储层次 总的数据粒度:Row - Page - Extent - Segment - Tablespace。 数据格式 Row 行内容主要就是各列的值,外加一些flag信息。 Page Page(页面)是固定大小的物理存储块。Page有多种用途,既可以存放一组行记录,也可以存放存储管理元数据。 具体地,page类型相关的源码: ...

InnoDB源码解析-基础数据结构

InnoDB源码解析-基础数据结构
互斥锁 ib_mutex_t typedef FutexMutex ib_mutex_t;   UT_MUTEX_TYPE(TTASFutexMutex, GenericPolicy, FutexMutex); 这个宏定义展开是 typedef PolicyMutex<TTASFutexMutex<GenericPolicy>> FutexMutex;   PolicyMutex是个mutex框架,具体实现依赖模板参数MutexImpl。 1234567891011121314151617 templat...