认识MySQL

内部结构

MySQL - 图1

  • 连接器

管理连接 权限验证

  • ~~查询缓存(1.8-) ~~

kv存储,k是查询语句,v是查询结果。
以表为粒度,对表的更新操作都会导致缓存失效,因此使用查询缓存弊大于利 8.0去掉了查询缓存

  • 分析器

词法分析 语法分析

  • 优化器

RBO 基于规则的优化
CBO 基于成本的优化

  • 执行器

操作引擎 和存储引擎 交互,返回结果, 存储引擎仅存储,执行器做计算

redolog/binlog/undolog

表的逻辑结构

Innodb的逻辑结构

image.png

  • 表空间
    • 数据段 索引的叶子节点
    • 索引段 索引的非叶子节点
    • 回滚段 用来存储undo日志

区是连接的页组成的空间,每个区固定大小1M,为保证区中页的连续性,Innodb会一次从磁盘申请4-5个区,一个区可以容纳64个连续的页。
新建表时,空表默认96k,是由于为了高效的利用磁盘空间。在开始插入数据时表会先利用32个页大小的碎片页来存储数据,当用完了,才以M的倍数来增加。

页是Innodb存储引擎的最小管理单元,每页默认是16k。innodb1.2可以利用innodb_page_size来改变页的size,但是改变只能在初始化innodb实例前进行修改,之后便无法进行修改,除非创建新库。常见的页有:

  • 数据页
  • undo页
  • 系统页
  • 事务数据页
  • 插入缓冲位图页、插入缓冲空闲列表页
  • 未压缩、压缩的二进制大对象页

行对应的表中行记录,每页存储的最多行记录也有硬性规定,最多16kb/2 - 200 = 7992行
行记录格式:

  1. - Compact行格式

image.png

  1. - Dynamic格式

image.png

参考资料

mysql性能压力测试