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

祝好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华清远见嵌入式学习——网络编程——作业4

作业要求&#xff1a;①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…

Samsung下origen中uboot的配置与编译

uboot的特点&#xff1a; n代码结构清晰 n 支持丰富的处理器与开发板&#xff0c;易于移植 n 支持丰富的用户命令 n 支持丰富的网络协议 n 支持丰富的文件系统 n 支持丰富的设备驱动 n 更新活跃、用户较多、资料丰富 n 开放源代码 n 较高的稳定性 n 不具有通用性&#xff08;不…

JavaScript编程基础 – 布尔值(Booleans)

JavaScript编程基础 – 布尔值(Booleans) Javascript Programming Essentials – Booleans 一个JavaScript布尔值包含两个值中的一个&#xff0c;即 true 或者 false。 本文简要介绍JavaScript布尔值的具体应用&#xff0c;以及可能作为对象的布尔值等。 1. 布尔值(Booleans)…

Go语言超全详解(入门级)

文章目录 1. Go语言的出现2. go版本的hello world3. 数据类型3.0 定义变量3.0.1 如果变量没有初始化3.0.2 如果变量没有指定类型3.0.3 :符号3.0.4 多变量声明3.0.5 匿名变量3.0.6 变量作用域 3.1 基本类型3.2 指针3.2.1 指针声明和初始化3.2.2 空指针 3.3 数组3.3.1 声明数组3.…

java+mysql的校园兼职微信小程序(附源码 调试 文档)

校园兼职微信小程序 摘要一、引言二、国内外研究现状三、系统设计四、系统实现与界面展示五、源码获取 摘要 本文详述了一个基于Java和MySQL数据库技术的校园兼职微信小程序的毕业设计。系统主要分为三种用户角色&#xff1a;管理员、学生用户和商家用户。管理员拥有学生管理、…

jjwt使用说明-笔记

jjwt官网链接&#xff1a;https://github.com/jwtk/jjwt POM 依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.3</version> </dependency> <dependency><grou…

华纳云:linux中vsz和rss有哪些区别

在Linux中&#xff0c;VSZ(Virtual Set Size)和RSS(Resident Set Size)是两个用于描述进程内存使用的指标&#xff0c;它们表示不同方面的内存情况。 1. VSZ&#xff08;Virtual Set Size&#xff09;: VSZ 表示进程的虚拟内存大小。 包括进程使用的所有内存&#xff0c;包括实…

Python中的函数

一、函数参数与返回值基础知识 1、不要使用可变类型&#xff08;list等&#xff09;作为参数默认值&#xff0c;用None来代替。 参数默认值只会在函数定义阶段被创建一次&#xff0c;之后无论创建多少次&#xff0c;函数内拿到的默认值都是同一个对象&#xff0c;为规避这个问…

Vue 2.0源码分析-数据驱动

Vue.js 一个核心思想是数据驱动。所谓数据驱动&#xff0c;是指视图是由数据驱动生成的&#xff0c;我们对视图的修改&#xff0c;不会直接操作 DOM&#xff0c;而是通过修改数据。它相比我们传统的前端开发&#xff0c;如使用 jQuery 等前端库直接修改 DOM&#xff0c;大大简化…

【python学习】基础篇-常用模块-collections模块:数据结构,如列表、元组、字典和集合等

Python中的collections模块提供了一些有用的数据结构&#xff0c;如列表、元组、字典和集合等。 以下是collections模块中一些常用数据结构的用法&#xff1a; Counter类 Counter类是一个字典子类&#xff0c;用于计数可哈希对象。 它可以接受一个可迭代对象作为参数&#xff…

Atlassian Confluence 路径遍历和命令执行漏洞 (CVE-2019-3396)

漏洞描述 Confluence 是由澳大利亚软件公司 Atlassian 开发的基于 Web 的企业 wiki。 Atlassian Confluence 6.14.2 版本之前存在一个未经授权的目录遍历漏洞&#xff0c;攻击者可以使用 Velocity 模板注入读取任意文件或执行任意命令。 漏洞环境及漏洞利用 启动docker环境…

快来考试拿证书!KubeSphere 个人技能专业考试认证上线啦!

以容器技术和容器编排为基础的云原生应用&#xff0c;被越来越多的企业用户接受和使用&#xff0c;并且在生产环境中使用容器技术的比例逐年增加。Kubernetes 无疑已经成为容器编排的事实基础&#xff0c;而依托于 Kubernetes 开发的开源容器平台 KubeSphere 也收获了一众拥趸。…

vue3使用provider+ inject直接将参数由祖宗传送给孙子

如题。在vue项目中&#xff0c;如果祖宗想将参数传递给孙子甚至更小一辈的组件&#xff0c;是一件麻烦事。可以通过爷爷-儿子-孙子-曾孙这样的链条&#xff0c;一辈辈地传承下去&#xff0c;但未免太繁琐、太蠢了些&#xff1b;也可以通过store间接传送&#xff0c;但如何触发孙…

9-什么是迭代器,生成器,装饰器、django的信号用过吗?如何用,干过什么、什么是深拷贝,什么是浅拷贝,如何使用、slice操作符和list构造函数

1 什么是迭代器&#xff0c;生成器&#xff0c;装饰器 2 django的信号用过吗&#xff1f;如何用&#xff0c;干过什么 3 什么是深拷贝&#xff0c;什么是浅拷贝&#xff0c;如何使用 3.1 浅拷贝 3.2 深拷贝 3.3 扩展(slice操作符和list构造函数) 1 什么是迭代器&#xff0c;生成…

14 redis全量复制与部分复制

1、设置主服务器的地址和端口 首先是在从服务器设置需要同步的主服务器信息&#xff0c;包括机器IP, 端口。 主从复制的开启&#xff0c;完全是在从节点发起的。不需要我们在主节点做任何事情。 从节点开启主从复制&#xff0c;有3种方式 配置文件&#xff1a;在从服务器的配…

【神印王座】龙皓晨美妆胜过月夜,魔神皇识破无视,撮合月夜阿宝

Hello,小伙伴们&#xff0c;我是拾荒君。 《神印王座》国漫第82集已更新&#xff0c;拾荒君和大多数人一样&#xff0c;更新就去看了。魔神皇枫秀&#xff0c;威严凛然&#xff0c;突然空降月魔宫&#xff0c;整个宫殿都在这股无与伦比的强大气息中颤栗。为了顺利躲避魔神皇的…

稻谷飘香金融助力——建行江门市分行助力乡村振兴

7月的台山&#xff0c;稻谷飘香。在大耕户李胜业的农田里&#xff0c;金灿灿的稻谷翻起层层稻浪&#xff0c;收割机在稻浪里来回穿梭&#xff0c;割稻、脱粒、装车等工序一气呵成。空气中弥漫着丰收的喜悦。 夏粮迎丰收的背后&#xff0c;是中国建设银行江门市分行&#xff08…

远端WWW服务支持TRACE请求

安全扫描的时候&#xff0c;扫出来的问题&#xff0c;这里不分享如何处理&#xff0c;就只分享下&#xff0c;如何找到有问题的端口。 通过命令 curl -v -X TRACE -I ip:port&#xff0c;这里的ip和端口就是扫描出有问题的服务器地址ip以及开放的服务端口。 观察返回值&#x…

Python基础:生成器(Generators)和生成器表达式(Generator Expressions)详解

生成器&#xff08;Generators&#xff09;和 生成器表达式&#xff08;Generator Expressions&#xff09;是 Python 中用于处理迭代器和序列数据的强大工具。它们允许你按需生成值&#xff0c;而不是一次性生成所有值&#xff0c;从而节省内存和提高性能。 1. 生成器&#x…

深度强化学习笔记与无线通信应用案例

这里写自定义目录标题 参考资料比较和分类基础知识16.3 有模型学习16.3.1 策略评估递归形式&#xff1a;Bellman 等式 16.3.2 策略改进16.3.3 策略迭代16.3.3 值迭代 16.4 免模型学习on-policy off-policy16.4.1 蒙特卡罗强化学习16.4.2 时序差分学习Sarsa算法&#xff1a;同策…