首页 > 数据库 >PostgreSQL中checkpoint的作用和工作原理

PostgreSQL中checkpoint的作用和工作原理

时间:2024-10-31 20:09:51浏览次数:1  
标签:PostgreSQL bgwriter 写入 checkpoint 检查点 原理 buffers backend

###checkpoint的作用
将脏页写入磁盘,避免数据库实例重启之后需要从WAL中恢复大量的数据而增加数据库恢复时间

 

###checkpoints的触发时机
1,手动CHECKPOINT命令;
2,pg_basebackup,CREATE DATABASE,或pg_ctl stop|restart;
3,定期执行的checkpoint,也即每隔checkpoint_timeout定时执行的
4,自上一个检查点以来生成了已配置的最大WAL文件数量,属于被动checkpoint

 

###checkpoint触发时的执行步骤
1,识别共享缓冲区中的所有脏页(已修改的页);
2,将所有这些缓冲区写入磁盘(或更确切地说,写入文件系统缓存);
3,调用fsync()将所有修改后的文件刷新到磁盘(数据文件)。

 

###checkpoint的执行时间参数
checkpoint执行时主要是物理IO操作,这是一个比较耗时的操作,PostgreSQL尽可能在checkpoint_timeout*checkpoint_completion_target这个时间范围内完成物理IO操作。
也就是说,只要在规定的时间内完成本次物理IO操作即可,checkpoint_completion_target是一个介于0到1的一个比例,乘以checkpoint_timeout得到checkpoint的最大执行时间

 

checkpoint相关的系统表字段的含义,来自于:https://www.cnblogs.com/abclife/p/14573514.html

=#select * from pg_stat_bgwriter;
-[ RECORD 1 ]---------+-----------------------------
checkpoints_timed     | 15462                       #计划检查点的发生次数,这种检查点是checkpoint_timeout参数规定的超时达到后系统启动的checkpoint;
checkpoints_req       | 148                         #被动checkpoint,非计划检查点的次数,包含手动的检查点、xlog(redo日志)检查点(指当某些数据库预定的阈值达到时启动的检查点,比如WAL已经超出了max_wal_size或者checkpoint_segments,也会触发xlog ckpt)
checkpoint_write_time | 2130524730                  #检查点写入的总时长
checkpoint_sync_time  | 72082                       #检查点同步文件的总时长
buffers_checkpoint    | 174657791                   #检查点清理的脏块
buffers_clean         | 0                           #bgwriter清理的脏块数量
maxwritten_clean      | 0                           #bgwriter清理脏块的时候达到bgwriter_lru_maxpages后终止写入批处理的次数,为了防止一次批量写入太大影响数据块IO性能,bgwriter每次都有写入的限制。不过这个参数的缺省值100太小,对于负载较高的数据库,需要加大;
buffers_backend       | 24491898                    #backend清理的脏块数量
buffers_backend_fsync | 2                           #backend被迫自己调用fsync来同步数据的计数,如果这个计数器不为零,说明当时的fsync队列已经满了,存储子系统肯定出现了性能问题;
buffers_alloc         | 51275374                    #buffer分配的次数
stats_reset           | 2021-01-29 14:41:48.97647+08 #上一次RESET这些统计值的时间
 
=#

 

 

参考:
https://guobo507.github.io/2020/basic-tuning-of-checkpoint/
https://www.cnblogs.com/abclife/p/14573514.html
https://cloud.tencent.com.cn/developer/article/1882199

标签:PostgreSQL,bgwriter,写入,checkpoint,检查点,原理,buffers,backend
From: https://www.cnblogs.com/wy123/p/18518765

相关文章

  • QLoRA原理分析
    QLoRA是LoRA的量化版本,在LoRA的基础上,对权重W进行量化,如图2所示,以进一步减少对GPU显存的需求。1、算法论文及代码论文《QLORA:EfficientFinetuningofQuantizedLLMs》 https://arxiv.org/pdf/2305.14314代码 https://github.com/artidoro/qlora......
  • LoRA原理
    图1描述了LoRA微调的原理,即在原模型的基础上,建立一个旁支模型,旁支模型由A和B两个小矩阵构成,且A@B的维度等于原模型的维度。图1LoRA原理图1的LoRA原理,也可写成式2的等式,权重W的新状态W’,为图10左路WFP16与右路AFP16@BFP16乘积之和,其中W、A、B的上标FP16,意指其矩阵元......
  • 【算法笔记】位运算算法原理深度剖析
    【算法笔记】位运算算法原理深度剖析......
  • bellman_ford算法原理
    是什么松弛在《算法四》中,对松弛的解释是:relaxtheedge,看起来比较抽象,不过如果我们从生活中的实例去理解,就简单多了:试想一根绳索,当你握着绳索的两头使劲用力拉伸时,绳子紧绷,长度会变长;而当你减小用力时,绳子松弛,长度会变短。当你没有用任何力时,此时绳子的长度最短。这里当用力减......
  • Kyber原理解析
    Kyber是一种IND-CCA2安全的密钥封装机制。Kyber的安全性基于在模格(MLWE问题)中解决LWE问题的难度。Kyber的构造采⽤两阶段⽅法:⾸先介绍⼀种⽤来加密固定32字节⻓度的消息原⽂的IND-CPA安全性的公钥加密⽅案,我们称之为CPAPKE,CPAPKE由密钥生成(CPAPKE.KeyGen)、加密(CPAPKE.Encry......
  • 3.4 可靠数据传输原理
    以下全文为《计算机网络自顶向下方法》(第8版)3.4小节的总结。rdt:reliabledatatransferudt:unreliabledatatransfer下方有限状态机图片中横线上方表示事件event,下方表示操作action。3.4.1构造可靠数据传输协议  1.经完全可靠信道的可靠数据传输:rdt1.0  2......
  • 深入解析 Memcached原理、架构与最佳实践
    1.引言什么是Memcached?Memcached是一个高性能的分布式内存对象缓存系统,旨在通过减少数据库负载来加速动态Web应用程序。它以键值对的形式将数据存储在内存中,允许应用程序快速读取数据,从而提高响应速度和系统的可扩展性。由于其简单的设计和高效的性能,Memcached被广......
  • 线程池原理
    线程池是一种多线程处理方式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有......
  • React 中useState 原理
    useState是React中的一个Hook,用于在函数组件中添加状态管理。理解useState的原理有助于更好地掌握React的状态管理机制。1.基本概念状态(State):状态是组件内部的数据,可以影响组件的渲染。每当状态更新时,组件会重新渲染以反映新的状态。useState的作用:通过useS......
  • 小白手把手教学用spring框架实现mybatis和mysql以及工作原理
    Maven_Mybatis_Mysql什么是MybatisMyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObj......