首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时从预写日志(WAL)中删除条目?

何时从预写日志(WAL)中删除条目?
EN

Database Administration用户
提问于 2011-11-26 19:55:44
回答 1查看 1.5K关注 0票数 2

如果我正确理解,当用户更新数据库记录并提交事务时,commit()调用将被阻塞,直到完成以下步骤:

  • 数据库记录预写日志(WAL)中的更改。
  • 数据库更新实际记录。
  • 数据库将删除WAL项。

关于WAL,我有以下问题:

  1. 数据库什么时候知道从WAL中删除条目是安全的?
  2. WAL是否意味着将记录写入磁盘两次(一次在WAL中,一次在数据库文件中)?
  3. 波斯特格斯声称WAL“显着地减少了磁盘写入的次数,因为只有日志文件需要刷新到磁盘”,但是(回到问题1)在从WAL中删除条目之前,您不需要刷新主数据库文件吗?
EN

回答 1

Database Administration用户

回答已采纳

发布于 2011-11-27 01:50:24

首先,努力掌握WAL的工作原理,做得很好。它经常被误解,但当人们掌握了这个概念时,这是真正理解数据库的时刻。

我们需要重述您对提交事务的步骤的描述:

  • 数据库记录预写日志(WAL)中的更改。
  • 数据库更新内存中的记录.

就这样,我们完成了,交易完成了。内存中的记录被修改,修改的细节存储在日志中,这样就不需要对物理磁盘上的每一个记录进行修改了。

关于你们的问题:

数据库什么时候知道从WAL中删除条目是安全的?

一个线性解释是,一旦修改过的数据库记录被刷新到磁盘上,就不需要日志条目。当发生这种情况时,取决于各种因素,这些因素因数据库而异。例如,Server有一个可配置的恢复间隔,它控制检查点频率(将更改的记录刷新到磁盘的操作)。

WAL是否意味着将记录写入磁盘两次(一次在WAL中,一次在数据库文件中)?

是的,有点,不,取决于你的观点。更改一次记录,修改将被记录到日志中,以及发生检查点时,写入磁盘。在检查点之间更改记录15次,日志中记录了15次更改,但修改后的记录只会在下一个检查点上写入磁盘一次。

Postgres声称WAL“显著减少了磁盘写入的次数,因为只需要将日志文件刷新到磁盘”,但是(回到问题1)在从WAL中删除条目之前,不需要刷新主数据库文件吗?

是的,您可以这样做,但请参阅上面WAL减少磁盘写入的原因。

票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/8424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档