写在前面
数据库事务恢复笔记。
问题
内容访问速度快但是容易崩溃不稳定。
磁盘稳定但是访问速度慢。
解决
将磁盘的数据页面读到内存缓冲区当中,以便计算机指令提供高速的随机访问。
一旦页面被读入内存的缓冲区,应该设法保存该页面以便不久之后的再次访问这样可以不用再访问磁盘,减少IO的开销。
后备缓冲
允许系统接收到一个磁盘的页面的请求的时候,先将其散列到后备表当中。如果在后备表当中有这一项说明对应的磁盘页面已经被读入缓冲区否则需要从磁盘读入该页。希望缓冲区保存的是最常使用的数据页面可以使用LRU缓冲策略。
LRU策略:读到内存当中的缓冲都被占满的时候一个新的读入的磁盘页面将会置换出最近最少使用的那个页面。
LRU缓冲模式是以减少磁盘的IO次数为目的的因此我们不能期望磁盘能和缓冲区的内容一致。
一个数据页面被称为是脏的:如果上一次写回磁盘之后被某些事物作了更新操作,我们通常会将脏的数据页面保留在内存当中直到更新该数据页面的事务被提交(或者按照LRU策略当该页面被其他页面置换出去的时候再写入磁盘)
但是一个数据页面长时间被操作但是在内存当中都没有被写入磁盘那么一旦断电或者内存崩溃内存上的信息将全部失去,如何保证能够恢复这些数据呢?如果采用每次更新就写回那么代价太大不可接受。
办法:日志
系统为每个更新操作做一个记录。称为日志项。
记录保存在称为日志缓冲区的内存区域。