这几天bbs里提了几个关于 WAL 归档的问题,提的问题越来越深入了,其中有个问题大概是这样的:在开启归档的情况下,PostgreSQL 什么情况会触发 WAL 日志归档? 对于这个问题,简单的实验了下,稍后会总结,先来看配置情况。
环境信息
1.1 PostgreSQL 版本
PostgreSQL 9.3.0
1.2 postgresql.conf
1 |
wal_level = hot_standby |
1.3 归档目录
1 |
[pg93@redhatB pg93]$ pwd |
备注:归档目录为 “/archive/pg93”,归档脚本为 archive_command 设置的内容,回到本文的问题:什么情况下会触发归档? 经观察只要发生了 WAL 日志切换时,就会触发归档,更进一步分析,目前想到了以下三种切换 WAL 日志的方法。
方法一: 手动切换 WAL 日志
PostgreSQL 提供 pg_switch_xlog() 函数可以手工切换 WAL 日志,如下:
手动归档
1 |
[pg93@redhatB ~]$ psql |
备注:执行 pg_switch_xlog() 后,WAL 会切换到新的日志,这时会将老的 WAL日志归档,这里归档到 /archive/pg93 目录。
方法二: WAL 日志写满后触发归档
WAL 日志被写满后会触发归档,文档在说明配置参数 archive_command 时的第一句说就说明了这点,WAL 日志文件默认为 16MB,这个值可以在编译 PostgreSQL 时通过参数 “–with-wal-segsize” 更改,编译后不能修改。
方法三: 设置 archive_timeout
另外可以设置archive 超时参数 archive_timeout ,假如设置 archive_timeout=60 ,那么每 60 s ,会触发一次 WAL 日志切换,同时触发日志归档,这里有个隐含的假设: 当前 WAL 日志中仍有未归档的 WAL 日志内容,有兴趣的朋友可以自己测试下。
参考
- pg_switch_xlog()
- archive_command (string)
- archive_timeout (integer)
- PostgreSQL:关于 archive_command 归档命令
- How to estimate total number of WAL segments ?
原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/tech/database/238013.html