Postgres WAL文件没有被删除

时间:2018-03-28 16:39:33

标签: postgresql

我有以下命令用于存档

archive_command = 'rsync -av %p /home/archive/%f'  

我们从那里清理文件。

但问题是,在将文件复制到存档文件夹后,它不会从/var/lib/pgsql/9.6/data/pg_xlog中删除。

我在Postgres日志中没有看到任何错误。 这是Postgres 9.6,具有一个主要的备用配置。

此外,了解在处理这些旧文件后删除这些旧文件的过程会很有帮助。

2 个答案:

答案 0 :(得分:4)

有几个原因导致WAL文件无法从pg_xlog中删除:

  • max_wal_size设置为高于pg_xlog中的WAL数量。

  • wal_keep_segments设置为高于pg_xlog中的WAL文件数。

  • WAL位置上的复制槽比WAL文件旧。

要了解复制槽,请尝试以下查询:

SELECT slot_name,
       lpad((pg_control_checkpoint()).timeline_id::text, 8, '0') ||
       lpad(split_part(restart_lsn::text, '/', 1), 8, '0') ||
       lpad(substr(split_part(restart_lsn::text, '/', 2), 1, 2), 8, '0')
       AS wal_file
FROM pg_replication_slots;

这将为您提供每个复制槽仍需要的最旧WAL文件的名称。

答案 1 :(得分:4)

我遇到了同样的问题。我删除了最旧的复制插槽,postgres清理了pg_xlog。

postgres=# SELECT slot_name,
   lpad((pg_control_checkpoint()).timeline_id::text, 8, '0') ||
   lpad(split_part(restart_lsn::text, '/', 1), 8, '0') ||
   lpad(substr(split_part(restart_lsn::text, '/', 2), 1, 2), 8, '0')
   AS wal_file
FROM pg_replication_slots;
slot_name |         wal_file
-----------+--------------------------
 postgres2 | 0000000100000000000000B0
(1 row)

postgres=# select pg_drop_replication_slot('postgres2');
 pg_drop_replication_slot
--------------------------

(1 row)
相关问题