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

pgsql checkpoint机制(1)

检查点触发时机

  1. 检查点间隔时间由checkpoint_timeout设置
  2. pg_xlog中wall段文件总大小超过参数max_WAL_size的值
  3. postgresql服务器在smart或fast模式下关闭
  4. 手动checkpoint

为什么需要检查点?

  1. 定期保持修改过的数据块
  2. 作为实例恢复时起始位置(问题:wal日志应该从哪开始重放?)
  3. 作为介质恢复时起始位置 

示例

checkpoint过程描述

checkpoint操作首先记录下checkpoint的“开始”位置,记录为redo point(重做位点)
checkpoint将sharedbuffer中的数据刷到磁盘里面去
这时候数据库又来了一条SQL insert 3
checkpoint刷脏结束,redo point之前的数据均已被刷到磁盘存储(数据1和数据2)
这时候在wal日志里面记录checkpoint位点,表明checkpoint操作“结束”。checkpoint位点会记录相关信息,比如redo point的值(从哪开始重做)
将最新的checkpoint位点记录到pg_control文件
这个时候假如开始数据库恢复,那么数据库会从pg_control中文件中找到最新的checkpoint位置,再从checkpoint找到redo point的位置,开始重放日志。
不难看出,1和2这两个数据在checkpoint中已经持久化到磁盘存储,wal日志中也只有insert 3操作需要重放。

思考

为什么需要redo point?  
redo point是记录本次开始刷脏数据的开始位点(即,redo point之前的数据都会被刷到磁盘存储),等到本次刷脏结束,会在wal日志中插入checkpoint位点,表明本次刷脏结束。
redo point和checkpoint位点之间逻辑上是一个时间段,在这个时间段内,由于写wal日志由walwriter进程完成,而刷脏由checkpoint进程完成,两个进程之间并行运行,在redo point和checkpoint位点之间,walwriter可能会插入新的wal日志记录(执行SQL),这样通过这两个位点就能够知道哪些数据已经刷到磁盘,哪些还没有,等到恢复的时候就能够准确定位到恢复的起点。

http://www.lryc.cn/news/121986.html

相关文章:

  • 微信小程序 map地图(轨迹)
  • 【钉钉接口】bpms_task_change、bpms_instance_change 的区别及举例
  • vue左右div结构手动拉伸并且echarts图表根据拉伸宽高自适应
  • 开发工具Eclipse的使用
  • DrawerLayout布局使用教程Android侧边栏导航完全指南:创建简单实用的导航抽屉
  • Dynamics 365 实体快速创建功能启用
  • Mybatis三剑客(一)在springboot中自动生成Mybatis【generator】
  • 【LeetCode 热题 100】图论 专题(bfs,拓扑排序,Trie树 字典树)
  • Jmeter压测实战:Jmeter二次开发之自定义函数
  • 在python中使用nvidia的VPF库对RTSP流进行硬解码并使用opencv进行显示
  • C++中using namespace std的作用记录
  • 【TX 企业微信私有化历史版本 API 信息泄露】
  • 腾讯云轻量应用服务器镜像应用模板清单大全
  • C语言链表操作
  • 详解拦截器和过滤器
  • 关于`IRIS/Caché`进程内存溢出解决方案
  • 构建Docker容器监控系统(cadvisor+influxDB+grafana)
  • 最强自动化测试框架Playwright(17)- 模拟接口
  • Python爬虫——requests_get请求
  • 【EI复现】一种建筑集成光储系统规划运行综合优化方法(Matlab代码实现)
  • C++11 异步与通信之 std::async
  • 影视站用什么cms好?
  • HOT88-乘积最大子数组
  • 工博士与纷享销客达成战略合作,开启人工智能领域合作新篇章
  • 拆解与重构:慕云游首页组件化设计
  • 刷了3个月的华为OD算法题,刷出感觉了,如洁柔般丝滑,文末送《漫画算法2:小灰的算法进阶》
  • ip转换器哪个好用 ip地址切换器有哪些
  • 【python】爬取豆瓣电影Top250(附源码)
  • 35岁职业危机?不存在!体能断崖?不担心
  • C语言——指针进阶