磁盘块缓存2025年4月6日 | 阅读 5 分钟 在本文中,我们将详细了解磁盘块缓存的概念。 引言恢复过程与操作系统密切相关。在主内存中对磁盘页进行缓冲在恢复技术中起着重要作用。 磁盘被划分为固定长度的存储单元,称为磁盘页或磁盘块。每当事务需要更新数据库时,包含要更新的数据项的磁盘块由缓存管理器缓存到主内存中,然后在内存中更新,之后再写回磁盘。缓存目录用于跟踪哪些数据项在缓冲区中。 当需要对数据项执行操作时,DBMS 首先检查缓存目录,看包含数据项的磁盘页是否在缓存中。如果不在,则在磁盘上找到该磁盘页并将其复制到相应的磁盘页缓存中。如果缓存缓冲区已满,则必须将一些缓存缓冲区交换出去,以便为新的磁盘页腾出空间。页面交换算法,如 FIFO、LRU 等,用于选择需要交换的磁盘页。 缓存中的每个内存缓冲区都有一个与之相关的脏位。此位包含在目录条目中,用于指定缓冲区是否为空。当从数据库读取磁盘页并将其传输到缓冲区时,缓存目录会使用新的磁盘页地址进行更新,并将脏位设置为零。当缓冲区被修改时,相应缓存目录条目的脏位设置为 1。当缓冲区内容更改时,应仅当缓冲区内容已修改(即脏位为 1)时,才将其写回相应的磁盘页。 下图表示磁盘块缓存的物理视图 ![]() 操作
还有一个称为“固定-未固定”位的位。它也与脏位一起使用。“固定”在缓存中的页面,如果此时无法写回磁盘,则其值为 1。当页面准备好写回磁盘时,“固定-未固定”位的值将更改为零。 有两种技术用于将缓冲区中已修改的页面内容写回磁盘。它们是:
对于原地更新,会维护每个数据库磁盘块的副本。更新后的缓冲区内容会写回到从其读取到缓冲区的原始磁盘位置,从而覆盖磁盘上任何已更改数据项的旧值。 在以下示意图中 A -a:原地更新 - 刷新时覆盖相同位置,需要日志记录 B- b:影子页 ![]() 另一方面,在影子页技术中,可以在磁盘上创建数据项的多个副本。更新后的缓冲区内容会写入不同的磁盘位置。数据项的旧值不会被新值覆盖。修改前的数据项副本是数据项的修改前映像,修改后的数据项副本是数据项的修改后映像。 写前日志记录在原地更新策略中,修改后的缓冲区被写回到相同的磁盘位置,旧值被新值替换。这需要使用日志,其中所有修改都在应用之前进行记录。这是通过写前日志记录实现的,其中描述更改的所有日志记录在对数据库进行任何更改之前都会被强制写入确定性存储。 以下是写前日志记录的示意图 ![]() 总的来说,写前日志记录规定:
写前日志记录的优点 使用写前日志记录的主要优点是磁盘写入次数大大减少,因为在事务提交时只需要将日志文件刷新到磁盘。它还可以确保在发生故障时,通过检查日志中的数据并使用后续的恢复技术之一,可以将数据库恢复到有利的状态。 写前日志记录的缺点 使用写前日志记录的主要缺点是每次单独写入日志记录时都会增加系统的额外开销。不过,可以通过允许将多个日志记录首先收集到主内存的日志缓冲区中,然后一次性将其复制到稳定存储中来减少这种情况。这种收集日志缓冲区中多个日志记录的技术称为日志记录缓冲。 可窃取/不可窃取和强制/非强制标准的 DBMS 恢复定义包含以下术语:
可窃取建议在事务提交之前,可以将已更新的缓冲区写回磁盘。 在不可窃取访问中,如果一个缓存页被事务更新,则在事务提交之前不能将其写回磁盘。 如果固定-未固定位等于 1,则页面不能写回磁盘。 使用此方法的优点是避免了需要极大的缓冲区空间来在内存中存储所有已更新页面。 在此,由事务 T2 更新但尚未提交的数据项可以被其他事务使用,采用可窃取方法。 如果事务的所有已更新页面在提交时不需要立即写回磁盘,则称为非强制策略,否则称为强制策略。 使用非强制方法的优点是,已提交事务的已更新磁盘页面在其他事务需要更新它时仍然可以在缓冲区中,从而节省了从磁盘重新读取页面的输入/输出操作。 以下是可窃取和不可窃取方法的示意图 ![]() 大多数数据库采用可窃取/非强制策略。这为缓冲区管理器提供了最大的自由度。可窃取和非强制策略的组合允许缓冲区管理器在不进行任何强制初始化的情况下,方便地在可窃取之前或之后写回页面。 使用此方法的主要缺点是必须为每个更新的对象记录撤销和重做信息。 下一个主题SQL 介绍 |
我们请求您订阅我们的新闻通讯以获取最新更新。