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

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

作者:阎书利
xlog/wal日志
类似于Oracle的redo,PostgreSQL的redo文件被称为WAL文件或XLOG文件,存放在$PGDATA/pg_xlog或($PGDATA/pg_wal)目录中(PostgreSQL从10版本开始,将所用xlog相关的全部用wal替换了)。任何试图修改数据库数据的操作都会写一份日志到磁盘。
本文举例的数据库版本为(PostgreSQL)11.5

wal命名格式文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下:
00000001 00000000 00000001-------- -------- --------时间线     逻辑id    物理id
通过select pg_switch_xlog();或select pg_switch_wal();可以切换xlog/wal日志。

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

影响wal保存的最大个数的参数
checkpoint_segments和wal_keep_segments,checkpoint_completion_target
通常地说,WAL最大个数不超过:( 2 + checkpoint_completion_target ) * checkpoint_segments + 1在流复制环境下,WAL最大数不超过:wal_keep_segments + checkpoint_segments + 1
超过的话会自动清理。
默认的WAL segments为16M,这个参数在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  

表示000000010000000000000009之前的文件可以删除
2)通过pg_archivecleanup清理
[postgres@t1ysl bin]$ pg_archivecleanup -d $PGDATA/pg_wal 000000010000000000000009


规模空前,再创历史 | 2020 PG亚洲大会圆满结束
PG ACE计划的正式发布
三期PostgreSQL国际线上沙龙活动的举办
六期PostgreSQL国内线上沙龙活动的举办

中国PostgreSQL分会与腾讯云战略合作协议签订


PostgreSQL 13.0 正式版发布通告

深度报告:开源协议那些事儿

从“非主流”到“潮流”,开源早已值得拥有

Oracle中国正在进行新一轮裁员,传 N+6 补偿

PostgreSQL与MySQL版权比较

新闻|Babelfish使PostgreSQL直接兼容SQL Server应用程序

四年三冠,PostgreSQL再度荣获“年度数据库”


更多新闻资讯行业动态技术热点,请关注中国PostgreSQL分会官方网站

https://www.postgresqlchina.com

中国PostgreSQL分会生态产品

https://www.pgfans.cn

中国PostgreSQL分会资源下载站

https://www.postgreshub.cn


点赞在看分享收藏
文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论