MySQL架构
MySQL架构
连接池
连接池的作用是复用连接,避免频繁 create, destroy。
分析器
分析器就是解析 SQL 语句。
优化器
优化器会分析 SQL 语句并对其优化。
执行器
执行器会调用存储引擎的接口来执行 SQL 语句。
存储引擎
MySQL 有多重存储引擎,用于不同场景。
- InnoDB(最常用)
- MyISAM
- Memory
- CSV
- Archive
- Blackhole
- Merge
- Federated
- Example
存储引擎就是 MySQL 对于内存和磁盘的读写策略。
InnoDB 包括了:Buffer Pool(数据存储在其中)和 Log Buffer
Buffer Pool
MySQL 服务器的内存基本都会分配给 Buffer Pool,可以提升 MySQL 的性能。
页
Buffer Pool 以页为单位存储。
一页包含了:
- 上一页,下一页两个指针
- User Record(真正存储信息的地方,是一行一行的数据)
- 其余字段
其余字段包含了:
- Infimum 和 Supremum:此页中最大和最小的记录,用于做初步判断。
- Page Directory:页面目录,用于快速查找记录。
索引
InnoDB 底层采用的存储结构是 B 树和 B+树。
更新数据
更新数据时,数据不一定在 buffer pool 中,因为不可能数据库中所有的数据都一直在内存中。
对于聚簇索引:如果数据不在 buffer pool 中,就会将其先加载到内存中再更新。
对于非聚簇索引:change buffer。
过期策略
MySQL 使用的 LRU 算法的改进版,改进 LRU 算法是为了避免缓冲池污染(先前在 buffer pool 中的页被全部换出去,造成性能下降)
Log Buffer
用于存储即将被写入到磁盘中的日志。