结构

mysql是基于硬盘的数据库,但是由于硬盘速度太慢所以使用内存来缓存部分数据以提高速度,因此mysql存储主要分为内存与硬盘两部分;

内存

buffer pool

缓冲池中包含索引页、数据页、undo页、插入缓冲(insert buffer)、自适应哈希索引(adaptive hash index)、InnoDB存储的锁信息(lock info)、数据字典信息(data dictionary)等。

freeList

fluList

lruList

lru算法

mysql为了避免频繁的刷数据或者把热数据从缓存中刷出去,对lru算法进行了一定优化
mysql将缓冲池分为了热数据(5/8)与冷数据(3/8)两部分 
1、对于读取的数据
 1、预读的放在冷数据的头部
 2、请求的数据直接放在热数据头部
2、如果冷数据被读取后放在热数据的头部

changeBuffer

adaptive Hash Index

log buffer

硬盘

table

mysql 默认事每个table单独一个文件 禁用innodb_file_per_table 可以让表都存在system tablespace

.frm文件保存了对应表的定义等元信息

索引

通常使用b-tree结构,但是空间索引使用r-tree

索引分为聚簇索引与第二索引

索引排序构建

1、扫描聚簇索引放入sort buffer,当缓冲区满了就写入临时文件
2、合并各个临时文件
3、将结果写入b-tree

在引入排序构建前都是一条一条插入会频繁引起树的的分裂与合并,效率低下

innodb_fill_factor 用于控制索引页预留空间(当设置为80时保留20%的空间,实际值可能不一致),以避免将来发生变更时减少页的分裂与合并,只会运用在索引上不会用在存放text与blob的也上

table space

system tablesapce

默认只有一个文件存放信息在数据目录下ibdata1

存放了 数据词典(不知道是啥。。。) 双写buffer、change buffer、undo logs以及创建在system tablespace中的表与索引

file-per-table tablespace、

general tablesapce

undo tablespace

存放undolog

temporary tablespace

用于存放临时表的空间,在停止服务时会删除,启动时会创建如果无法创建则mysql服务不会启动

double writebuffer

双写缓冲将数据冲 buffer pool写回磁盘是多写一份(顺序写入,并不是写回磁盘真正位置,由于顺序写所以开销不大),在刷盘崩溃后可以从此处回复数据

redolog

undolog

posted @ 2021-02-25 10:48  犬犬呀  阅读(51)  评论(0)    收藏  举报