PostgreSQL 逻辑复制异常引发Pg_wal目录膨胀一例
发布网友
发布时间:2024-10-01 02:28
我来回答
共1个回答
热心网友
时间:2024-11-17 10:36
问题描述:
在PostgreSQL数据库的运维中,遇到了一个WAL文件急剧膨胀的问题,导致pg_wal目录的文件数量激增到7万余个,几乎填满了硬盘空间,导致数据库无法访问。为了解决这个问题,运维人员尝试删除了pg_wal目录中十天前的文件,尽管这在理论上会引发数据库故障,但出乎意料的是,数据库仍能正常运行。
在排查过程中,首先检查了pg_log日志和活跃会话,没有发现明显的异常。接着,确认了CPU和内存使用率正常,数据库负载也正常。归档情况看起来也一切正常,但发现wal_keep_segments参数未设置且checkpoint_timeout设置过小,于是建议将其调整。然而,即使做了这些调整并执行了checkpoint,WAL文件数量并未减少,反而继续增加。
进一步检查发现,有两个逻辑复制槽的active状态异常,这可能是问题的根源。在维护窗口中,删除了这两个复制槽后,pg_wal目录的文件数量迅速下降,问题得到了解决。这次事件提醒了运维人员,对于逻辑复制的维护经验还有待提升,决定在测试环境中重现问题以加深理解。
模拟WAL膨胀的实验中,通过在两个虚拟机上设置逻辑复制环境,调整wal_keep_segments参数,并在压力测试下观察源库的WAL文件情况,成功重现了问题。这证实了逻辑复制槽的异常状态是导致WAL文件膨胀的关键因素。
针对这种情况,运维人员应该在设置wal_keep_segments和checkpoint_timeout参数时更加谨慎,并及时监控复制槽的状态,以防止类似问题的再次发生。