如果我正确理解,当用户更新数据库记录并提交事务时,commit()调用将被阻塞,直到完成以下步骤:
关于WAL,我有以下问题:
发布于 2011-11-27 01:50:24
首先,努力掌握WAL的工作原理,做得很好。它经常被误解,但当人们掌握了这个概念时,这是真正理解数据库的时刻。
我们需要重述您对提交事务的步骤的描述:
就这样,我们完成了,交易完成了。内存中的记录被修改,修改的细节存储在日志中,这样就不需要对物理磁盘上的每一个记录进行修改了。
关于你们的问题:
数据库什么时候知道从WAL中删除条目是安全的?
一个线性解释是,一旦修改过的数据库记录被刷新到磁盘上,就不需要日志条目。当发生这种情况时,取决于各种因素,这些因素因数据库而异。例如,Server有一个可配置的恢复间隔,它控制检查点频率(将更改的记录刷新到磁盘的操作)。
WAL是否意味着将记录写入磁盘两次(一次在WAL中,一次在数据库文件中)?
是的,有点,不,取决于你的观点。更改一次记录,修改将被记录到日志中,以及发生检查点时,写入磁盘。在检查点之间更改记录15次,日志中记录了15次更改,但修改后的记录只会在下一个检查点上写入磁盘一次。
Postgres声称WAL“显著减少了磁盘写入的次数,因为只需要将日志文件刷新到磁盘”,但是(回到问题1)在从WAL中删除条目之前,不需要刷新主数据库文件吗?
是的,您可以这样做,但请参阅上面WAL减少磁盘写入的原因。
https://dba.stackexchange.com/questions/8424
复制相似问题