暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

PostgreSQL的xlog/Wal归档及日志清理

原创 ysl 2021-07-21
2257

xlog/wal日志

类似于Oracle的redo, PostgreSQL 的redo文件被称为WAL文件或XLOG文件,存放在PGDATA/pg_xlog 或(PGDATA/pg_wal)目录中( Postgresql 从 10 版本开始,将所用xlog相关的全部用wal替换了)。 任何试图修改数据库数据的操作都会写一份日志到磁盘。
本文举例的数据库版本为 (PostgreSQL) 11.5
image.png
wal命名格式文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下:

00000001 00000000 00000001
-------- -------- --------
时间线     逻辑id    物理id
复制

通过select pg_switch_xlog();或select pg_switch_wal();可以切换xlog/wal日志。
image.png

归档目录

如果开启了归档,则在归档路径下的archive_status目录里, 会有类似000000010000000000000002.ready和000000010000000000000003.done的文件。
.ready表示XLOG文件已写满,可以调用归档命令了,.done表示已归档完成。开启了归档后,只有归档成功的pg_xlog文件才会被清除。在每次归档命令被执行后,会触发清除标签的动作,在执行检查点时,也会触发清除归档标签文件的动作。
image.png

影响wal保存的最大个数的参数

checkpoint_segments 和 wal_keep_segments,checkpoint_completion_target

通常地说,WAL 最大个数不超过:
( 2 + checkpoint_completion_target ) * checkpoint_segments + 1

在流复制环境下, WAL 最大数不超过:
wal_keep_segments + checkpoint_segments + 1

如果一个旧段文件不再需要了会重命名然后继续覆盖使用,如果由于短期的日志输出高峰导致了超过
3 * checkpoint_segments + 1个文件,直接删除文件。
复制

默认的 WAL segments 为 16 M, 这个参数在PG 编译执行 ./configure 时,指定 “–with-wal-segsize=target_value” 参数设置。

手动清理wal(通常情况下尽量让数据库自动清理,避免错误操作)

如果配置了archive_mode=on,但是没有配置archive_command,那么xlog文件会一直堆积(xlog写完后,会写.ready,但是由于没有配置archive_command,也就是说不会触发归档命令,所以一直都不会写.done),所以xlog会一直不清理。
1)读取控制文件,找到能清理的xlog范围

pg_controldata $PGDATA  
复制

image.png
表示000000010000000000000009之前的文件可以删除

2)通过pg_archivecleanup清理

[postgres@t1ysl bin]$ pg_archivecleanup -d $PGDATA/pg_wal 000000010000000000000009
复制

image.png

最后修改时间:2021-10-13 15:20:08
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论