PostgreSQL 7.4 中文文档 PostgreSQL中国制作 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 25. 预写式日志(Write-Ahead Logging (WAL)) | Fast Forward | Next |
UNDO 操作还没有实现。 这就意味着由退出的事务做的修改将仍然占据磁盘空间, 因此我们仍然需要一个永久的 pg_clog 文件保存事务的状态,因为我们不能回收事务标识符。一旦实现了 UNDO, 那么 pg_clog 就不再要求是永久的了; 我们就有可能在关闭的时候删除 pg_clog。 (不过,这方面的紧迫性已经随着我们对 pg_clog 采取分段存储的方法而降低了:我们不再需要永久保留 pg_clog 记录。)
有了 UNDO,我们还可能实现 savepoints, 这样就允许非法事务操作的部分回卷(因为误敲了命令导致的分析器错误, 插入了重复的主键/唯一键字等等)同时还能够继续或提交该事务在发生错误之前的合法操作。 目前,任何错误都将使整个事务成为非法并且要求事务退出。
WAL 还提供了数据库在线备份和恢复(backup and restore (BAR))的新方法。 要使用这个方法,我们可能要经常性地把数据文件保存到另外一个磁盘, 磁带或者另外一台主机并且还要备份 WAL 日志文件。 那么数据库文件拷贝和日志归档文件就可以用于象灾难恢复中那样恢复数据。 每次做完新数据库文件以后,这个老的日志文件就可以删除了。 实现这个设施可能需要记录数据文件和索引创建和删除的日志; 同时还需要开发一种方法来拷贝数据文件(操作系统拷贝命令是不合适的)。
认识这些事情的好处的一个困难是它们要求在相当可观的时间段内保存 WAL 日志(也就是说,如果需要事务的 UNDO, 那么和可能的最长的事务的时间一样长)。目前的 WAL 格式的体积相当大,因为它包括多个磁盘页的镜像。 目前这还不是一个严重的问题,因为这些日志只需要保留一到两个检查点的时间间隔; 但是为了实现这些东西,以后我们可能需要某种压缩的 WAL 格式。