缓冲池(Buffer Pool)介绍

4 篇文章 0 订阅
1 篇文章 0 订阅

缓冲池(Buffer Pool)介绍

Buffer Pool 是数据库的一个内存组件,里面缓存了磁盘上的真实数据,Java系统对数据库的增删改操作,主要是这个内存数据结构中的缓存数据执行的。

1.缓冲池的大小

Buffer Pool的默认大小是128M。在实际的生产环境中可以通过参数innodb_buffer_pool_size对 buffer pool进行调整。

2.数据页

数据库的核心数据模型是表 + 字段 + 行的概念。 数据库对数据抽象出一个数据页的概念,将很多行的数据放到一个数据页中。即磁盘中有很多数据页,每个数据页存放很多行数据。
在这里插入图片描述

当要更新一行数据的时候,数据库会找到这行数据所在的数据页,然后从磁盘文件中把这行数据所在的数据页加载到 Buffer Pool 中。即Buffer Pool中存放的是一个一个的数据页。

3.缓存页

默认情况下,磁盘中存放的数据页的大小是16KB,即一页数据包含16KB的内容。
Buffer Pool中存放的一个一个的数据页,通常叫做缓存页。(Buffer Pool是一个缓冲池,里面的数据是从磁盘缓存到内存中的)

Buffer Pool中默认情况下,一个缓存页的大小和磁盘上一个数据页的大小是一一对应的,都是16KB。
在这里插入图片描述

4.缓存页的描述信息

每个缓存页,都会有一个描述信息,这个描述信息可以认为是用来描述这个缓存页的。比如包含:这个数据页所属的表空间、数据页的编号、这个缓存页在Buffer Pool中的地址以及其他信息。
描述信息也可以叫描述数据、控制数据、元数据等。

描述信息本身也是一块数据,在Buffer Pool中,每个缓存页的描述数据放在最前面,然后各个缓存页放在后面。如下图所示:
在这里插入图片描述

需要注意的一点是:
Buffer Pool中的描述数据大概是缓存页大小的 5% 左右,也就是每个描述数据大概是800个字节左右的大小。
假设设置的Buffer Pool大小是128MB,实际上Buffer Pool真正的最终大小会超出一些,可能会有130多MB大小,因为还要存放每个缓存页的描述信息。

5.Buffer Pool可能存在的内存碎片

Buffer Pool的大小是人为设定的,很可能划分完所有的缓存页和描述数据块之后,还剩一点点的内存,这一点点内存放不下任何一个缓存页了,就没办法使用了,也就变成了内存碎片。

同时,再划分缓存页和描述数据块的时候,会让它们紧密的挨在一起,这样能尽可能的减少内存浪费,就尽可能的减少内存碎片的产生了。
如果缓存页东一块西一块,必然有很多间隙,就形成了内存碎片。

6.Buffer Pool的初始化

数据库启动的时候,会按照Buffer Pool设置的大小,加上描述数据的大小,去申请一块内存作为Buffer Pool的内存区域。
当内存区域申请之后,数据库就会按照默认的缓存页的16KB的大小和800字节左右的描述数据的大小,在Buffer Pool中划分出一个一个的缓存页和一个一个对应的描述数据。

此时,Buffer Pool中一个一个的缓存页都是空的,等数据库运行起来之后,要进行增删改查的操作时,才会把数据对应的数据页从磁盘文件中读取出来,放入Buffer Pool中的缓存页中。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值