暂时先放个脑图,后期会不断完善。。。
由于图片太大(5M),未能显示,建议下载看看,贼屌。
(下图概览,脑图已上传,地址)
-
InnoDB关键特性
-
- 缓冲池 - Buffer Pool
- 为什么会出现
- 是什么
- 架构
- 关键概念 - 数据页
- 怎么做的
- 服务器的内存大小很重要
- 缓冲池中缓存的数据页的类型
- 怎么识别数据在哪个缓冲页中
- 缓冲池实例
- Buffer Pool如何应对高并发场景
- Buffer Pool的初始化
- LRU List
- Free List
- Flush List
- 总结
- 日志缓冲区 - Log Buffer
- redo log buffer
- undo log buffer
- 变更缓冲区 - Change Buffer
- 简介
- 什么时候合并到数据页
- 在架构中的位置
- 作用
- 组成部分
- 参数配置
- 监控变更缓冲区
- 其他信息
- 额外内存池
- 缓冲池 - Buffer Pool
-
- 页逻辑存储结构
- 页的结构
- 页中插入数据的过程
- COMPACT行格式
- Page Directory
- Page Header
- File Header
- File Trailer
- 总结
- 页的结构
- 表 - table
- 索引 - index
- 聚簇索引和二级索引
- InnoDB索引的物理结构
- 排序索引的创建
- 表空间 - TableSpaces
- 系统表空间
- 每个表的表空间
- InnoDB内存中对 .ibd 文件的管理
- 数据字典和 .idb 文件的关系
- 通用表空间
- 创建通用表空间
- 撤销表空间
- 临时表空间
- 数据字典 - Data Dictionary
- 页逻辑存储结构
-
- 参数文件
- 作用
- 参数文件类型
- 参数类型
- 参数文件加载顺序
- 日志文件
- socket文件
- pid文件
- MYISAM引擎文件
- InnoDB常规表文件
- InnoDB Redo Log
- 概念及作用
- redo log的组成部分
- 内存中的 redo log buffer
- 磁盘上的 redo log file 文件
- 日志块 log block
- log group 和redo log file
- redo log格式
- 什么时候产生redo log?什么时候日志刷盘?
- 脏页刷盘机制
- 什么时候释放redo log
- InnoDB的恢复行为
- 举例
- 总结
- InnoDB Undo Log
- 了解几个概念
- 简介
- 作用
- 存储方式
- 关键结构体
- purge线程
- group commit
- 存储位置
- LSN
- 什么是 LSN
- 根据 LSN 能获得什么信息
- LSN 存在的位置
- 查看 LSN 信息
- 举例
- bin log 和 redo log 的区别
- bin log、redo log、undo log写入顺序 - 案例
- 参数文件
-
- latch - 线程锁
- 简介
- 作用
- 举例
- 如何查看
- 分类
- latch争用发生的原因
- 如何降低latch争用
- InnoDB Buffer Pool并发控制加锁过程
- lock - 事务锁 介绍
- 简介与latch区别
- 加锁位置
- 加锁原则
- latch 和 lock 的区别
- lock分类
- lock加锁案例分析
- 不同SQL加的不同lock锁
- 死锁
- 死锁简单案例
- 死锁本质
- InnoDB死锁实例
- 死锁必要条件
- InnoDB死锁检测
- 死锁检测机制 - wait-for graph
- 禁用死锁检测
- 如何避免死锁
- latch - 线程锁
参考文献:
MySQL官方网站
阿里数据库月报
阿里云开发者社区
《高性能MySQL 第3版》
《MySQL技术内幕 InnoDB存储引擎》
简书博客
CSDN博客
知乎
其他博客
本文一些知识点未深入研究,链接摘录如下,感兴趣可以继续研究。
延申阅读:
关于本文文件结构如下
- mysql-image : 所有图片都会保存到这里,根据 .md 文件的排序命名
- mysql-optimization : MySQL优化的相关总结
- mysql-others : MySQL其他,包含所有脑图
- mysql-storage-engines : MySQL中的存储引擎,如 InnoDB 、MYISAM等