DBS note4:Buffer Management
目录
1、介绍
2、缓冲池
3、处理页面请求
4、LRU替换和时钟策略
1)顺序扫描性能 - LRU
5、最近最常使用替换策略(MRU Replacement)
1)Sequential Scanning Performance - MRU
6、练习题
1)判断真假
2)LRU、MRU、Clock相关问题
1、介绍
我们前面简略讨论了 DBMS 的最低级别如何管理磁盘空间,以及基于页面的数据库系统中如何管理文件和索引。现在,我们将探讨 DBMS 中这两个级别之间的接口 - 缓冲区管理器(the buffer manager)。
缓冲区管理器负责管理内存中的页面,并处理文件和索引管理器的页面请求。请记住,内存空间是有限的,因此我们无法负担得起将所有页面存储在缓冲池中。缓冲区管理器负责淘汰策略,即在空间填满时选择淘汰哪些页面。当页面从内存中淘汰或新页面读入内存时,缓冲区管理器会与磁盘空间管理器通信,执行所需的磁盘操作。
2、缓冲池
内存通过将空间划分为页面可以放置的帧而转化为缓冲池。一个缓冲帧可以容纳与一个页面相同量的数据(因此一个页面完美地适应一个帧)。为了有效跟踪帧,缓冲区管理器在内存中为元数据表分配了额外的空间。
该表追踪了4个信息:
1. 与内存地址唯一关联的 “框架ID”
2. 用于确定框架当前包含哪个页面的 “页面ID”
3. 用于验证页面是否已被修改的 “脏位”
4. 用于跟踪当前使用页面的请求者数量的“Pin计数”
3、处理页面请求
当从缓冲管理器请求页面并且页面已经存在于内存中时,页面的引用计数会递增,并返回页面的内存地址。
如果页面不在缓冲池中且仍有空间,将找到下一个空框架,并将页面读入该框架。页面的引用计数设置为1,并返回页面的内存地址。在页面不存在且没有空框架的情况下,必须使用替换策略确定要驱逐的页面。
替换策略的选择在很大程度上取决于页面访问模式,并通过计算页面命中次数选择最优策略。页面命中是指可以在内存中找到请求的页面而无需访问磁盘。每个页面未命中会产生额外的IO成本,因此良好的淘汰策略对性能至关重要。访问模式的命中率定义为#页面命中次数 / (#页面命中次数 + #页面未命中次数),或更简单地说,#页面命中次数 / #页面访问次数。
此外,如果被驱逐的页面的脏位被设置,则将页面写入磁盘以确保更新被持久化。如果在内存中对页面进行更新,则将脏位设置为1。一旦页面被写回磁盘,脏位就被设置为0。
一旦请求者完成其工作负载,它负责通知缓冲管理器减少其先前使用的页面的引用计数。
4、LRU替换和时钟策略
一个常用的替换策略是 LRU(最近最少使用)。当需要将新页面读入已满的缓冲池时,将淘汰最近最少使用、引用计数为 0 且 "Last Used" 列具有最低值的未固定页面。为了追踪页面的使用情况,在元数据表中添加了一个 "Last Used" 列,用于记录页面引用计数减少的最新时间。LRU 是一个有效的策略选择,因为它会保留常被访问的页面在内存中,由于它们经常被访问,因此很可能是最近使用的。
实现 LRU 通常可能成本较高。时钟策略提供了一种替代实现,它使用元数据表中的一个 ref bit(最近被引用)列和一个时钟手变量来高效地近似 LRU。使用 ref bit 可以降低空间和时间成本。只需每个框架一个比特,而不是多个比特来存储 Last Used 值。在时间方面,缓冲管理器只需跟随clock hand。在 LRU 中,缓冲管理器必须花费时间搜索 Last Used 列中的最小值。
时钟策略算法将元数据表视为帧的循环列表。它在开始时将时钟手设置为第一个未固定的帧,并在将每个页面最初读入帧时将其相应行的ref bit设置为1。该策略在尝试淘汰时的工作方式如下:
1. 遍历表中的帧,跳过固定的页面,并在到达末尾时绕回到帧0,直到找到第一个未固定且ref bit = 0的帧。
2. 在每次迭代期间,如果当前帧的ref bit = 1,则将ref bit设置为0并将时钟手移动到下一个帧。
3. 在到达ref bit = 0的帧时,淘汰现有页面(如果dirty bit被设置,则将其写入磁盘;然后将dirty bit设置为0),读取新页面,将帧的ref bit设置为1,并将时钟手移动到下一个帧。
如果访问当前在缓冲池中的页面,则时钟策略将页面的ref bit设置为1而不移动时钟手。
1)顺序扫描性能 - LRU
LRU 总体上表现良好,但在一组页面 S(其中 $|S| >$ 缓冲池大小)被多次重复访问时,性能会受到影响。这种访问模式称为顺序淹没,经常在数据库工作负载中出现,比如在表中扫描每个记录。
为了突显这一点,请考虑一个使用 LRU 的 3 帧缓冲池,具有以下访问模式:
A B C D A B C D A B C D A B C D
5、最近最常使用替换策略(MRU Replacement)
另一个常用的替换策略是 MRU(最近最常使用)。与淘汰最近最少使用的未固定页不同,MRU 策略淘汰最近最常使用的未固定页,根据页面的固定计数最后一次减少的时间来衡量。
1)Sequential Scanning Performance - MRU
起初使用这种策略可能会显得违反直觉,但考虑一个使用 MRU 的 3 帧缓冲池的访问模式:
A B C D A B C D A B C D A B C D
显然,在发生顺序淹没访问模式时,MRU 在页面命中率方面远远优于 LRU。
6、练习题
1)判断真假
a. 缓冲池中的每个帧都是一个磁盘页面的大小。
真。帧的大小被定义为磁盘页面的大小。
b. 缓冲管理器代码(而不是文件/索引管理代码)负责设置页面的脏位。
假。页面的请求者(文件/索引管理代码)设置脏页。
c. 脏位用于跟踪页面的受欢迎程度。
假。脏位用于跟踪页面在写回磁盘之前是否已被修改。引用计数用于跟踪受欢迎程度。
d. 使用LRU策略时,引用位用于在替换页面之前为页面提供“第二次机会”留在内存中。
假。引用位不用于LRU策略。它们用于时钟策略。
e. 对文件进行顺序扫描时,当文件小于缓冲池时,使用MRU或LRU将具有相同的命中率(从空缓冲池开始)。
真。由于我们可以将所有页面放入内存,因此在顺序扫描期间我们不需要驱逐页面。
f. 页面的引用计数只能由缓冲管理器递减。
假。引用计数由请求页面的人递减,表示他们已经使用完毕。
2)LRU、MRU、Clock相关问题
对于以下问题,我们有一个初始为空的缓冲池,其中有4个缓冲帧。对于访问模式:
A B D D E A E C A B C A E
a. LRU的命中率是多少?
b. 当LRU完成时,缓冲池中有哪些页面?
c. MRU的命中率是多少?
d. 当MRU完成时,缓冲池中有哪些页面?
e. Clock的命中率是多少?
f. 当Clock完成时,缓冲池中有哪些页面?
详细的访问模式如下图所示。在 LRU 和 MRU 中,行数对应于缓冲帧的数量,每列对应于一个单独的访问,其中字符表示缺失,星号表示命中。
a. 7/13
b. A, C, B, E
c. 7/13
d. E, B, D, C
e. 6/13
f. C, A, B, E
以上,DBS note4:Buffer Management
祝好。
相关文章:
DBS note4:Buffer Management
目录 1、介绍 2、缓冲池 3、处理页面请求 4、LRU替换和时钟策略 1)顺序扫描性能 - LRU 5、最近最常使用替换策略(MRU Replacement) 1)Sequential Scanning Performance - MRU 6、练习题 1)判断真假 2…...
Linux 中 .tar 和 tar.gz 的区别
1、前言 有时候你会发现,即便是有些拥有 3 年左右工作经验的运维或开发工程师对 .tar 和 .tar.gz 的区别并不是很清楚。.tar 和 .tar.gz 是在 Linux 系统中用于打包和压缩文件的两种常见格式。它们之间的主要区别在于压缩算法和文件扩展名。 2、区别 .tar .tar 是…...
区域人员超限AI算法的介绍及TSINGSEE视频智能分析技术的行业应用
视频AI智能分析已经渗透到人类生活及社会发展的各个方面。从生活中的人脸识别、停车场的车牌识别、工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品的品质缺陷AI检测等,AI智能分析技术无处不在。在某些场景中,重点区域的人数统计与…...
asp.net mvc点餐系统餐厅管理系统
1. 主要功能 ① 管理员、收银员、厨师的登录 ② 管理员查看、添加、删除菜品类型 ③ 管理员查看、添加、删除菜品,对菜品信息进行简介和封面的修改 ④ 收银员浏览、搜索菜品,加入购物车后进行结算,生成订单 ⑤ 厨师查看待完成菜品信息…...
SpringBoot 使用多SqlSessionFactory下的事务问题
如下配置了两个数据源: spring:datasource:ds1:jdbc-url: jdbc:mysql://localhost:3307/spring-boot-demos?serverTimezoneUTC&useUnicodetrue&characterEncodingutf8&useSSLfalse&allowPublicKeyRetrievaltrueusername: rootpassword: passwordd…...
浏览器内置NoSQL数据库IndexedDB
IndexedDB - 浏览器内容数据库 indexedDB 是一种浏览器内置的NoSQL数据库,它使用键值对存储数据,用于在客户端存储大量结构化数据。它支持离线应用程序和高效的数据检索,可以在 Web 应用程序中替代传统的 cookie 和 localStorage。 IndexDB是…...
网络参考模型与标准协议(二)-TCP/IP对等模型详细介绍
应用层 应用层为应用软件提供接口,使应用程序能够使用网络服务。应用层协议会指定使用相应的传输层协议,以及传输层所使用的端口等。TCP/IP每一层都让数据得以通过网络进行传输,这些层之间使用PDU ( Paket Data Unit,协议数据单元)彼此交换信…...
万宾科技智能井盖传感器,预防城市道路安全
随着城市交通的不断发展和城市化进程的加速推进,城市道路安全问题日益凸显。市政井盖作为城市道路的一部分,承担着重要的交通安全保障职责。然而传统的市政井盖管理方式存在许多不足。针对这些问题政府需要采取适当的措施,补足传统管理方式的…...
GCC/Make/CMake 工具链
阅读前可以思考的问题:(答案在文章的最后面,小白可以略过) GCC/Make/CMake是什么关系? 一个C程序编译为一个可执行文件,需要哪些过程? #include语句所引入的库,如何才能找到对应的完整源代码文…...
GO抽象工厂模式
既然工厂模式每个产品都需要实现对应的工厂类去生成相关实例,提取产品的共性,提高代码的内聚性, 就是抽象工厂模式要干的。在抽象工厂中,依然是不同产品对应不同的工厂类,但可以尽可能将具有相同共性的产品类别合在一起…...
Linux 磁盘/分区/修复 命令
目录 1. lsblk(list block devices) 2. fdisk(fragment disk) 3. gdisk 4. mkfs(make filesystem) 5. df(display file-system disk space usage) 6. du 7. fsck(file-sy…...
php一句话木马免杀
php一句话木马免杀 针对于php一句话木马做免杀: 利用php动态函数的特性,将危险函数拆分成字符,最终使用字符串拼接的方式,然后重新拼接,后加括号执行代码,并且可以使用花指令进行包装,如无限i…...
深度学习人体跌倒检测 -yolo 机器视觉 opencv python 计算机竞赛
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…...
轻松整理文件夹,将视频文件全部归类到另一个文件夹!
如果你需要整理文件夹中的文件,将同一类别的文件归纳到一起,可以更加方便地管理和查找。现在,我们有一个简单而实用的方法,可以将文件夹中的所有视频文件归类到另一个文件夹中,让你的文件管理更加有序和高效。 首先&am…...
存储服务器特征是什么
存储服务器和普通服务器是有差别的,配置方式不同,因为存储服务器是为特定目标设计的,通常存储服务器是独立的单元,大多数时候是被设计成4U机架式,存储服务器一般是单机运作的,不与其他服务器连接。今天小编…...
Conditional GAN
Text-to-Image 对于根据文字生成图像的问题,传统的做法就是训练一个NN,然后输入一段文字,输出对应一个图片,输出图片与目标图片越接近越好。存在的问题就是,比如火车对应的图片有很多张,如果用传统的NN来训…...
OOM问题排查+Jvm优化
OOM问题排查: 1、top命令:查看cpu和内存的使用情况。 2、jstat命令:查看YGC和FGC情况,一般都是老年代不够用。导致OOM 3、jmap命令: 查看哪个类的实例过多,以每个类占用多少了内存。4、jstack 查看线程与线程之间的阻…...
链表:C++实现
引言: 链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。相比于数组,链表具有动态性和灵活性,可以高效地进行插入和删除操作,但是查找操作的时间复杂度较…...
使用JMX监控ZooKeeper和Kafka
JVM 默认会通过 JMX 的方式暴露基础指标,很多中间件也会通过 JMX 的方式暴露业务指标,比如 Kafka、Zookeeper、ActiveMQ、Cassandra、Spark、Tomcat、Flink 等等。掌握了 JMX 监控方式,就掌握了一批程序的监控方式。本节介绍 JMX-Exporter 的使用,利用 JMX-Exporter 把 JMX…...
蓝桥等考C++组别七级008
第一部分:选择题 1、C++ L7 (15分) 在判断是否满足循环条件之前,至少执行循环体语句一次的是哪种循环结构?( ) for循环while循环do-while循环以上都不是正确答案:C 2、C++ L7 (15分) 执行以下程序,会输出几个“*”?( ) for(int i = 0; i <= 10; i++){…...
麒麟V10 SP3 2303桌面版防火墙白名单配置全攻略:从图形化到命令行,再到开机自启的完整避坑指南
麒麟V10 SP3防火墙白名单配置实战:从入门到持久化 在国产操作系统麒麟V10上部署服务时,防火墙配置往往是第一个拦路虎。许多开发者都有这样的经历:明明在图形界面添加了规则,服务却依然无法访问;或者命令行配置看似成功…...
实战演练:利用Intel Realsense D435i和ROS实现实时点云地图构建
实战演练:利用Intel Realsense D435i和ROS实现实时点云地图构建 当RGB-D相机遇上机器人操作系统,一场关于三维感知的奇妙旅程就此展开。Intel Realsense D435i作为一款集成了IMU的深度相机,在SLAM、三维重建等领域展现出独特优势。本文将带您…...
新手入门 Taotoken 从注册到获取第一个 API Key 全指南
新手入门 Taotoken 从注册到获取第一个 API Key 全指南 1. 注册 Taotoken 账号 访问 Taotoken 官方网站完成账号注册流程。在浏览器地址栏输入 https://taotoken.net 进入首页,点击右上角的「注册」按钮。填写邮箱地址、设置密码并完成手机号验证后,系…...
OpenCode Telegram Bot:打造本地化AI编码伴侣,实现远程异步开发
1. 项目概述:一个本地化的AI编码伴侣 如果你和我一样,经常在命令行里用 opencode 这个AI编码工具,那你肯定遇到过这样的场景:正坐在沙发上用手机刷着消息,突然灵光一现,想到一个代码优化点或者一个需要调…...
LSLib终极指南:神界原罪与博德之门3 MOD开发的5个核心技巧
LSLib终极指南:神界原罪与博德之门3 MOD开发的5个核心技巧 【免费下载链接】lslib Tools for manipulating Divinity Original Sin and Baldurs Gate 3 files 项目地址: https://gitcode.com/gh_mirrors/ls/lslib 如果你正在为《神界原罪》系列或《博德之门3…...
WarcraftHelper终极指南:如何让魔兽争霸3在现代电脑上流畅运行 [特殊字符]
WarcraftHelper终极指南:如何让魔兽争霸3在现代电脑上流畅运行 🎮 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争…...
AssetStudio完整指南:三步解锁Unity游戏资源提取与转换
AssetStudio完整指南:三步解锁Unity游戏资源提取与转换 【免费下载链接】AssetStudio AssetStudio is a tool for exploring, extracting and exporting assets and assetbundles. 项目地址: https://gitcode.com/gh_mirrors/as/AssetStudio AssetStudio是一…...
【圆计算】信息学奥赛一本通C语言解法(题号1014)
自留or欢迎大佬纠错【题目描述】给出圆的半径,求圆的直径、周长和面积。输入圆的半径实数r,输出圆的直径、周长、面积,每个数保留小数点后4位。圆周率取值为3.14159。【输入】输入包含一个实数r(0<r≤10,000)&#…...
IronClaw:基于零信任架构的AI智能体安全框架设计与实战
1. 项目概述:一个为安全而生的AI智能体框架如果你正在寻找一个能让你安心地将AI智能体部署到生产环境的框架,那么IronClaw的出现,可能正是时候。在AI智能体(AI Agent)领域,我们正面临一个核心矛盾ÿ…...
个人开发者如何借助 Taotoken 以更低成本体验多种顶尖 AI 模型
个人开发者如何借助 Taotoken 以更低成本体验多种顶尖 AI 模型 1. 个人开发者的模型使用痛点 对于独立开发者或学生群体而言,探索不同大模型的能力往往面临两个主要障碍。首先是直接接入官方 API 的成本压力,主流模型的按量计费模式在频繁调用时容易产…...







