文章目录
- 环境
- 文档用途
- 详细信息
环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 8,Linux x86-64 Red Hat Enterprise Linux 7
版本:9.0,6.0,4.5
文档用途
在具备高并发写入的生产环境中,PostgreSQL 会产生大量WAL日志(WAL)。默认情况下,每个 WAL 段文件的大小为16MB。如果直接使用操作系统命令(如 cp)进行归档,可能消耗大量的备份存储空间及跨机房传输的网络带宽。
由于 WAL 文件内部通常包含大量可压缩的重复数据,可以考虑在归档过程中进行压缩:利用 PostgreSQL 归档机制调用操作系统原生的 gzip 压缩工具,在归档写入目标路径前对其进行流式压缩,通常可节省 70% ~ 90% 的物理归档存储空间。
详细信息
一 解决方案与说明
1.1 配置数据库归档参数
确认数据库已启用归档模式:
show archive_mode;配置归档命令 archive_command
-- 配置 gzip 流式压缩归档命令ALTERSYSTEMSETarchive_command='gzip < %p > /mnt/server/archivedir/%f.gz'-- 重新加载配置使其生效SELECTpg_reload_conf();注意:里面的 ‘<’ 和 ‘>’ 表示linux中的输入和输出重定向符,不要修改!!
机制解析:
在此命令中,gzip < %p 会将源 WAL 文件的内容作为数据流读入压缩引擎,并通过 > /mnt/server/archivedir/%f.gz 将压缩后的数据流写入目标文件。这种方式较为安全,因为它不会对源目录 pg_wal 中的原始 WAL 文件执行任何修改或删除操作,源文件的清理仍由 PostgreSQL 检查点(Checkpoint)机制自主管理。
1.2 配置恢复命令参数
在进行时间点恢复(PITR)时,数据库需要读取上述已被压缩的 .gz 归档文件。
操作步骤: 在恢复配置文件(内核PG 12及以上是 postgresql.conf)中进行如下配置:
-- 配置 gunzip 流式解压恢复命令restore_command='gunzip < /mnt/server/archivedir/%f.gz > %p'机制解析:
当数据库引擎请求名为 %f 的 WAL 文件时,gunzip 会读取归档目录下的 .gz 压缩包,并将其解压写入到内核指定的恢复路径 %p 中,从而完成日志重放。
二 注意事项
归档压缩实际是以CPU换磁盘资源
- 使用gzip算法对 CPU 具有一定消耗。此方案等同于用数据库服务器的 CPU 资源换取磁盘资源。如果数据库服务器 CPU 负载长期处于高位(>70%),归档压缩可能导致业务运行缓慢,并导致 WAL 延迟并堆积。
- 归档解压需要时间,在整体运维方案中,还需要考虑解压过程中的时间消耗,评估能否满足PITR故障恢复的时间要求。