“Let’s go”
MySQL体系结构
连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲(Cache)组件
插件式存储引擎
物理文件
InnoDB体系结构
后台线程
InnoDB存储和引擎内存池
文件
后台线程
Master Thread
- 主循环(loop)
- 后台循环(backgroud loop)
- 刷新循环(flush loop)
- 暂停循环(suspend loop)
IO Thread
Purge Thread
Page Cleaner Thread
内存
缓冲池
缓冲池中缓存的数据页类型有:索引页、数据页、undo页、插入缓冲、自适应hash索引、InnoDB存储的锁信息、数据字典信息等
LRU List、Free List和Flush List
插入缓冲(Insert Buffer)
- Insert Buffer
- Change Buffer 对DML操作————INSERT、DELETE、UPDATE都进行缓冲
两次写(Double Write)
自适应hash索引(Adaptive Hash Index)
异步IO(Async IO)
刷新邻接页(Flush Neighbor Page)
Checkpoint机制
1.Sharp Checkpoint 数据库关闭时刷回所有脏页
2.Fuzzy Checkpoint
- Master Thread Checkpoint
- FLUSH_LRU_LIST Checkpoint
- Async/Sync Flush Checkpoint
- Dirty Page too much Checkpoint
表
表空间
启用innodb_file_per_table,每张表的表空间内存放的只是数据、索引和插入缓冲Bitmap页,
其他类的数据,如回滚(undo)信息,插入缓冲索引页、系统事务信息,二次写缓冲等还是存放在原来的共享表空间内。
段
表空间由各个段组成,常见的段有数据段、索引段、回滚段等。
区
区是连续页组成的空间,在任何情况下每个区的打小都为1MB。为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4-5个区。 默认情况下,InnoDB存储引擎页的大小为16KB,即一个区中有64个连续的页。
用户开启innodb_file_per_table后,创建的表默认大小是96KB。每个段开始,先用32个页大小的碎片页来存放数据,使用完
这些页之后才是64个连续页的申请。
页
InnoDB存储引擎页的大小为16KB
- 数据页(B-tree Node)
- undo页(undo Log Page)
- 系统页(System Page)
- 事务数据页(Transaction system Page)
- 插入缓冲位图页(Insert Buffer Bitmap)
- 插入缓冲空闲列表页(Insert Buffer Free List)
- 未压缩的二进制大对象页(Uncompressed BLOB Page)
- 压缩的二进制大对象页(compressed BLOB Page)
行
InnoDB存储引擎是面向列的,也就是说数据是按行进行存放的。每个页a存放嗯的行记录是有硬性定义的,最多允许存放
16KB / 2 -200 行的记录,即7992行记录。
行记录格式:
- Compact
- Redundant
知识盲点
1.内存缓冲池,checkpoint机制
2.根据每个数据库系统实现的不同,日志可分为以下几种类型:
physical logging
logical logging
physiological logging