预写式日志(Write-Ahead Logging (WAL))
来源:互联网 发布:质量好国产女装知乎 编辑:程序博客网 时间:2024/06/05 09:18
Chapter 25. 预写式日志(Write-Ahead Logging (WAL))
- http://man.chinaunix.net/database/postgresql_8.0_CN/wal.html
- Table of Contents
- 25.1. WAL 的好处
- 25.2. WAL 配置
- 25.3. 内部
预写式日志 (WAL) 是一种实现事务日志的标准方法。有关它的详细描述可以在大多数(如果不是全部的话)有关事务处理的书中找到。 简而言之,WAL 的中心思想是对数据文件的修改(它们是表和索引的载体)必须是只能发生在这些修改已经记录了日志之后, 也就是说,在描述这些变化的日志记录冲刷到永久存储器之后。 如果我们遵循这个过程,那么我们就不需要在每次事务提交的时候都把数据页冲刷到磁盘,因为我们知道在出现崩溃的情况下, 我们可以用日志来恢复数据库:任何尚未附加到数据页的记录都将先从日志记录中重做(这叫向前滚动恢复,也叫做 REDO)。
25.1. WAL 的好处
使用 WAL 的第一个主要的好处就是显著地减少了磁盘写的次数。 因为在日志提交的时候只有日志文件需要冲刷到磁盘;而不是事务修改的所有数据文件。 在多用户环境里,许多事务的提交可以用日志文件的一次 fsync() 来完成。而且,日志文件是顺序写的, 因此同步日志的开销要远比同步数据页的开销要小。 这一点对于许多小事务修改数据存储的许多不同的位置更是如此。
另外一个好处就是数据页的完整性。实际情况是,在 WAL 之前,PostgreSQL 从来不能保证在崩溃的情况下数据页的完整性。 在 WAL 之前,在写的过程中的任何崩溃都可能导致:
索引记录指向一个不存在的表的行
索引记录在分裂操作中丢失
完全崩溃了的表和索引页的内容,因为数据页只写了一部分
索引的问题(问题 1 和 2)可能已经通过额外的 fsync 调用修补好了,但是如果没有 WAL,那么没有很明显的处理第三种情况的方法; WAL 在日志里保存整个数据页的内容 -- 如果那些内容在崩溃后的恢复中需要确保数据页的完整性的话。
最后,WAL 还提供了数据库在线备份和恢复(backup and restore (BAR))的可能, 就像 Section 22.3 里描述的那样。 通过归档的 WAL 文件,我们可以支持恢复到手头的 WAL 文件包含的任意时刻: 我们只需要简单地安装以前的数据库的物理备份,然后重放 WAL 到自己希望的时间。 另外,物理备份还不必是数据库状态的一个即时快照 — 如果它是花了一段时间制作的话, 因为 WAL 日志的重放将修复任何内部的不一致。
PrevHomeNext磁盘满导致的失效
- 预写式日志(Write-Ahead Logging (WAL))
- Sqlite学习笔记(四)&&SQLite-WAL原理 Write ahead logging
- HBase WAL(Write-Ahead-Log)学习
- Wal log的接口规范设计文档(HDFS-1580:Add interface for generic Write Ahead Logging mechanism)
- leveldb wal write ahead og
- Write-Ahead-Log(WAL)保障数据高可用
- postgresql之WAL(Write Ahead Log)
- postgresql之WAL(Write Ahead Log)
- postgresql9.6之WAL(Write Ahead Log)
- postgresql 预写式日志(Write Ahead Long)
- postgresql 预写式日志(Write Ahead Long)
- Write-Ahead 日志记录
- SQLite Write-Ahead 日志
- HBase的Write Ahead Log (WAL) —— 整体架构、线程模型
- HBase中WAL(Write-Ahead-Log)的特性与场景分析
- Editlog的接口规范设计文档(HDFS-1580:Add interface for generic Write Ahead Logging mechanism)
- The storage wars: Shadow Paging, Log Structured Merge and Write Ahead Logging
- 写wal log日志
- JavaScript模板引擎的应用场景及实现原理
- http://wdxtub.com/2016/04/16/thin-csapp-0/
- 自定义预览界面的分辨率
- LeetCodeP89 Gray Code
- java实现算法之KMP匹配算法(三个关键点掌握即可理解)
- 预写式日志(Write-Ahead Logging (WAL))
- Android中从应用市场或者网络上下载app,之后直接点击打开app,之后点击home键再打开的时候导致app重启
- Orcale多个字典ID保存在一个字段
- Plugin with id 'com.android.application' not found.
- 【腾讯Bugly干货分享】那些年,我们一起写过的“单例模式”
- 更新Android Studio 2.3遇到 Failed to open zip file解决
- 前端图表和图片裁剪缩放
- node.js学习(二、node.js安装)
- 安卓SwitchCompat和CardView使用总结