PG 检查点管理与Oracle的比较

之前介绍过,在任何数据库中,一条DML操作执行都需要在内存中执行,但当操作越来越多,总有时候内存会写满,这时候就需要把内存中的块写入到磁盘,释放内存,保存数据。

写入到磁盘这一步,在不同的数据库中有不同的进程来处理,oracle中有dbwr进程,在PG中有bg writer进程和ckpt(检查点进程)。

在PG中,内存中的块共有三个状态

1.pending:正在修改

2.dirty:已经修改

3.free:已经保存

CKPT触发机制:

1.检查点时间间隔由checkpint_timeout 设置(默认五分钟)。

2.WAL目录(可以看作oracle中的redo)文件的总大小超过参数max_WAL_size的值

3.用户手动发出检查点。

4.数据库正常关闭的情况下。(其实这点oracle中也会做,在oracle中执行shutdown immediate之后会自动发出检查点命令,讲内存中的脏块写入到数据文件,相当于alter system checkpoint)。

PG检查点的作用

与Oracle类似:

1.定期保存修改过的数据块,内存中的数据会丢失,如果定期的把内存中的数据写入到磁盘就可以预防断电等故障的发生。

2.作为实例恢复时其实位置,这点和Oracle也很类似,每次发生检查点都会发一个号码记录在控制文件中,控制文件中记录了检查点如下相关信息:

1.最新检查点记录的LSN位置

2.先前检查点记录的LSN位置

(Oracle中叫做SCN号,PG中叫做LSN号。)

查看PG控制文件的命令:

关于PG的控制文件之前有写过博客:

PG控制文件的管理与重建-CSDN博客

3.作为介质恢复的起始位置。

检查点的处理过程:

当触发一个检查点

1.首先会记录一个redo点,用来当作将来恢复的起始位置。

2.第二步再做一个检查点,所以可以这样理解,检查点记录了redo点的位置。

所以在将来恢复的时候,PG会先找到检查点的位置,再根据检查点的位置找到redo点的位置,然后从这个redo点,根据WAL日志 里面的内容重新做一遍。

3.把最近的脏块写入到数据文件。

如何利用检查点作为recovery的起始位置:

检查点该如何设置?

checkpoint timeout(检查点发生的频率)

检査点发生的间隔时间决定了实例恢复需要的时长, checkpoint timeout设置的值应该根据业务的需求设置,以实例崩溃时,下一次打开数据库时长的容忍度而设置。
间隔时间短,则实例恢复需要的时间就短,可提高数据库的可用性,但是会增加/O操作,降低数据库状态性能,检査点发生时属于密集型/O操作,会占用大量系统资源。
间隔时间长,则实例恢复需要的时间就长,会降低数据库的可用性,但是会减少/O操作,提高数据库状态性能。

checkpoint_completion_target(检查点完成目标)

参数的意思是:控制每次检查点发生时i/o的吞吐量

值越高,则i/o占用的资源越少。

值越低,则i/o占用的资源越多,影响数据块性能,但是提高检查点完成速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/690703.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全工程师面试题

安全工程师面试题安全工程师是一个非常重要的职位,他们负责保护公司的网络和系统免受黑客和恶意软件的攻击。如果你想成为一名安全工程师,那么你需要准备好面试。下面是一… 1安全工程师面试题 安全工程师是一个非常重要的职位,他们负责保护…

SpringSecurity集成第三方登录

SpringSecurity 集成第三方登录 认证及自定义流程 首先我们提供一个实现了AbstractAuthenticationProcessingFilter抽象类的过滤器,用来代替UsernamePasswordAuthenticationFilter逻辑,然后提供一个AuthenticationProvider实现类代替AbstractUserDetail…

百问C语言第1问——彻底弄懂define用法

系列文章目录 玩转指针专栏 趣味c程序专栏 一.c语言关系操作符练习题(新手必会) 一.c语言常见概念(超全) 一.趣味c程序—关机程序(整蛊同学版) 二.趣味c程序—猜数字游戏(含干货知识点 三.趣味c程序—打印图形(1)(含干…

Golang | Leetcode Golang题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; func largestRectangleArea(heights []int) int {n : len(heights)left, right : make([]int, n), make([]int, n)for i : 0; i < n; i {right[i] n}mono_stack : []int{}for i : 0; i < n; i {for len(mono_stack) > 0 &&am…

EasyExcel简单使用

EasyExcel简单使用 ​ 之前一直用的Apache POI来做数据的导入导出&#xff0c;但听说阿里的EasyExcel也拥有POI的功能的同时&#xff0c;在处理大数据量的导入导出的时候性能上比POI更好&#xff0c;所以就来尝试使用一下 导入Maven依赖&#xff1a; <dependency><…

【Linux】基于 Jenkins+shell 实现更新服务所需文件 -->两种方式:ssh/Ansible

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第7章 安装VMwareTools

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

SeetaFace6人脸特征提取与对比C++代码实现Demo

SeetaFace6包含人脸识别的基本能力&#xff1a;人脸检测、关键点定位、人脸识别&#xff0c;同时增加了活体检测、质量评估、年龄性别估计&#xff0c;并且顺应实际应用需求&#xff0c;开放口罩检测以及口罩佩戴场景下的人脸识别模型。 官网地址&#xff1a;https://github.co…

基于yolov5+streamlit目标检测演示系统设计

YOLOv5与Streamlit&#xff1a;智能目标检测可视化展示介绍 随着人工智能技术的飞速发展&#xff0c;目标检测技术已成为推动智能化社会进步的关键技术之一。在众多目标检测算法中&#xff0c;YOLOv5以其卓越的性能和实时性&#xff0c;成为了业界的佼佼者。与此同时&#xff…

[算法][差分][延迟相差][leetcode]2960. 统计已测试设备

题目地址&#xff1a; https://leetcode.cn/problems/count-tested-devices-after-test-operations/description/ 解法一&#xff1a;暴力解法 class Solution {public int countTestedDevices(int[] batteryPercentages) {//特殊条件判断if(null batteryPercentages || ba…

Java后端初始化项目(项目模板)

介绍 emmmm&#xff0c;最近看了一些网络资料&#xff0c;也是心血来潮&#xff0c;想自己手工搭建一个java后端的初始化项目模板来简化一下开发&#xff0c;也就发一个模板的具体制作流程&#xff0c;&#xff08;一步一步搭建&#xff0c;从易到难&#xff09; ok&#xff…

Rust的协程机制:原理与简单示例

在现代编程中&#xff0c;协程&#xff08;Coroutine&#xff09;已经成为实现高效并发的重要工具。Rust&#xff0c;作为一种内存安全的系统编程语言&#xff0c;也采用了协程作为其并发模型的一部分。本文将深入探讨Rust协程机制的实现原理&#xff0c;并通过一个简单的示例来…