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

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

小编点评

**PostgreSQL xlog/Wal归档及日志清理** **简介** xlog/Wal是PostgreSQL数据库的日志文件,类似于Oracle的redo。它包含数据库变更的操作记录,用于恢复数据库状态。 **归档目录** 当启用归档时,xlog文件会被存放在以下目录中: - `/$PGDATA/pg_xlog`(版本10版本之前) - `/$PGDATA/pg_wal`(版本10版本开始) **每8个字符的命名格式** 每个归档文件包含一个8字节的命名,该格式表示文件的逻辑位置。每组的意义如下: - 00000001 00000000 00000001-------- -------- --------时间线 逻辑id 物理id **归档过程** 每次修改数据库数据的操作都会创建一个日志条目到xlog/Wal文件中。当归档命令执行完毕时,只有归档成功的xlog文件才会被清除。 **清理wal** 在配置了archive_mode=on且没有配置archive_command的情况下,xlog文件会一直堆积。为了清理wal,可以使用以下命令: ```sql pg_archivecleanup -d $PGDATA/pg_wal 000000010000000000000009 ``` **参数** 以下参数影响wal保存的最大数量: - `checkpoint_segments` - `wal_keep_segments` - `checkpoint_completion_target` **默认值** `checkpoint_segments` = 16 M `wal_keep_segments` = `checkpoint_segments` + 1 `checkpoint_completion_target` = (2 + `checkpoint_completion_target`) * `checkpoint_segments` + 1 **注意** 要手动清理wal,请确保配置了archive_mode=on且没有配置archive_command。

正文

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

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

 

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

超过的话会自动清理。
默认的 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

与[转帖]PostgreSQL的xlog/Wal归档及日志清理相似的内容:

[转帖]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 的 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的MVCC vs InnoDB的MVCC

任何一个数据库最主要功能之一是可扩展。如果不删除彼此,则尽可能较少锁竞争从而达到这个目的。由于read、write、update、delete是数据库中最主要且频繁进行的操作,所以并发执行这些操作时不被阻塞则显得非常重要。为了达到这种目的,大部分数据库使用多版本并发控制(Multi-Version

[转帖]postgresql 的一些变量和密码文件

https://www.cnblogs.com/ctypyb2002/p/9792872.html 一些变量 下列环境变量能被用于选择默认的连接参数值,如果调用代码没有直接指定值,它们将被用于PQconnectdb、PQsetdbLogin和PQsetdb。例如,这些有助于防止数据库连接信息被硬编码

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

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

[转帖]PostgreSQL 的性能调优方法

https://juejin.cn/post/7119489847529570334 浅谈PostgreSQL的性能调校 PostgreSQL的性能调校是指调校数据库以提高性能和快速访问数据;我们可以通过调校查询和数据库性能相关的参数来调校PostgreSQL的数据库性能。为了提高性能,我们需要通过

[转帖]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进程结构

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

[转帖]PostgreSQL中的schema和user

https://www.cnblogs.com/abclife/p/13905336.html postgresql中,用户创建的所有对象都被创建在指定的schema(或namespace)中。其他用户可能拥有、也可能不拥有访问这些对象的权限,甚至都不可以在对应的schema中创建对象。 从上面的表