PostgreSQL WAL日志膨胀的处理过程

 更新时间:2024年12月01日 10:36:52   作者:施嘉伟  
PostgreSQL由于WAL日志的机制,导致其在不正确配置的情况下会出现磁盘空间暴涨的情况,本文档就此情景写一般处理办法,感兴趣的小伙伴跟着小编一起来看看吧

第一部分 描述

PostgreSQL由于WAL日志的机制,导致其在不正确配置的情况下会出现磁盘空间暴涨的情况,本文档就此情景写一般处理办法。

第二部分 场景复现及处理过程

2.1 基本描述

某一客户反映,有一个PostgreSQL数据库的数据目录增长非常大,500G的总磁盘空间,剩余23G,通过du -sh $PGDATA/*对数据目录进行统计分析,发现大部分的空间都被pg_wal目录占用,文件数量达到1w+。

2.2 查看相关配置

查看可能会造成原因的相关参数,checkpoint_timeout是可能造成wal大量生成的原因之一,当max_wal_size=20GB时,可能会出现在进行checkpoint之间,如果出现大事物或者写入量非常大的时候,最大可能会生成(20*1024)/16=1280个wal文件
适当调整后,发现由于事务量比较大,即使调小参数,还是会不断生成文件,接着查看归档是否出现问题

postgres=# show checkpoint_timeout ;
 checkpoint_timeout 
--------------------
 60min
(1 row)

postgres=# show max_wal_size ;
 max_wal_size 
--------------
 20GB
(1 row)

postgres=# show min_wal_size ;
 min_wal_size 
--------------
 80MB
(1 row)

postgres=# show wal_keep_size ;
 wal_keep_segments 
---------------
 128
(1 row)

2.3 查看归档配置

可以看到归档已经开启,检查归档路径是否存在,在pg_wal/ archive_status文件中记录wal文件的归档状态是否正常,检查下来都没有发现问题,如果说归档没有成功进行,wal日志也是无法移除造成空间迅增

postgres=# show archive_mode ;
 archive_mode 
--------------
 on
(1 row)

postgres=# show archive_command ;
                                  archive_command                                   
------------------------------------------------------------------------------------
 test ! -f /software/pgsql12/archivedir/%f && cp %p /software/pgsql12/archivedir/%f
(1 row)

2.4 查看是否有备库

查看是否有流复制环境,流复制环境中,主要靠wal日志进行主备同步,当主备环境之间差异过大,或者出问题后,造成主备没有同步,则会保留wal日志不进行删除。如果有差异的话,wal_keep_segments参数会生效,它会为备库保留相应数量的wal日志文件、甚至更多。

postgres=# select * from pg_stat_replication ;

确认没有备库环境

2.5 查看是否有复制槽

是否存在无效的复制槽,备库如果没有进行同步或者说没有消费wal日志,那么该复制槽不可用,wal日志也会一直保留,造成wal日志不断增加

postgres=# select * from pg_replication_slots;

查询到果然存在一个active状态为f的复制槽,我们尝试删除该复制槽

SELECT * FROM pg_drop_replication_slot('pg_102');

删除后,发现pg_wal空间不再增长,一段时间后已自动释放

到此这篇关于PostgreSQL WAL日志膨胀的处理过程的文章就介绍到这了,更多相关PostgreSQL WAL日志膨胀内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • postgresql 计算时间差的秒数、天数实例

    postgresql 计算时间差的秒数、天数实例

    这篇文章主要介绍了postgresql 计算时间差的秒数、天数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • postgreSQL中的内连接和外连接实现操作

    postgreSQL中的内连接和外连接实现操作

    这篇文章主要介绍了postgreSQL中的内连接和外连接实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL设置主键自增的方法详解

    PostgreSQL设置主键自增的方法详解

    在使用Mysql时,创建表结构时可以通过关键字auto_increment来指定主键是否自增,但在Postgresql数据库中,虽然可以实现字段的自增,但从本质上来说却并不支持Mysql那样的自增,所以本文给大家介绍了PostgreSQL如何设置主键自增,需要的朋友可以参考下
    2024-08-08
  • postgresql中如何执行sql文件

    postgresql中如何执行sql文件

    这篇文章主要介绍了postgresql中如何执行sql文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • PostgreSQL实现交叉表(行列转换)的5种方法示例

    PostgreSQL实现交叉表(行列转换)的5种方法示例

    这篇文章主要给大家介绍了关于PostgreSQL实现交叉表(行列转换)的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • 关于PostgreSql数据库与mysql数据库的不同点以及注意事项

    关于PostgreSql数据库与mysql数据库的不同点以及注意事项

    PostgreSQL和MySQL是两种流行的关系型数据库管理系统(RDBMS),它们都可以用来存储和管理数据,但是它们在某些方面有所不同,下面这篇文章主要给大家介绍了关于PostgreSql数据库与mysql数据库的不同点以及注意事项的相关资料,需要的朋友可以参考下
    2023-05-05
  • 如何查看postgres数据库端口

    如何查看postgres数据库端口

    这篇文章主要介绍了如何查看postgres数据库端口操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Postgresql psql文件执行与批处理多个sql文件操作

    Postgresql psql文件执行与批处理多个sql文件操作

    这篇文章主要介绍了Postgresql psql文件执行与批处理多个sql文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql重置序列起始值的操作

    postgresql重置序列起始值的操作

    这篇文章主要介绍了postgresql重置序列起始值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL+Pgpool实现HA主备切换的操作

    PostgreSQL+Pgpool实现HA主备切换的操作

    这篇文章主要介绍了PostgreSQL+Pgpool实现HA主备切换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论