1. 数据页(dataPage)
什么是数据页?
数据页是 MySQL 存储引擎在磁盘和内存之间传输数据的基本单位,默认大小为16KB。
数据页的结构:
- 表头:储存与页相关的元信息,比如,页号,页类型。
- 数据行:存储实际的表格记录数据。
- 指针和链表:为了高效地访问数据,数据页中还包含了指向其他相关页的指针和链接。
什么是页分裂:
当数据页满了以后,无法再插入新的行时,数据库引擎会自动将该页分裂为两个页,以便容纳新的数据,将原始页的一部分移到新的数据页的另一部分,通过指针连接,从而保证索引的有序和高效性。
2. 缓存页(bufferPool)
什么是缓存页?
bufferPool是基于内存的,而mysql数据是存储在磁盘中,将数据以数据页的形式缓存在bufferPool中,可以很大的提升读写效率。Buffer Pool 以页为单位缓冲数据,可以通过 innodb_buffer_pool_size 参数调缓冲池的大小,默认是 128 M。
缓存页的数据结构?
innodb通过以下三种链表来管理缓存页
Free List(空闲页链表):管理空闲页;
Flush List(脏页链表):管理脏页;
LRU List,管理脏页加干净页,将最近且经常查询的数据缓存在其中,而不常查询的数据就淘汰出去。
脏页什么时候会被刷入磁盘?
1、redo log日志满的时候,会主动触发脏页刷新到磁盘;
2、Buffer Pool空间不足时,需要将一部分数据页淘汰掉,如果淘汰的是脏页,会将脏页刷新到磁盘;
3、Mysql认定空闲的时候,会定期将脏页同步到磁盘;
4、在Mysql关闭之前,会将脏页全部刷入磁盘。
ps:以下是我整理的java面试资料,密码是obht,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!
链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》