[转帖]PostgreSQL WAL日志清理

postgresql,wal,日志,清理 · 浏览次数 : 0

小编点评

**WAL相关参数** * **wal_compression**: 设置wal压缩,默认值为`off`。 * **wal_log_hints**: 设置wal日志的提示,默认值为`off`。 * **wal_buffers**: 设置wal缓存大小,默认值为-1,表示使用操作系统缓存。 * **wal_writer_delay**: 设置wal写入延迟时间,默认值为200毫秒。 * **commit_delay**: 设置提交事务后等待wal日志写入磁盘的时间,默认值为0。 * **commit_siblings**: 设置多个事务提交后,必须等待至少该数个事务完成才能写入wal日志。 * **wal_buffer_size**: 设置wal缓存大小,默认值为16MB。 * **check_points**: 设置检查点的间隔时间,默认值为1分钟。 * **autovacuum**: 设置自动 vacuum 的周期,默认值为每天。 * **archive_control**: 设置wal存档控制选项,默认值为`off`。

正文

https://www.modb.pro/db/65309

pg_archivecleanup -d $PGDATA/pg_wal `pg_controldata $PGDATA |grep "REDO WAL" |awk '{print $6}'`

 

作者:崔鹏,曾获得中国PostgreSQL数据库管理高级工程师(PGCM),是PostgreSQL官方认证讲师,Mysql 5.7/8.0 OCP,Oracle 11g OCM。

 

 

WAL是Write Ahead Log的简写,10版本以后在$PGDATA/pg_wal目录中 10之前的版本在$PGDATA/pg_xlog.


 

# wal相关参数

#wal_compression = off

如果当全页写成为io瓶颈时,可以设置为on

#wal_log_hints = off

如果使用pg_rewind,需要设置为on

#wal_buffers = -1

默认-1会根据shared_buffers自动调整


 

打开这个选项的时候,PostgreSQL服务器在检查点之后对页面的第一次写入时将整个页面写到 WAL 里面。这么做是因为在操作系统崩溃过程中可能只有部分页面写入磁盘, 从而导致在同一个页面中包含新旧数据的混合。在崩溃后的恢复期间, 由于在WAL里面存储的行变化信息不够完整,因此无法完全恢复该页。把完整的页面影像保存下来就可以保证正确存储页面, 代价是增加了写入WAL的数据量。因为WAL重放总是从一个检查点开始的, 所以在检查点后每个页面第一次改变的时候做WAL备份就足够了。因此,一个减小全页面写开销的方法是增加检查点的间隔参数值。

#wal_writer_delay = 200ms

wal writer进程的间歇时间,过大的话,可能会造成wal buffer不足,过小的话wal会不断写入,可能会有io瓶颈

#commit_delay = 0

至少有commit_siblings个并发事务时,该事务提交后,wal日志将延迟commit_delay时间后再写入磁盘。可以合并其他事务进行组提交,所以当有大量事务的时候会延迟,而如果事务很稀少就不会再被延迟了。非0值的影响:减少IO,提高性能:事务执行commit后不会立即写入磁盘,而存放在WAL buffer中,崩溃数据面临着丢失的危险,可能引起WAL buffer内存不足,尤其是提交事务较多的高峰期

#commit_siblings = 5

延迟提交wal日志的最小并发事务数,决定参数commit_delay是否生效。假设值是5,表示数据库中正在执行的事务数大于或等于5,该事务提交后,wal日志将会存入wal buffer中,延迟commit_delay时间后再写入磁盘。如果数据库中正在执行的事务数小于5,这个事务提交后将wal日志直接写入磁盘。



自动清理wal条件
1.做检查点的时候
2.数据库启动的时候,或者修改了相关参数后重启数据库。

手动清理WAL
postgres@pgexp1-> pg_controldata
pg_control version number: 1201
Catalog version number: 201909212
Database system identifier: 6931137589662892022
Database cluster state: in production
pg_control last modified: Wed 03 Mar 2021 07:54:25 AM CST
Latest checkpoint location: 0/163CBD0
Latest checkpoint's REDO location: 0/163CB98
Latest checkpoint's REDO WAL file: 000000010000000000000003 #当前的时间线位置
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1
Latest checkpoint's full_page_writes: on

这里表示0/163CBD0检查点已经执行,已经包含在000000010000000000000003日志文件中,这个日志之前的日志是可以清理的。


可以手动使用系统命令rm -f清理

也可以使用pg_archivecleanup清理


保留000000010000000000000002之后的日志 

pg_archivecleanup opt/pg_root/pg_wal/  000000010000000000000002

与[转帖]PostgreSQL WAL日志清理相似的内容:

[转帖]PostgreSQL WAL日志清理

https://www.modb.pro/db/65309 pg_archivecleanup -d $PGDATA/pg_wal `pg_controldata $PGDATA |grep "REDO WAL" |awk '{print $6}'` 作者:崔鹏,曾获得中国PostgreSQL数据库

[转帖]PostgreSQL的xlog/Wal归档及日志清理

PostgreSQL的xlog/Wal归档及日志清理 https://www.modb.pro/db/86041 xlog/wal日志 类似于Oracle的redo, PostgreSQL 的redo文件被称为WAL文件或XLOG文件,存放在$PGDATA/pg_xlog 或($PGDATA/pg_

[转帖]PostgreSQL中切换WAL是否会触发checkpoint

https://www.modb.pro/db/570143?utm_source=index_ori 内容概述 Oracle数据库中切换redo日志会触发检查点事件,那么在PostgreSQL中是否也会触发checkpoint事件呢? Oracle中测试 [oracle@orcldb ~]$ sq

[转帖]PostgreSQL配置文件--WAL

2022-12-23 3.1 Settings 3.1.1 fsync 字符串 默认: fsync = on 开启后强制把数据同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的后恢复到一个一致的状态。 虽然关闭,可以提升数据库性能,但无法保证数据库崩溃后数据一致性。 通常情况下需要打开这个参数,除

[转帖]Barman安装及备份PostgreSQL

barman特点 零数据丢失备份。保证用户在只有一台备份服务器的情况下达到零数据丢失。 与备份服务器合作。允许备份服务器在与主服务器的流式复制不可用时,从barman获取wal文件。 可靠的监控集成。用于监控和创建有关Barman配置状态的报告。 可并行的备份和恢复。以更快的速度执行拷贝,加快了整个

[转帖]postgresql 编译选项 --with-uuid=e2fs、--with-uuid=ossp 的理解

postgresql 的 rpm 包使用的是 ‘–with-uuid=e2fs’ postgresql 源码 configure 的帮助选项有 uuid 的几个选项,有啥区别? # ./configure --help --with-uuid=LIB build contrib/uuid-ossp

[转帖]postgresql日志参数

https://www.jianshu.com/p/407c03aaa600 postgresql日志参数 logging_collector:这个参数启用日志收集器,它是一个捕捉被发送到stderr的日志消息的后台进程,并且它会将这些消息重定向到日志文件中;默认是OFF,修改参数需要重启。 log

[转帖]postgresql 的 pg_hba.conf 的行记录顺序

postgresql: 9.6 一直觉得 pg_hba.conf 的行记录与顺序无关,遵循细化优先的规则。今天在回顾 pg_hba.conf 文档时发现这种认识是错的。 下面这段话是从文档拷贝过来的: 因为每一次连接尝试都会顺序地检查pg_hba.conf记录,所以这些记录的顺序是非常关键的。通常,

[转帖]postgresql 的 .pgpass密码文件的使用

.pgpass 是 连接 postgresql 时使用的密码文件,通常位置为 ~/.pgpass。 在使用某些组件时还真的必须使用。具体的格式为: hostname:port:database:username:password 常见的使用如下: # su - postgres $ vi ~/.pg

[转帖]PostgreSQL进程结构

http://www.pgsql.tech/article_101_10000099 1、简介 本文简单的介绍了 PostgreSQL 的主要进程类型与功能。 2、PostgreSQL进程分为主进程与辅助进程。 2.1、主进程: PostMaster进程是整个数据库实例的总控进程,负责启动关闭该数据