当前位置: 首页 > 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。这样就可以依此判断是否需要触发全页写。

http://www.dtcms.com/a/194397.html

相关文章:

  • 在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
  • iOS SwiftUI的具体运用实例(SwiftUI库的运用)
  • 大语言模型 10 - 从0开始训练GPT 0.25B参数量 补充知识之模型架构 MoE、ReLU、FFN、MixFFN
  • 应用层DDoS防护:从请求特征到行为链分析
  • Day 27 函数专题2 装饰器
  • 高可用消息队列实战:AWS SQS 在分布式系统中的核心解决方案
  • Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优
  • Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?
  • 【Linux网络】数据链路层
  • 在服务器上安装AlphaFold2遇到的问题(2)
  • #跟着若城学鸿蒙# web篇-获取定位