pg-checkpoint-wal

checkpoint

因为数据最后都要放到磁盘中,但是磁盘io是一个非常耗时的过程,我们可以先把数据写入到内存中,但是为了内存中的数据与磁盘中的一致,显然需要将内存数据写入磁盘,这个过程就是checkpoint

wal

我们在上文中说过,Postgresql默认每5分钟自动进行一次checkpoint,把内存中的脏块同步到磁盘上,这就又会引起另外一个问题:假设数据库在早上8:00钟自动进行了一次checkpoint,那么下一次执行checkpoint的时间会是在8:05,如果8:00~8:05这段时间内又有新的数据写入,而且写入后数据库发生了宕机重启,那这部分新的数据岂不是就丢失了?于是,为了解决这个问题,WAL日志就登场了。Postgresql的WAL日志、Oracle中的Redo日志、以及Mysql的binlog都是这个作用。

当数据库中数据发生变更时:
change发生时:先要将变更后内容计入wal buffer中,再将变更后的数据写入data buffer;
commit发生时:wal buffer中数据刷新到磁盘;
checkpoint发生时:将所有data buffer刷新的磁盘。

posted @ 2022-12-12 16:55  braveman1021  阅读(62)  评论(0)    收藏  举报