会
事务处理过程
update 或Insert操作:
1.计算更新后tuple到原tuple的delta信息,把这个delta复制到回滚段,作为undo;
2.写redo日志,记录对回滚段的更改,回滚段也是由缓冲区管理机构管理,也是相当于对页面(page)的更改;
3.把缓冲区中的对应tuple更新成新值,把新值的rollback pointer写入undo(更改回滚段);
4.写redo日志,记入对页(回滚段)的更改;
5.将被更改的页面的状态改成dirty,表示要被刷盘
事务提交操作:
日志刷盘,当前事务的对应的最后的LSN(Log Sequence Number)之前的redo日志都被写入持久化存储。
崩溃恢复过程
1.启动开始时,检测是数据库在上次退出时是否发生崩溃;
2.定位到最近的一个检查点(checkpoint);
3.定位在这个检查点时刷磁盘的数据页,检查校验checksum。如果不正确,说明这个页在上次写入是不完整的,从双写缓冲(doublewrite buffer)里把正确的页读出来,更新到内存缓冲区中的页;
4.顺序地(从上个检查点开始到最后一个LSN)分析redo日志,标识出未提交事务;
5.顺序执行redo,这些redo日志不仅包含对数据段的更改(写tuple), 也包括对回滚段的更改(写undo log);
6.回滚所有未提交的事务。