重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 331|回复: 0
打印 上一主题 下一主题

checkpoint 与 pg_switch_wal()区别与联系

[复制链接]
跳转到指定楼层
楼主
发表于 2025-9-5 15:43:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 郑全 于 2025-9-5 15:45 编辑

在 PostgreSQL 中,checkpoint(检查点)是一个机制,pg_switch_wal() 是一个函数,它们既有区别又存在联系:
区别功能本质
  • checkpoint:是数据库维持数据一致性和提升恢复效率的一种内部机制。它负责将内存中共享缓冲区里,修改记录已写入 WAL 日志的脏数据页刷新到磁盘;记录检查点相关信息(如 WAL 位置等)到 WAL 日志中;还能在一定条件下帮助截断不再需要的 WAL 日志,释放磁盘空间 。例如,数据库持续运行产生大量脏页,checkpoint 会定期将这些脏页写入磁盘,减少崩溃恢复时 WAL 日志重放量。
  • pg_switch_wal():是供用户或应用程序调用的函数,主要作用是强制立即切换 WAL 日志文件。调用后,当前正在使用的 WAL 日志文件会被关闭,后续的 WAL 记录将写入新的日志文件。此外,它会返回当前 WAL 日志的序列号(LSN),方便用于后续的记录和操作 。比如在备份前调用,能明确备份时间点对应的 WAL 位置,便于后续恢复。
触发方式
  • checkpoint:可由多种方式触发。一是根据配置参数 checkpoint_timeout(默认 5 分钟),到达指定时间间隔后自动触发;二是当 WAL 日志文件达到 checkpoint_segments(旧参数,新版本使用 max_wal_size 等相关配置) 配置的大小阈值时触发;还能通过 SQL 命令 CHECKPOINT 手动触发。
  • pg_switch_wal():只能通过在 SQL 语句中显式调用该函数来触发,如 SELECT pg_switch_wal(); ,没有自动触发的机制。
对 WAL 日志处理
  • checkpoint:虽然会涉及 WAL 日志截断(在确保数据可恢复前提下),但主要是围绕数据页持久化和记录检查点信息,对 WAL 日志的操作是数据库内部根据整体状态进行的,目的是保障数据一致性和优化恢复流程。
  • pg_switch_wal():单纯聚焦于 WAL 日志文件的切换,强制生成新的 WAL 日志文件,方便归档和记录特定时间点后的事务操作,本身不涉及对数据页的刷新等操作。
联系都与 WAL 日志相关        checkpoint 机制和 pg_switch_wal() 函数都围绕 WAL 日志展开工作。checkpoint 通过 WAL 日志确保数据一致性,对 WAL 日志进行截断等管理;pg_switch_wal() 则是用于控制 WAL 日志文件的切换,并且切换后的 WAL 日志文件也会参与到数据库的恢复流程中,比如归档后的日志可用于时间点恢复。
辅助数据恢复
    二者都为数据库的数据恢复提供支持。checkpoint 通过记录检查点信息、刷新脏页,能让恢复时更快定位重放起点,减少恢复时间;pg_switch_wal() 切换 WAL 日志文件并返回 LSN,方便在恢复时准确匹配备份和日志,确保能恢复到期望的时间点状态。
相互影响
   在一定程度上,checkpoint 的执行会影响 WAL 日志文件的状态,进而影响 pg_switch_wal() 函数调用的效果。例如,checkpoint 执行后截断了部分 WAL 日志,那么后续调用 pg_switch_wal() 切换后的新日志文件是基于截断后的状态开始记录的。反之,频繁调用 pg_switch_wal() 切换日志文件,也可能影响 checkpoint 对 WAL 日志的管理和截断判断



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-18 02:59 , Processed in 0.203445 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表