zoukankan      html  css  js  c++  java
  • 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列表的尾部进行淘汰。

  • 相关阅读:
    ps photoshop cc 2015 Extract Assets(生成器)切图大法
    获取免费代理推荐
    nodejs http代理请求
    nodejs 发起http请求
    AHK GUI开发示例
    为【桌面右键菜单
    NPM 模块收集
    nodejs Commander 命令行神器简单示例
    如何用nodejs 开发一个命令行交互工具
    利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符
  • 原文地址:https://www.cnblogs.com/zerodsLearnJava/p/13021955.html
Copyright © 2011-2022 走看看