数据页和缓存页(BufferPool)

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面试宝典》

相关推荐
左左右右左右摇晃1 分钟前
Java并发——Lock锁
java·开发语言·笔记
森林里的程序猿猿1 分钟前
导致内存泄漏的ThreadLocal详解
java·jvm·数据结构
wangchunting3 分钟前
Java设计模式
java·单例模式·设计模式
gechunlian883 分钟前
数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表
数据库·mysql·oracle
堕2748 分钟前
MySQL数据库《基础篇--数据库JDBC编程》
数据库·mysql
Dream_sky分享8 分钟前
Excel模板下载(Resources目录下)
java·spring boot·后端
西海天际蔚蓝10 分钟前
线上环境接口访问转到本机的一套小工具
java·python
deviant-ART12 分钟前
为什么 Java 编译器要求 catch 块显式 return 或 throw
java·开发语言
LJianK112 分钟前
《Java 数据分组的四种姿势:从 for 循环到 Stream API》
java·linux·服务器
小张贼嚣张14 分钟前
SQL 正则表达式详解:语法、函数与实战案例(MySQL/Oracle通用)
mysql·oracle·正则表达式