文章预览
今天来聊两个问题: 1. 如果 缓冲池 (buffer pool) 满了,哪些 数据页 (page) 要刷盘,哪些数据页不刷盘? 2. 数据库崩了,怎么利用检查点 (checkpoint) 与预写日志 恢复数据? 问题一:缓冲池满时的刷盘策略 首先来回顾一下《 预写日志WAL的核心思路... 》中相关的一些知识点: 1. 检查点 记录了某一个时刻, 缓冲池 中所有 数据页 的状态信息; 2. 预写日志 (write-ahead logging, WAL ) 中记录了,事务在执行过程中,对数据库进行的所有写操作; 3. 日志序列号 (log sequence number, LSN ) , 可以标识所有操作序列时序的依据; 再 来介绍两个新的知识点: 其一,在数据库中,需要存储一个信息: flushed-LSN :预写日志已刷盘的最大LSN。 画外音:这是日志刷盘。 其二,每个数据页X,还要包含两个信息: page-LSN :最近修改数据页的LSN。 画外音:每一
………………………………