Postgres中使用的预写日志记录(WAL)

时间:2014-09-16 18:48:40

标签: postgresql

我想在Postgres上使用Write-ahead-logging(WAL)做一些工作。有人能指出我在Postgres代码库中的WAL实现吗?我只想知道当前的实现并开始修改它。任何版本的Postgres都没问题,除非它有WAL。

提前致谢。

2 个答案:

答案 0 :(得分:1)

代码的主要部分在这里:

src/backend/access/transam/xlog.c

src/backend/access/transam/README

但当然需要做WAL才能渗透整个代码库。

你已经选择了最困难的起点来让你的脚湿透。 (我应该知道 - 这也是我做的方式)。

答案 1 :(得分:0)

WAL是预写日志记录。基本上,实际上在数据库之前 执行操作,它在日志中写入它将要执行的操作。然后,它 去吧,做到了。这可确保数据一致性。让我们说吧 电脑突然掉电了。有几点可以 发生: 1)在写入之前 - 在这种情况下,数据库可以正常使用或 没有预先记录。

2)在写入期间 - 如果机器已通电,则不进行预写日志记录 在写入期间,数据库无法知道剩下的内容 写的,或写的是什么。与Postgres相比,这是更进一步的 细分为两种可能性:

  • 在写入日志时发生了断电 - 在此 如果是,则回滚日志。数据库不受影响,因为数据 从来没有写到数据库中。

  • 写入日志后写入日志后发生了电源关闭 磁盘 - 在这种情况下,Postgres可以简单地从日志中读取内容 应该写,并完成写作。

3)再次写入后,这不会影响Postgres或者 没有WAL。

另外,WAL增加了PostgreSQL的效率,因为它可以延迟 随机访问写入磁盘,只是对日志执行顺序写入 很长时间。这减少了骗子正在进行的头部搜索量。 如果将WAL文件存储在不同的磁盘上,则速度会更快 优点