目录

PostgreSQL WAL 日志

pg_wal(Write-AHead Logging)

wal日志位置: $PGDATA/pg_wal(pg10之前叫pg_xlog)

1
export PGDATA=/var/lib/pgsql/9.6/data
1
/usr/pgsql-9.6/bin/pg_controldata -D /var/lib/pgsql/9.6/data/
Latest checkpoint location:           E1/6D48F3F8
Prior checkpoint location:            E1/6D2FA098
Latest checkpoint's REDO location:    E1/6D4364E0
Latest checkpoint's REDO WAL file:    00000001000000E10000006D

00000001000000E10000006D 之前的 pg_wal 文件可以删除

如果你的数据库配置不当,导致pg_wal文件堆积的话,如何人为的处理呢?

比如你配置了archive_mode=on,但是没有配置archive_command,那么xlog文件会一直堆积(pg_wal写完后,会写.ready,但是由于没有配置archive_command,也就是说不会触发归档命令,所以一直都不会写.done)。

从而导致pg_wal一直不会被清理。

然后使用pg_archivecleanup命令来清理。

1
/usr/pgsql-9.6/bin/pg_archivecleanup -d $PGDATA/pg_xlog 00000001000000E10000006D

如何关闭或修改归档模式

  • 修改archive_mode配置

    当启用archive_mode时,通过设置archive_command将已完成的WAL段发送到归档存储。除了off,disable,还有两种模式:on,always。在正常操作期间,两种模式之间没有区别,但是当设置为always的情况下,WAL archiver在存档恢复或待机模式下也被启用。在always模式下,从归档还原或流式复制流的所有文件都将被归档(再次)。archive_mode和archive_command是单独的变量,因此可以在不更改存档模式的情况下更改archive_command。此参数只能在服务器启动时设置。当wal_level设置为minimal时,无法启用archive_mode。

  • 修改wal_level配置

    • 1、minimal是默认的值,它仅写入崩溃或者突发关机时所需要的信息(不建议使用)。
    • 2、archive是增加wal归档所需的日志(最常用)。
    • 3、hot_standby是在备用服务器上增加了运行只读查询所需的信息,一般实在流复制的时候使用到。
  • 修改archive_command配置

    请参考

max_slot_wal_keep_size https://postgresqlco.nf/doc/en/param/max_slot_wal_keep_size/13/

指定在检查点时复制槽允许保留在pg_wal目录中的 WAL 文件的最大大小。如果max_slot_wal_keep_size为 -1(默认值),则复制槽可能会保留无限量的 WAL 文件。否则,如果复制槽的 restart_lsn 落后于当前 LSN 超过给定大小,则使用该槽的备用服务器可能由于删除所需的 WAL 文件而不再能够继续复制。您可以在pg_replication_slots中查看复制槽的 WAL 可用性。

https://www.cnblogs.com/binliubiao/p/15308263.html