首页 > 其他分享 >13 从磁盘读取数据页到Buffer Pool的时候,free链表有什么用?

13 从磁盘读取数据页到Buffer Pool的时候,free链表有什么用?

时间:2022-09-19 14:11:18浏览次数:73  
标签:13 缓存 读取数据 Buffer free 链表 数据 Pool

1.数据库启动的时候,是如何初始化Buffer Pool的?

数据库一启动就会按照你设置的Buffer Pool的大小,在操作系统里分配一块内存区域,作为Buffer Pool内存区域

当内存区域申请完毕之后,数据库就会按照默认的缓存页16kB的大小以及对应的800个字节左右的描述数据的大小,在Buffer Pool里划分出来一个一个的缓存页和对应的描述数据

 

 

 只不过现在的缓存页是空的,当我们进行数据库的增删改查时,才会把对应的页从磁盘文件里读取出来,放到Buffer Pool中缓存页中。

2.我们怎么知道哪些缓存页是空闲的?

默认情况下,数据页和缓存页是一一对应的,都是16kb,一个数据页对应一个缓存页

所以我们必须知道哪些缓存页是空闲的,所以数据库会为Buffer Pool 设计一个free 链表,他是一个双向的链表,每个链表里存的是空闲的缓存页的描述数据块的地址,也就是说只要你一个缓存页是空闲的,这个空闲的缓存页的描述数据块的地址就会存在free链表里,刚开始数据都是空的,描述数据块的地址都会被存放在free链表中

3.如何将磁盘上的数据页读取到Buffer Pool 的缓存页中?

首先从free链表获取一个描述数据块。然后就可以获取到对应的这个描述数据块的缓存页

 

 接着我们就可以把磁盘上的数据页读取到对应的缓存里去,同时把相关的一些描述数据写入到缓存页的描述数据里,比如这个数据页所属的表空间之类的信息,最后把那个描述数据块从free链表去除  

4.你怎么知道数据页有没有被缓存?

我们在执行增删改查的时候,如果没有被缓存,就走上边的逻辑,先从free链表中找到一个空闲的缓存页,从磁盘读取数据页写入缓存页,写入描述数据,从free链表中移除这个描述数据块

数据库其实还有一个哈希表数据结构,他会用表空间号+数据页号,作为一个key,然后缓存页地址作为value。

当你要使用一个数据页的时候,通过“表空间号+数据页”作为key去哈希表去查一下,查到就说明数据页已经被缓存了,查不到就去读取数据页

 

标签:13,缓存,读取数据,Buffer,free,链表,数据,Pool
From: https://www.cnblogs.com/langjitianyaluotongxue/p/16700768.html

相关文章

  • Android13的适配内容
    Android的13需要适配的内容Android13即将发布,对于这个版本的发版内容,记录一下Android开发者需要做的工作内容。通知权限的适配上一次的通知大改动是Android8.0,增夹的......
  • 《js 设计模式与开发实践》读书笔记 13
     职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 ......
  • LeetCode链表翻转
    SwapNodesinPairsLeetCode/力扣递归交换之后,直接交换下一个节点ListNode*swapPairs(ListNode*head){if(head&&head->next){swap(head->val,......
  • 20201302姬正坤第十章学习笔记
    第三周学习笔记第十章第十章的主要内容是研究sh编程。对于sh编程的介绍分为以下几个方面:sh脚本与C程序sh脚本的编写sh控制语句sh汉书知识点归纳:经过一整章的......
  • 2022-2023-1 20221312 《计算机基础与程序设计》第三周学习总结
    班级链接:首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园(cnblogs.com)作业要求:2022-2023-1《计算机基础与程序设计》教学进程-娄......
  • 20201306吴龙灿第十章学习笔记
    知识点归纳这一章的主要内容包含了sh编程的绝大部分内容。但是在此之前,还是要强调一下诸如Python、C、Java这些程序语言的特点。1.Python(一)Python是什么?Python是一......
  • 20201322陈俊池学习笔记3
    第十章sh编程一、知识点归纳10.1sh脚本sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。创建mysh: #!/bin/bash #commentline echohello使......
  • 2022-2023-1 20221308 《计算机基础与程序设计》第三周学习总结
    作业信息班级的链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求的链接:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03教材学习内容总结《c......
  • 2022-2023-1 20221319《计算机概论和程序设计》第三周学习总结
    这个作业属于那个班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业模板:https://www.cnblogs.com/rocedu/p/9577842.html#JXJC作业要求:https://www.cnblog......
  • 22级 20221314詹全晨 《计算机基础与程序设计》第三周学习总结
    作业信息班级的链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业模板:https://www.cnblogs.com/rocedu/p/9577842.html#JXJC作业要求:https://www.cnblogs......