pgsql的wal log

参考:

http://mysql.taobao.org/monthly/2017/03/02/

http://www.interdb.jp/pg/pgsql09.html

事务日志是数据库的重要组成部分,因为即使在发生系统故障时,我们也要求所有数据库管理系统不丢失任何数据。它是一个记录数据库系统中所有更改和操作的历史日志,以确保没有数据由于故障(例如电源故障或其他导致服务器崩溃的服务器故障)而丢失。由于日志包含关于已经执行的每个事务的足够信息,因此在服务器崩溃时,数据库服务器应该能够通过重新应用事务日志中的更改和操作来恢复数据库集群。在计算机科学领域,WAL是 预写式日志日志(Write Ahead Logging)的首字母缩写, 预写式日志(Write Ahead log)是将更改和操作写入事务日志的协议或规则。在这里,这个术语被用作事务日志的同义词,也用来指与将操作写入事务日志(WAL)相关的实现机制。

常见的事务日志有redo log和undo log。 postgresql不支持undo log。

 

WAL

write ahead log: 预写式日志,也被称为xlog。和oracle的redo日志类似,存放在$PGDATA/pg_xlog中,10版本以后在$PGDATA/pg_wal目录。如果开启了归档,在目录archive_status下会有一些文件,以ready结尾的,表示可以归档但还没有归档,done结尾的表示已经归档。

postgresql在7.1版本中首次实现了WAL机制,以减轻服务器崩溃的影响。它还使时间点恢复(PITR)和流复制(SR)的实现成为可能。


postgresql中的WAL机制的核心思想就是:先日志落盘,后数据落盘。就是在写数据到磁盘里成为固定数据之前,先写入到日志里,然后一定条件下触发调用fsync()将此数据刷到磁盘。

 

机制:

wal这种机制不需要在每次事务提交的时候都把数据页刷到磁盘,如果出现数据库崩溃, 我们可以用日志来恢复数据库,任何尚未附加到数据页的记录都将先从日志记录中重做(这叫向前滚动恢复,也叫做 REDO)。对于PostgreSQL来说,未采用WAL机制之前,如果数据库崩溃,可能存在数据页不完整的风险,而WAL 在日志里保存整个数据页的内容,就能解决这个问题。

性能问题:

WAL机制可以从两个方面来提高性能:

  • 多个client写日志文件可以通过一次 fsync()来
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值