Postgresql日志系统的实现(六)

 

1.3.2需要写日志的操作分析

1.3.2.1主要操作步骤分析:

所有可进行恢复的项目,都需要在事务进行的过程中按照如下顺序写日志,以便在需要恢复时有足够的备份信息帮助恢复。

如执行“insert into table_1 values(1,1)”,将调用“heap_insert”方法,执行“heap_insert”方法完毕后,就需要立即执行“XLogInsert”,以便记载信息:

              recptr = XLogInsert(RM_HEAP_ID, info, rdata);

              PageSetLSN(page, recptr);

              PageSetTLI(page, ThisTimeLineID);

注意,所有写日志的操作都调用XlogInsert()进行,XlogInsert()中通过调用XLogWrite()将日志记录写入缓冲区,“XLogInsert”的返回值是“XLogRecPtr”结构类型,其实际功效可以作为“LSN”(log secquence number)使用,在执行“XLogInsert”后,即把其返回值“XLogRecPtr”类型的内容通过调用“PageSetLSN”记载到“page”中,这提示我们将来可以据此考虑实现增量备份。

随后,调用“PageSetTLI”把本次系统启动以来(不管是否恢复过)相对应的正确的时间线“ThisTimeLineID”记载到“page”(page将在适时的时候被pgwriter刷出到磁盘),这样,保证了本次系统运行中所执行的事务在xlog日志中记载的时间线不和上次相同,以便于区分不同的恢复数据。

       当事务要结束的时候,将调用“XlogFlush 把日志缓冲区中的数据刷到磁盘上,以保证“WAL”的实施(注意下图中的事务提交和取消调用与“XlogFlush”的关系):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值