首页 > 其他 > 详细

Buffer Pool

时间:2020-05-31 23:47:53      阅读:56      评论:0      收藏:0      [点我收藏+]

1 为什么要有Buffer Pool

如果没有Buffer Pool,所有的操作都是随机IO,每秒钟可以支撑的请求取决于IOPS,最多几百,而且响应时间也会很感人。因此,为了提高MySQL支持的并发数和快速响应,引入了Buffer Pool。

2 Buffer Pool的简单图解

实际上,在对数据库进行增删改查操作的时候,都是针对内存中的Buffer Pool中的数据进行的。下面给出了Buffer Pool的简单示意图,Buffer Pool默认是128M,可以通过参数innodb_buffer_pool_size进行设置。数据页的大小是16KB,而描述元数据页的大小约为数据页的5%,大概是800字节。

Buffer Pool由缓存数据页和对缓存数据进行描述的元数据页组成。

技术分享图片

3 Buffer Pool缓存页的管理

内存缓存的大小一定是有限的,那么针对缓存页一般就会有管理的策略,针对空闲页的管理,脏页的置换,以及如何页淘汰等。

3.1 free链表

为了从磁盘载入数据页,需要在Buffer Pool中寻找空闲页,为了方便查找,针对空闲页使用空闲链表来维护。

技术分享图片

3.2 flush链表

如果数据页被修改过,成为了脏页,那么为了保证数据的一致性,脏页是需要被flush到磁盘上去的,因此MySQL中使用flush链表来管理脏页。
技术分享图片

3.2 页淘汰

如果Buffer Pool的数据页不够用了,那么就需要将Buffer Pool中的数据页进行淘汰。那么问题是使用怎样的缓存页淘汰策略,一般情况下都是使用经典的LRU算法。

因此,Buffer Pool针对缓存页还会维护一个LRU链表,只要查询或者修改了这个缓存页的数据,那么就会将该缓存页挪到LRU链表的头部。当空闲页不够用的时候,从LRU列表的尾部进行淘汰。

Buffer Pool

原文:https://www.cnblogs.com/zerodsLearnJava/p/13021955.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!