`
san_yun
  • 浏览: 2651956 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

预写式日志(Write-Ahead Logging (WAL))

 
阅读更多

原文:http://man.chinaunix.net/database/postgresql_8.0_CN/wal.html

 

预写式日志WAL ) 是一种实现事务日志的标准方法。有关它的详细描述可以在大多数(如果不是全部的话)有关事务处理的书中找到。 简而言之,WAL 的中心思想是对数据文件的修改(它们是表和索引的载体)必须是只能发生在这些修改已经记录了日志之后, 也就是说,在描述这些变化的日志记录冲刷到永久存储器之后。 如果我们遵循这个过程,那么我们就不需要在每次事务提交的时候都把数据页冲刷到磁盘,因为我们知道在出现崩溃的情况下, 我们可以用日志来恢复数据库:任何尚未附加到数据页的记录都将先从日志记录中重做(这叫向前滚动恢复,也叫做 REDO)。

25.1. WAL 的好处

使用 WAL 的第一个主要的好处就是显著地减少了磁盘写的次数。 因为在日志提交的时候只有日志文件需要冲刷到磁盘;而不是事务修改的所有数据文件。 在多用户环境里,许多事务的提交可以用日志文件的一次 fsync() 来完成。而且,日志文件是顺序写的, 因此同步日志的开销要远比同步数据页的开销要小。 这一点对于许多小事务修改数据存储的许多不同的位置更是如此。

另外一个好处就是数据页的完整性。实际情况是,在 WAL 之前,PostgreSQL 从来不能保证在崩溃的情况下数据页的完整性。 在 WAL 之前,在写的过程中的任何崩溃都可能导致:

  1. 索引记录指向一个不存在的表的行

  2. 索引记录在分裂操作中丢失

  3. 完全崩溃了的表和索引页的内容,因为数据页只写了一部分

索引的问题(问题 1 和 2)可能已经通过额外的 fsync 调用修补好了,但是如果没有 WAL ,那么没有很明显的处理第三种情况的方法; WAL 在日志里保存整个数据页的内容 -- 如果那些内容在崩溃后的恢复中需要确保数据页的完整性的话。

最后,WAL 还提供了数据库在线备份和恢复(backup and restore (BAR ))的可能, 就像 Section 22.3 里描述的那样。 通过归档的 WAL 文件,我们可以支持恢复到手头的 WAL 文件包含的任意时刻: 我们只需要简单地安装以前的数据库的物理备份,然后重放 WAL 到自己希望的时间。 另外,物理备份还不必是数据库状态的一个即时快照 — 如果它是花了一段时间制作的话, 因为 WAL 日志的重放将修复任何内部的不一致。

分享到:
评论

相关推荐

    Write-ahead Logging

    **写前日志**(Write-ahead Logging, WAL)是一种广泛应用于数据库系统中的技术,旨在提高系统的高可用性、数据一致性和故障恢复能力。通过在修改数据库内容之前先将相关的更改记录到日志中,WAL能够确保即使在系统...

    SegmentBased Recovery: Writeahead logging revisited

    标题《Segment-Based Recovery: Write-ahead logging revisited》表明本文是对传统写前日志(Write-Ahead Logging,WAL)技术的重新审视,尤其是针对分段恢复(Segment-Based Recovery)的应用。WAL是一种确保数据库...

    ARIES - A Transaction Recovery Method Supporting xxxx

    Algorithm for Recouery and Isolation Exploiting Semantics), which supports partial rollbacks of transactions, finegranularity (e.g., record) locking and recovery using write-ahead logging (WAL)....

    PostgreSQL高可靠性(HA)與預寫式日誌(WAL)

    在确保数据安全性方面,PostgreSQL 引入了一项关键技术——预写式日志(Write-Ahead Logging,简称WAL),这对于实现高可靠性至关重要。WAL 是数据库系统中用于持久化和故障恢复的一个关键机制,其主要目标是在系统...

    PostgresChina2018赖思超PostgreSQL10hash索引的WAL日志修改版final.pdf

    - 赖思超作为参与者之一,可能在此次会议上发表了关于PostgreSQL 10版本中Hash索引的WAL(Write-Ahead Logging)日志修改的演讲或讨论。 二、Hash索引的新特性 - PostgreSQL 10版本引入了Hash索引的WAL日志支持,...

    Internals Of PostgreSQL Wal.pdf

    PostgreSQL的WAL(Write-Ahead Logging)是数据库中一个关键的内部机制,用于确保事务的持久性和一致性。WAL机制是许多数据库系统中用来增强数据安全性的标准做法,与Oracle数据库中的REDO日志功能相似。在学习...

    Key-Value存储引擎ForestDB.zip

    关键特性:Key 和 Value 可以是任意二进制值 应用可以定制比较函数来支持自定义的 Key 顺序可通过顺序号来获取 Value 值或者是 Key 的磁盘偏移量Write-Ahead Logging (WAL) and its in-memory index are used to ...

    C++实现的小型单机版数据库,适用于深入理解mysql

    1. 数据库架构与基本组件 关系模型: 数据以表格(关系)的形式存储,每张表包含若干行(记录)和列(属性)。...日志与回滚:使用 Write-Ahead Logging(WAL)机制,记录数据库的所有变更,支持事务的恢复。

    浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 .docx

    #### 三、预写式日志(Write-Ahead Logging, WAL) **核心思想**:WAL的核心思想是在数据修改实际写入数据库之前,先将修改的信息记录到事务日志中。这一策略确保了即使在系统故障的情况下,也能通过日志恢复数据,...

    File opened that is not a database file file is encrypted.docx

    然而,从Android 9.0 (Pie)开始,Google引入了一些更改,其中包括默认启用Write-Ahead Logging(WAL)模式,这可能会导致一些开发者在尝试打开或操作数据库时遇到问题,如标题所示的“File opened that is not a ...

    事物日志与SQLServer数据库维护.pdf

    SQLServer还遵循预写日志(Write-Ahead Logging,简称WAL)原则,这意味着日志页会先于数据页写入磁盘,保持了事务日志与数据更新的一致性。这样一来,即使服务器在所有日志记录被刷新到磁盘之前关闭,提交的操作仍...

    cl-wal-开源

    `cl-wal` 是一个开源的 Common Lisp 库,它实现了预写日志(Write-Ahead Logging,简称 WAL)机制。预写日志是一种数据库事务处理中的日志记录方法,它确保了数据的一致性和完整性。在 `cl-wal` 中,这种机制被设计...

    libaio-devel-0.3.106-3.2.i386.rpm

    2. **预写日志(Write-Ahead Logging, WAL)**:在数据库系统中,libaio常用于实现预写日志,确保数据的完整性和一致性。 3. **多线程支持**:libaio支持多个线程同时发起I/O请求,能够充分利用多核处理器的优势。 4...

    MySQL InnoDB 日志 回滚段 & 崩溃恢复实现详解 修改版

    - 预写式日志是一种确保事务原子性和持久性的关键技术。 - 所有数据修改在正式写入数据库之前必须先写入日志文件中。 - **Redo 日志** - 记录了事务对数据页的变更或底层物理变化。可分为逻辑 Redo 日志和物理 ...

    行业文档-设计装置-优化固态硬盘写请求的方法及其固态硬盘.zip

    5. 预写日志(Write-Ahead Logging, WAL):在某些数据库系统中,预写日志策略用于确保数据一致性。然而,这可能会增加SSD的写入负载。合理调整WAL策略,如适时关闭WAL或优化日志大小,可以减轻对SSD的影响。 6. ...

    SQLite3的使用测试程序

    本项目“SQLite3的使用测试程序”是用C语言编写的,用于评估SQLite3在不同条件下的性能表现,特别是关注线程模型、Write-Ahead Logging (WAL) 机制以及事务提交策略的影响。 1. **线程模型**: SQLite3 支持多线程...

    40 重新回顾redo日志对于事务提交后,数据绝对不会丢失的意义.pdf

    这种技术被称为预写式日志(Write-Ahead Logging, WAL)。WAL的策略允许MySQL在提交事务时不必等待数据实际写入磁盘,从而减少了I/O操作的次数和提高事务的处理速度。 redo日志的写入是顺序的,与随机I/O的磁盘写入...

    SQL Server事务日志与数据库的维护.pdf

    在SQL Server中,事务日志采用预写式日志机制(Write-Ahead Logging,简称WAL),这意味着所有对日志的操作都会在数据实际写入磁盘之前完成。日志页(包含日志记录)首先从缓冲区写入磁盘,随后数据页(包含数据修改...

    Go-可重用的透明日志数据库

    同时,为了保证数据一致性,tlogdb可能采用了WAL(Write-Ahead Logging,预写式日志)策略,先将操作记录到日志,然后才更新数据,即使在系统崩溃时,也能通过日志恢复未完成的操作。 在文件系统层面,tlogdb可能...

Global site tag (gtag.js) - Google Analytics