MySQL架构

MySQL架构

MySQL架构

mysql-arch

连接池

连接池的作用是复用连接,避免频繁 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

用于存储即将被写入到磁盘中的日志。

评论