参考博客:
https://my.oschina.net/wangzemin/blog/5346534 InnoDB之BufferPool
https://juejin.cn/post/7007421609900245000 InnoDB - 整体架构:内存结构与磁盘结构
https://www.cnblogs.com/detectiveHLH/p/14907405.html 数据页
https://mp.weixin.qq.com/s/D-4m5RZwOjhJpLytiJ5FdA InnoDB 内存结构及其原理
https://www.phpmianshi.com/?id=136 数据页相关概念
1.InnoDB中的缓存区叫innodb_buffer_pool,当读取数据时,就会先从缓存中查看是否数据的页(page)存在,不存在的话去磁盘上检索,查到后缓存到innodb_buffer_pool中。同理,插入、修改、删除也是先操作缓存里数据,之后再以一定频率更新到磁盘上,这个刷盘机制叫做Checkpoint。(脏页是没有写入磁盘的数据页数据)
2.MySQL默认的innodb_buffer_pool的大小是128M,我们可以通过以下命令查看innodb_buffer_pool的参数,执行结果如下图所示:
show variables like 'innodb_buffer_pool%';
3.查看缓存区状态 show global status like '%innodb_buffer_pool%';
4.数据页:默认16KB (InnoDB中管理数据的最小单元)
5.InnoDB内存结构:Buffer Pool、Change Buffer、Adaptive Hash Index和Log Buffer。
6.InnoDB磁盘结构:在磁盘中,InnoDB 将所有数据都逻辑地存放在一个空间中,称为表空间(Tablespace)。表空间由段(Segment)、区(extent)、页(Page)组成。
7.区由连续的页组成,大小固定为1MB,默认页大小为16KB,因此一个区默认存储64个连续的页。
8.行:InnoDB 是面向列(row-oriented)的关系存储引擎,因此数据是按行存储的。每个 Page 最多存放 7992 行记录。InnoDB 会为每个数据行前添加事务 ID 列(TransactionID,占 6 Byte)和回滚指针列(Roll Pointer,占 7 Byte),如果该表没有定义主键,则会选择第一个定义的非空唯一索引作为主键,若没有非空唯一索引则会在 TransactionID 前添加一列主键 ID 列(RowId,占 6 Byte)作为主键列。