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

PostgreSQL中的全页写

一、概述

在PGSQL数据库中,默认的页面大小为8KB,但是磁盘buffer的大小为4KB,扇区大小为512B。这就导致在操作系统的角度看数据库的写操作,其实并不是一种原子操作。如果操作系统发生了系统级别的故障,此时正好操作系统刷入了一个8KB页面的前半部分4KB,那么后半部分将缺失或失去了一致性。PGSQL自带的一致性校验方法可以检测到这种不一致性,但是无法解决这种不一致性。因此PGSQL采用了一种叫做全页写(Full Page Write)的机制来避免这种操作

二、全页写

为了解决上面的问题,MySQL采用的是双写机制,即保留备份页面,遇到页撕裂的情况时用备份页面覆盖写。但在PGSQL中,选择将整个数据页保存在WAL日志中。以checkpoint作为标志,当一个页面在checkpoint后被第一次修改时,会触发全页写机制。全页写在配置项里是可选的,参数为full_page_writes,默认为ON。在PITR期间,强制开启。在数据库备份操作期间,也会开启这个选项,用于防止出现页撕裂问题。

具体来说,页面会在其中记录最近一次操作的LSN,数据库的控制文件中也会记录数据库最近一次checkpoint时对应的LSN。这样就可以依此判断是否需要触发全页写。

相关文章:

  • 在Linux服务器上部署Jupyter Notebook并实现ssh无密码远程访问
  • 通信安全堡垒:profinet转ethernet ip主网关提升冶炼安全与连接
  • Jenkins 最佳实践
  • 探索大型语言模型(LLM)的开源学习路径:mlabonne/llm-course 深度解析
  • 文本分类任务Qwen3-0.6B与Bert:实验见解
  • 人工智能100问☞第24问:什么是生成对抗网络(GAN)?
  • 多模态大语言模型arxiv论文略读(七十九)
  • C# DataGridView 选中所有复选框
  • Centos7系统(最小化安装)安装zabbix7版本详细文章、nginx源代码配置、php源代码、mysql-yum安装
  • CSS面试题汇总
  • 【Rust闭包】rust语言闭包函数原理用法汇总与应用实战
  • 微信小程序:封装表格组件并引用
  • C++之unordered_map/unordered_set模拟实现
  • conda创建环境常用命令(个人用)
  • STM32就业前景和下载KEIL软件(保姆级)
  • Vue3中setup运行时机介绍
  • FC7300 DMA MCAL 配置引导
  • 经典循环神经网络变体
  • 将已打包好的aar文件,上传到 Coding 的 Maven 仓库
  • Windows11安装rockerMq5.0+以及springboot集成rockerMq
  • 尹锡悦宣布退出国民力量党
  • 著名心血管病学专家李国庆教授逝世,享年63岁
  • 中期选举后第三势力成“莎拉弹劾案”关键,菲律宾权斗更趋复杂激烈
  • 大环线呼之欲出,“金三角”跑起来了
  • 贵州省委军民融合发展委员会办公室副主任李刚接受审查调查
  • 既是工具又是食物,可食用机器人开启舌尖上的新科技