IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> BufferPool内存结构的样子 -> 正文阅读

[数据结构与算法]BufferPool内存结构的样子

1、BufferPool 大概的样子

1.1、buffer pool 默认大小为128MB(大小可设置),里面会包含很多个缓存页(一个数据对应一个缓存页,每个缓存页16kb),同时每个缓存页还有一个描述数据,也可以叫做控制数据
1.2、 buffer pool 在数据库启动是会按照 设置的buffer pool大小开辟内存(会比设置的 buffer pool 大一些)
1.3、buffer pool中的数据是对数据库操作的时候,才会把数据对应的页从磁盘里读取出来,放到 buffer poll 的缓存页中

2 通过free链表查找空闲缓存页

2.1、随着数据库的运行缓存页势必越来越少,所以数据库为BufferPool 设计了free链表(双向链表数据结构),既每个节点便就是一个空闲缓存页的描述数据块的地址。
2.2、free 链表有一个基础节点(40字节大小 它不属于Buffrt Pool),它会引用链表的头结点和尾节点,还存储了链表中有多少个空闲的缓存页(描述数据块)
2.3、Buffer Pool里面的描述数据块组成有两个指针,一个是 free_pre ,一个是free_next,分别指向自己的上一个free链表节点,以及下一个free链表的节点。

3、磁盘上的数据读取到缓存到BuffrtPool 缓存页中

3.1、首先从free 链表里获取一个描述数据块,然后就能获取到对应的缓存页
3.2、然后就可以将磁盘中的数据,读取到找到的缓存页中了
3.3、最后把这个描述数据块在free链表中剔除掉

  1. 其实数据库有一个哈希表数据结构,它会用 表空间号+ 数据页号,作为一个key,然后缓存页的地址最为value。
  2. 使用 表空间号+数据页号 作为key 去哈希表里查,如没有值就读取数据页,有值则表明数据页已经被缓存了
  3. 也即在每次读取一个数据页到缓存之后,都会在这个哈希表中写入一个key-vakue

4、flush 链表指BufferPool缓存页中的数据

1、凡是在BufferPool 被修改过的数据,在没有被刷新回磁盘时,对数据库来说都是脏数据
2、被修改过的缓存页的数据描述块会形成flush链表,后续flush 刷新到磁盘上

5、当free链表没有空闲的描述数据(无空闲的缓存页)时,还有要加载的数据怎么办

  1. 一种是 直接把 flush链表的数据刷新到磁盘中(将命中率低的数据刷新到磁盘中),并在flush 链表中剔除,得到新的空闲缓存页来,然后磁盘加载的数据就可以加载到新的空闲缓存页中。

6、引入LRU 算法来判断哪些缓存页是不常用的

全名是:Least Recently Used 最近最少使用的意思。
LRU原理:假设从磁盘加载一个数据页到缓存页的时候,就把这个缓存页的描述数据块放到LRU链表头部去,那么只要有数据的缓存页,都会在LRU链表里了,而且最近被访问的数据缓存页的描述数据块,都会放到LRU 链表的头部去。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:48:42  更:2022-03-24 00:51:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:58:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码