• Buffer Pool


    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.3 页淘汰

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

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

  • 相关阅读:
    Java Calendar 类的时间操作
    Java获取当前时间的年月日方法
    CentOS7使用firewalld打开关闭防火墙与端口
    myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小java.lang.OutOfMemoryError: PermGen space及其解决方法
    springMVC3学习--ModelAndView对象(转)
    form总结
    linux命令: chown命令
    fail2ban 保护
    centeros iptable模板文件
    Beetl2.2使用说明书20151201
  • 原文地址:https://www.cnblogs.com/zerodsLearnJava/p/13021955.html
Copyright © 2020-2023  润新知