原文: https://postgres.fun/20200628070600.html
故障现象
前几天一位社区朋友咨询一个PostgreSQL的WAL文件膨胀案例,他们有个生产库最近几天pg_wal
目录的WAL文件爆涨到了7万多个,把硬盘空间撑满,造成数据库故障无法访问。
为了应急,这位朋友删除了pg_wal
目录下十天前的wal文件,将硬盘空间使用率降下来,使得数据库恢复,但pg_wal
目录下的WAL文件依然涨得很快。
数据库环境信息如下:
数据库版本: PostgreSQL 11.2
数据库大小: 大于1TB
操作系统: CentOS 7.4
硬件环境: HPE DL560 gen10 + 全闪存(3par 8440)
其它信息: 单实例,配置了逻辑复制
排查过程
首先,pg_wal
目录下的wal文件为在线WAL日志,不能删除,删除后数据库大概率会故障,这位朋友删除了pg_wal
目录10天前的WAL文件,数据库居然还活着,我表示非常吃惊。
既然数据库还活着,已提醒他做好数据库备份,以防万一。
关于WAL文件膨胀,我们的排查步骤如下: 1、首先排查数据库pg_log日志文件,没有发现有价值的信息。
2、查看数据库活动会话,排查是否有长事务和慢查询,没有发现长事务和慢查询。
3、查看数据库主机性能,CPU、内存使用率正常,数据库负载正常。
4、查看数据库归档情况,发现数据库归档正常,归档相关参数如下:
archive_mode = on # enables archiving; off, on, or always
# (change requires restart)
archive_command = 'cp --backup %p /log/archive_log/%f' # command to use to archive a logfile segment
5、查看WAL相关参数设置,如下:
wal_keep_segments = 0 # in logfile segments; 0 disables
checkpoint_timeout = 5min # range 30s-1d
发现 wal_ke