网站建设 - 碧诺网络,成都网站建设索q479185700,企业微信怎么注册,单页营销网站一、 注意事项 pg_archivecleanup代码中仅进行了wal日志文件名的对比#xff0c;没有实现对WAL日志名及对应生成时间的判断。在WAL日志未被重命名时#xff0c;时间与日志名顺序名一致#xff0c;没有问题。一旦WAL日志被重命名#xff0c;pg_archivecleanup清理就可能清理…一、 注意事项 pg_archivecleanup代码中仅进行了wal日志文件名的对比没有实现对WAL日志名及对应生成时间的判断。在WAL日志未被重命名时时间与日志名顺序名一致没有问题。一旦WAL日志被重命名pg_archivecleanup清理就可能清理掉比指定文件更新的WAL日志。 因此在涉及主从尤其是有lag的情况下非必要不建议使用。 if ((IsXLogFileName(walfile) || IsPartialXLogFileName(walfile)) strcmp(walfile 8, exclusiveCleanupFileName 8) 0){char WALFilePath[MAXPGPATH * 2]; /* the file path* including archive */
...rc unlink(WALFilePath);if (rc ! 0){pg_log_error(could not remove file \%s\: %m,WALFilePath);break;}} 二、 清理步骤 真正到了必要的时刻例如剩余磁盘空间已不足10%甚至5%必须先检查从库所需日志与待清理日志间的新旧。
1. 检查从库所需日志 select pg_walfile_name(sent_lsn) sent_wal,pg_walfile_name(write_lsn) write_wal,pg_walfile_name(replay_lsn) replay_wal,write_lag,replay_lag from pg_stat_replication ; sent_wal | write_wal | write_lag ---------------------------------------------------------------------- 00000003001281A1000000BE | 00000003001281A1000000BD | 02:16:25.554727 (1 row) 以上面结果为例write_wal 是从库正在接收的最新日志理论上从write_wal 对应日志往前推就可以安全起见可以再往前推一段。 2. 确认待清理日志 例如当前write_wal为 00000003001281A1000000BD那么清理00000003001281A100000000之前的日志应该是安全的。
检查两个文件是否存在 -bash-4.2$ cd $PGDATA/pg_wal -bash-4.2$ ll -h 00000003001281A1000000BD -rw-------. 1 postgres dba 16M Jul 24 08:57 00000003001281A1000000BD -bash-4.2$ -bash-4.2$ ll -h 00000003001281A100000000 -rw-------. 1 postgres dba 16M Jul 24 08:56 00000003001281A100000000 3. dryrun pg_archivecleanup
先检查运行命令之后哪些文件将会被清理有没有大于write_wal的。当然在删除量特别大时基本只能抽查或者搜索。 pg_archivecleanup -d -n $PGDATA/pg_wal 00000003001281A100000000 4. 清理日志
真正执行清理 pg_archivecleanup -d $PGDATA/pg_wal 00000003001281A100000000 5. 清理后检查
检查主从延迟是否还正常运行若已中断则下面查询无结果 select * from pg_stat_replication; 检查旧日志是否已清理
根据前面-n或者-d的输出抽查一些日志看是否还存在检查磁盘空间是否已释放。