当前位置: 首页 > article >正文

如何理解PostgreSQL全页写?

  读了很多PostgreSQL的FullPageWrite过程,结果思考时把自己绕进去了。每次感觉读懂了,但是都没能理解,其实是一个很简单的逻辑。
  全页写发生在PG的Checkpoint时候,不要过于考虑全页写在checkpoint中的过程,而是单纯思考其作用,其实很好解。
  假设没开启全页写的场景下,在checkpoint完成之后,后续数据库持续读写,然后bgwriter的向底层刷脏,某个时刻刷脏异常断电,导致磁盘的页只写了部分,数据页异常不完整了。然后数据库重启之后,从redo点开始回放wal,从上次redo点开始回放,但是磁盘上的数据页本身就不完整,如何能回放成功呢?所以在每次checkpoint成功之后,第一次数据页的修改的wal日志中,对整个数据页进行备份,写到wal中。这样后续即便数据库运行过程中出现部分页写,数据页不完整的情况,那么后续起来后,反正从redo点开始回放,而回放的同时,会发现wal中有备份块,那么就会覆盖页面内容,这样也就能保证数据一致了。

问:如果checkpoint过程中崩溃了怎么办?

  这也不是问题,因为redo点只有在checkpoint成功后才会记录到pg_controldata文件中,在checkpoint过程中崩溃了,下次启动时,从上次checkpoint生成的redo点开始回放,因为上次的checkpoint完成redo点之后针对数据页第一次的修改都保存了全量数据,所以用wal中的数据页块直接覆盖本地的数据页,然后一步步回放至最近的wal记录,这样保证了数据库的一致性。


http://www.kler.cn/a/369338.html

相关文章:

  • nginx和apache的区别
  • 组件通信八种方式(vue3)
  • 2024年下教师资格证面试报名详细流程❗
  • Vue应用中使用xlsx库实现Excel文件导出的完整指南
  • 详解Java之Spring MVC篇一
  • uniapp路由权限拦截守卫
  • 24下软考信息系统监理师,快背,都是精华知识点!
  • spring高手之路
  • react18中的受控与非受控组件及ref的使用
  • 配置 SSH 无需密码连接服务器及为 IP 指定自定义域名
  • arthas使用 笔记
  • 2025选题|基于Hadoop的物品租赁系统的设计与实现
  • windows 训练yolov8官方数据集
  • SpringBoot poi-tl通过模板占位符生成word文件
  • 奥哲与中建三局集团有限公司战略签约
  • 美畅物联丨视频上云网关如何配置上级联网云平台
  • nacos安装与配置
  • 存储引用服务(OSS)Minio 环境搭建
  • 最新版的 Git+VS Code同步版本管理实践
  • 运维面试汇总