首页 > 数据库 >22.Postgresql的checkpoint功能

22.Postgresql的checkpoint功能

时间:2024-04-22 16:22:21浏览次数:26  
标签:触发 WAL Postgresql 22 checkpoint 磁盘 日志 脏页

PostgreSQL中的checkpoint是数据库管理系统(DBMS)中的一项重要机制,用于确保数据的一致性、可恢复性和性能管理。以下是关于PostgreSQL checkpoint的详细解释:

checkpoint的定义与作用

  • 定义: Checkpoint是一个在WAL(Write-Ahead Log)序列中的点,此时所有数据文件已更新,反映了到该点为止在内存缓冲池(Buffer Pool)中的所有已提交事务对数据所做的更改。换句话说,checkpoint标志着一个时间点,自此之前的所有脏页(即包含已提交但尚未写回磁盘的数据的缓冲区页)都已被刷新到磁盘,并且WAL中记录了一个特殊的checkpoint记录

  • 作用:

    • 数据一致性:通过将脏页写回磁盘,checkpoint确保了在任何给定时刻,数据库磁盘上的数据代表了某个已知的事务状态,即所有已提交事务的效果已反映在磁盘上。
    • 恢复效率:在系统崩溃或重启时,恢复过程可以从最近的checkpoint开始,仅需重放此后WAL中的redo记录(即自checkpoint以来的事务日志),而不需要扫描整个WAL历史。这大大加快了数据库的恢复速度。
    • WAL清理:checkpoint允许PostgreSQL清理或循环使用在checkpoint记录之前的WAL日志段,因为那些记录对应的操作已经体现在数据文件中,不再需要用于恢复。这对于WAL日志空间管理至关重要,特别是在不进行WAL归档的情况下。
    • 缓存管理:定期进行checkpoint有助于控制内存缓冲区中脏页的数量,避免脏页过多导致的性能下降或在极端情况下可能导致的“out of memory”问题。

checkpoint触发与执行过程

  • 触发方式: Checkpoint可以由以下几种情况触发:

    • 定时checkpoint:按照checkpoint_timeout参数设定的时间间隔自动触发。例如,如果设置为30分钟,则每30分钟后会启动一次checkpoint。
    • WAL段切换checkpoint:当WAL日志填满一个预设的段(由wal_segment_size定义)并准备切换到新的段时,会触发checkpoint以清理不再需要的旧日志段。
    • 手动触发:管理员可以通过SQL命令CHECKPOINT或使用pg_ctl工具的-m fast选项强制执行checkpoint。
  • 执行过程:

    1. 标记脏页:checkpoint进程(checkpointer process)首先识别并标记缓冲池中所有脏页。
    2. 冲洗脏页:接着,这些脏页被顺序地或根据某种策略(如LRU)写回到相应的数据文件中,确保磁盘上的数据与已提交事务的状态一致。
    3. 记录checkpoint信息:在所有脏页写回完成后,向WAL中写入一个特殊的checkpoint记录,包括这个checkpoint的时间点(LSN,Log Sequence Number)、已冲洗的脏页列表等信息。
    4. 清理WAL:最后,checkpoint完成后,可以安全地清理或循环使用在checkpoint记录之前的WAL日志段,前提是这些日志在归档策略允许的情况下已经被妥善处理(如归档到长期存储)。

checkpoint相关的参数优化

一些与checkpoint行为相关的参数可以调整以适应不同的工作负载和性能要求:

  • checkpoint_timeout:控制自动checkpoint之间的时间间隔。
  • checkpoint_completion_target:设置checkpoint完成所需时间与两次checkpoint间隔之间的比率。值在0到1之间,较高的值(如0.9)倾向于让checkpoint更平滑地分布在整个间隔内,降低峰值I/O压力,但可能延长单个checkpoint的持续时间。
  • max_wal_size(取代旧版的checkpoint_segments):控制在触发checkpoint之前WAL日志可以累积的最大大小。增大该值可以减少checkpoint频率,但可能导致在恢复时需要处理更多的WAL日志。
  • min_wal_size:设置WAL日志收缩的目标大小,低于此值时不会强制进行checkpoint以减少WAL大小。

总结

PostgreSQL的checkpoint机制是维持数据库数据一致性、确保快速恢复以及有效管理WAL日志空间的核心手段。通过对checkpoint的适时触发、高效执行以及相关参数的优化调整,可以平衡数据安全性、恢复速度与系统的I/O性能,适应不同应用场景的需求。

 

标签:触发,WAL,Postgresql,22,checkpoint,磁盘,日志,脏页
From: https://www.cnblogs.com/zmc60/p/18150865

相关文章

  • 云原生周刊:Kubernetes v1.30 发布 | 2024.4.22
    开源项目推荐pv-migratepv-migrate是一个CLI工具/kubectl插件,可轻松将一个Kubernetes的内容迁移PersistentVolumeClaim到另一个Kubernetes。ClaudieClaudie是一个云原生的Kubernetes管理平台,具备跨多个云提供商和本地数据中心的多云和混合云集群管理能力。它通过......
  • 2024-04-22 微信小程序开发之ios输入框光标指向不正确
    业务场景:微信小程序开发中,页面有一个固定在底部(实测只要是设置了固定的输入框都会这样,如果可以改变布局,不固定定位则可避免此问题)的输入框,点击输入框输入文字,操作流程完成。但是!在神奇的ios系统中却不行,就是点击输入框,你是无法触发到输入框的,说白了点不到,安卓就没有这毛病。原......
  • postgresql重置序列和自增主键
    1.问题背景数据表中插入了几条测试数据,后又手动删除,导致后面插入数据的时候报主键冲突:ERROR:duplicatekeyvalueviolatesuniqueconstraint"tableName_pkey"DETAIL:Key(id)=(1)alreadyexists.12即使采用INSERTIGNORE的方式或者REPLACEINTO的方式还是报错,所以就想......
  • OpenEuler22.03 SP3离线安装Docker
    下载Docker离线安装包下载地址:https://download.docker.com/linux/static/stable/下面以安装docker-23.0.5.tgz为例。安装Docker解压docker-23.0.5.tgz[root@mccp~]#tar-zxvfdocker-23.0.5.tgzdocker/docker/docker-proxydocker/containerd-shim-runc-v2docker/ctrdocker......
  • 4 22微信小程序商品浏览
     需要四个接口:     ......
  • 软工计算一 20240422
    1.python中的iter()函数迭代子Python中的iter()函数是内置函数,它负责创建一个迭代器。这个函数接受两个参数:第一个参数是准备转换为迭代器的对象。第二个参数是一个可选的sentinel对象,它用于迭代器中的next()方法,当迭代器到达sentinel值时会停止迭代。基本用法......
  • Windows Server 2022 OVF, updated Apr 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2022OVF,updatedApr2024(sysin)-VMware虚拟机模板2024年4月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:WindowsServer2022OVF,updatedApr2024(sysin)-VMware虚拟机模板,查看最新版。原创作品,转载请保留出处。作......
  • Windows Server 2022 中文版、英文版下载 (updated Apr 2024)
    WindowsServer2022中文版、英文版下载(updatedApr2024)WindowsServer2022正式版,x64请访问原文链接:WindowsServer2022中文版、英文版下载(updatedApr2024),查看最新版。原创作品,转载请保留出处。作者主页:sysin.org此次发布更新了什么?答:版本号,当然还有…2021.09......
  • ubuntu22.04改成国内阿里云源。
    先执行:  sb_release-a命令。NoLSBmodulesareavailable.DistributorID: UbuntuDescription: Ubuntu22.04.4LTSRelease: 22.04Codename: jammygogosai@gogosai-MINI-1900A:~$看看内核版本(Codename),如果是focal(旧内核版本) debhttps://mirrors.aliyun.com/ubuntu......
  • P8207 [THUPC2022 初赛] 最小公倍树 题解
    题目大意有编号为\([L,R]\)区间的点,连接两个点\(x,y\)边权的为\(LCM(x,y)\),求这张图的最小生成树。\[1\leqL\leqR\leq10^6,R-L\leq10^5\]解题思路我们有一个结论:对于张图\(G\)中的一个生成子图\(E\),\(E\)之中的一条边\(k\)如果不在\(E\)最小生成树中,那么\(......