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...

Rethink the Scan in MVCC Databases

Rethink the Scan in MVCC Databases
这是SIGMOD'21 上的论文《Rethink the Scan in MVCC Databases》,论文针对像HTAP等场景下可能出现大量versioned data中执行scan慢的问题提出了一种比较有效的方案。   Scan性能问题 首先,论文看到了这种场景下scan慢的一个重要原因: Scan的时候,每一个key都要分别从自己的多个版本里面做一次线性查找,找到当前读快照可见的版本。   这个过程中假如有一种ridgy pointer,用于从key A的可见...

REMIX: Efficient Range Query for LSM-trees

REMIX: Efficient Range Query for LSM-trees
  《REMIX: Efficient Range Query for LSM-trees》FAST'20 LSM-Tree引擎的scan操作是一个引擎固有的短板,其根源在于相比基于B+Tree的引擎如InnoDB的数据全局有序,LSM-Tree的数据有序性差,它由多个sort run组成,因此scan的时候需要对多个sort run进行merge。 考虑如下的情况,比如做一次全表扫描,扫描过程中对若干sort run进行了merge。但再有一次全表扫描时,还是需要进行一次merge。两次merge...

阿里LSMTree存储引擎X-Engine

阿里LSMTree存储引擎X-Engine
  X-Engine是阿里云研发的LSM-Tree结构的存储引擎,主打低存储成本带来的性价比。   问题 the tsunami problem 海啸问题:122倍突发流量 the flood discharge problem 泄洪问题:将内存数据快速转到持久化存储组件 the fast-moving current problem 快变洋流问题:热点行变化快 架构 优化总结 读路径优化 Extent Cache 多版本SuperVersion 增量cache替换 写路径优化 memtable热点行优化 ...

MyRocks in Facebook UDB

MyRocks in Facebook UDB
MyRocks Paper《MyRocks: LSM-Tree Database Storage Engine Serving Facebook's Social Graph》 这篇文章介绍了Facebook为了解决UDB数据库成本迁移MyRocks的挑战和解决方案。   Introduction 迁至MyRocks所遇到的挑战 在Facebook UDB场景下,MyRocks将存储空间压缩了一半,因此实例数目减半,也意味着UDB集群的CPU和IO硬件资源减半。 Range Scan的Forward和Backward性能不一样,这个主要是底层数据...

RocksDB演进

RocksDB演进
《Evolution of Development Priorities in Key-value Stores ServingLarge-scale Applications: The RocksDB Experience》FAST'20 这篇文章是讲述Facebook大规模部署RocksDB的经验,主要是RocksDB优化目标的演变。 RocksDB应用比较广,除了作为KV产品服务业务,也在很多其他系统中作为存储组件。 Streaming Processing: Flink, Kafaka Stream, Samba, Facebook's Stylus. Logging/Queuing Service: Fa...

LSMTree自适应内存管理

LSMTree自适应内存管理
LSMTree自适应内存管理 Breaking Down Memory Walls: Adaptive Memory Managementin LSM-based Storage Systems(VLDB'21) 内存管理整体架构比较清晰,如图,无需赘言。 Write Memory内存管理 Write Memory的管理方式见下图。 像RocksDB的Write Memory就是一整个memtable,论文给出了另外一个思路,即使是write memory也用leveled方式,如图。Memory也分成M0,M1,M2三层,M0满则merge到M1,同理M1 merg...