PG Wal 日志清理
1.wal日志介绍
WAL是Write Ahead Log的简写,和oracle的redo日志类似,存放在$PGDATA/pg_wal目录中,如果开启了归档,在目录archive_status下会有一些文件,以ready结尾的,表示可以归档但还没有归档,done结尾的表示已经归档。
2.wal 相关的参数
#wal_segment_size --报告预写日志段的大小。默认值为 16MB
#wal_keep_segments --指定保存在pg_wal目录中的过去日志文件段的最小数量,以防备用服务器需要获取它们以进行流复制。pg13改为wal_keep_segments
#checkpoint_completion_target = 0.5 --指定检查点完成的目标,作为检查点之间总时间的一部分。默认值为 0.5
#checkpoint_timeout=300 --自动 WAL 检查点之间的最长时间。如果指定此值没有单位,则以秒为单位。有效范围在 30 秒到 1 天之间。默认值为五分钟 ( 5min)。
#max_wal_size = 1GB --最大不超过这个值 ,在自动检查点期间让 WAL 增长的最大大小。这是一个软限制;WAL 大小max_wal_size在特殊情况下可能会超出,例如重负载、失败archive_command或高wal_keep_segments设置。如果此值指定为不带单位,则以兆字节为单位。默认值为 1 GB。
#min_wal_size = 80MB --最小保留这个值,只要 WAL 磁盘使用率低于此设置,旧的 WAL 文件总是在检查点被回收以供将来使用,而不是被删除。这可用于确保保留足够的 WAL 空间来处理 WAL 使用中的峰值,例如在运行大型批处理作业时。如果此值指定为不带单位,则以兆字节为单位。默认值为 80 MB。
3.清理方式
3.1.wal 自动清理
#软件限制,当日志达到这个最大值时,会做一个检查点。
postgres=# show max_wal_size;
max_wal_size
--------------
8GB
(1 row)
# 保存多个日志
在PG13以前,我们能过wal_keep_segments 设置保存日志大小,在PG13后参数改为wal_keep_size
postgres=# show wal_keep_segments
postgres-# ;
wal_keep_segments
-------------------
128
(1 row)
#每个日志大小
postgres=# show wal_segment_size ;
wal_segment_size
------------------
16MB
(1 row)
[postgres@LXUATEDPD2 wal]$ ls -lrt 000* | wc -l
512
512*16MB(wal_segment_size) = 8192MB = 8G (max_wal_size)
** 注意 **
- 当 max_wal_size/wal_segment_size 与 wal_keep_segments 这两个谁大保存谁
- 只有当在做检查点时才会去清理日志
- wal 日志里的 archive_status 里的状态比 pg_controldata $PGDATA 新, pg_controldata 只是在做检查 点时才会去更新。
3.2.wal手动清理
[postgres@LXUATEDPD2 log]$ pg_controldata $PGDATA
pg_control version number: 1201
Catalog version number: 201909212
Database system identifier: 7080150410741737694
Database cluster state: in production
pg_control last modified: Fri 08 Apr 2022 09:22:12 AM HKT
Latest checkpoint location: 17/3F000028
Latest checkpoint's REDO location: 17/3F000028
Latest checkpoint's REDO WAL file: 00000001000000170000003F
Latest checkpoint's TimeLineID: 1
Latest checkpoint's PrevTimeLineID: 1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID: 0:2180
Latest checkpoint's NextOID: 32768
Latest checkpoint's NextMultiXactId: 1
Latest checkpoint's NextMultiOffset: 0
Latest checkpoint's oldestXID: 480
Latest checkpoint's oldestXID's DB: 1
Latest checkpoint's oldestActiveXID: 2176
Latest checkpoint's oldestMultiXid: 1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint: Fri 08 Apr 2022 09:22:05 AM HKT
Fake LSN counter for unlogged rels: 0/3E8
Minimum recovery ending location: 0/0
Min recovery ending loc's timeline: 0
Backup start location: 0/0
Backup end location: 0/0
End-of-backup record required: no
wal_level setting: replica
wal_log_hints setting: on
max_connections setting: 2000
max_worker_processes setting: 128
max_wal_senders setting: 10
max_prepared_xacts setting: 0
max_locks_per_xact setting: 64
track_commit_timestamp setting: off
Maximum data alignment: 8
Database block size: 16384
Blocks per segment of large relation: 65536
WAL block size: 8192
Bytes per WAL segment: 16777216
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 4044
Size of a large-object chunk: 4096
Date/time type storage: 64-bit integers
Float4 argument passing: by value
Float8 argument passing: by value
Data page checksum version: 1
Mock authentication nonce: 4e7ad0bd2ddb2077bf0b5dceabbac911be4ef1e72634f197b5e433f4e70773ea
# 清理指定 wal 日志以前的日志
[postgres@LXUATEDPD2 wal]$ pg_archivecleanup -d /db_log/wal 00000001000000170000003F
pg_archivecleanup: keeping WAL file "/db_log/wal/00000001000000170000003F" and later
4.触发检查点的情况
1.从前一个检查点发生过后的时间超过checkpoint_timeout设置的间隔(默认间隔为300秒(5分钟))。
2.在新版本(9.5以后)当max_wal_size 大于pg_wal总和时,会触发检查点
3.PostgreSQL服务在smart和fast模式下停止。
4.手动执行checkpoint
5.数据库recover完成
标签:
cqdba
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~