You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL服务器优雅关闭前WAL归档量及关闭耗时预估咨询

查看待归档的WAL文件数量/大小

可通过PostgreSQL内置系统视图与函数获取待归档WAL的相关信息:

  • 借助pg_stat_archiver视图:该视图记录归档进程的运行统计,通过对比当前WAL位置与最后归档的WAL位置,可计算待归档数量:
    1. 获取最后归档的WAL文件名:SELECT last_archived_wal FROM pg_stat_archiver;
    2. 获取当前正在写入的WAL文件名:SELECT pg_walfile_name(pg_current_wal_lsn());
    3. WAL文件名按序列递增(如0000000100000000000000A1与0000000100000000000000A5),两者间的文件数即为待归档数量。
  • 使用pg_ls_waldir()函数:列出WAL目录下所有文件,结合pg_stat_archiver筛选待归档文件:
    SELECT count(*) AS pending_archive_count,
           sum(size) AS pending_archive_size_bytes
    FROM pg_ls_waldir()
    WHERE name > (SELECT last_archived_wal FROM pg_stat_archiver)
      AND name ~ '^[0-9A-F]{24}$'; -- 过滤合法WAL文件,排除临时文件等
    
    若归档进程从未运行(last_archived_wal为NULL),则所有非当前写入的WAL文件均属于待归档范围。
预估优雅关闭的耗时

优雅关闭的主要耗时来自检查点完成与剩余WAL归档两部分,可通过系统表统计数据粗略预估:

  • 检查点耗时预估:查看pg_stat_bgwriter视图的历史检查点统计:
    SELECT avg(checkpoint_write_time) AS avg_checkpoint_write_ms,
           avg(checkpoint_sync_time) AS avg_checkpoint_sync_ms
    FROM pg_stat_bgwriter;
    
    两个平均值的总和可作为检查点阶段的参考耗时。若当前距离上一次检查点的WAL量较大(通过pg_current_wal_lsn() - pg_last_checkpoint_lsn()计算字节数),实际耗时可能高于平均值。
  • 归档耗时预估:结合待归档WAL总大小与历史归档速率:
    1. 从pg_stat_archiver获取总归档数据与时间:
      SELECT total_archived_bytes,
             EXTRACT(EPOCH FROM now() - stats_reset) AS total_archive_seconds
      FROM pg_stat_archiver;
      
    2. 计算历史归档速率:total_archived_bytes / total_archive_seconds(单位:字节/秒)
    3. 用待归档WAL总大小除以速率,得到归档阶段的预估耗时。
  • 注意:实际耗时还受磁盘IO性能、网络带宽(若归档至远程存储)、系统负载等因素影响,以上仅为基于历史数据的粗略参考。

内容的提问来源于stack exchange,提问作者user1396267

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:15:27