PostgreSQL开启归档模式
基础信息
OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo)
DB版本:16.2
pg软件目录:/home/pg16/soft
pg数据目录:/home/pg16/data
端口:5777
1 查看数据库是否开启归档
当前数据库未开启归档模式。
[pg16@test ~]$ psql -p 5777
psql (16.2)
Type "help" for help.
postgres=# show archive_mode;
archive_mode
--------------
off
(1 row)
postgres=#
2 开启归档模式
–创建归档日志目录
[pg16@test ~]$ pwd
/home/pg16
[pg16@test ~]$ mkdir archivelog
–修改postgresql.conf配置文件
vi postgresql.conf
archive_mode = on #开启归档
archive_command ='cp %p /home/pg16/archivelog/%f'
–重启数据库
[pg16@test archivelog]$ pg_ctl restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2024-04-17 06:58:40.949 PDT [91871] LOG: redirecting log output to logging collector process
2024-04-17 06:58:40.949 PDT [91871] HINT: Future log output will appear in directory "log".
done
server started
–确认
[pg16@test archivelog]$ psql -p 5777
psql (16.2)
Type "help" for help.
postgres=# show archive_mode;
archive_mode
--------------
on
(1 row)
postgres=# SELECT pg_switch_wal();
pg_switch_wal
---------------
0/A000078
(1 row)
–查看归档目录,已经有归档日志。目前的配置是最简单的,后期可以进行优化,比如每天的归档日志独立放在一个目录。
[pg16@test archivelog]$ pwd
/home/pg16/archivelog
[pg16@test archivelog]$ ll
total 147456
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000002
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000003
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000004
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000005
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000006
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000007
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000008
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 000000010000000000000009
-rw------- 1 pg16 pg16 16777216 Apr 17 07:16 00000001000000000000000A
3 归档日志切换频率
PostgreSQL中的归档切换频率主要取决于两个因素:当前的WAL(Write-Ahead Logging)段文件填满的速度,以及是否手动触发WAL切换。WAL归档是PostgreSQL用于保证数据完整性和支持点对点恢复(PITR)的一种机制。它工作的原理是先将数据变更记录在WAL文件中,然后再将这些变更应用到实际的数据库文件上。当WAL文件被写满后,PostgreSQL会切换到新的WAL文件,同时旧的文件可以被归档。
归档切换的条件有两种:
-
WAL段文件填满:默认情况下,一个WAL段文件的大小是16MB(对于PostgreSQL 10及以前的版本,或者当你在更高版本中未更改配置时)。一旦这个文件被填满,系统会自动切换到新的WAL段,这个过程中旧的WAL文件将被归档(如果已经开启了归档模式并提供了归档命令
archive_command
)。 -
手动触发WAL切换:通过执行
SELECT pg_switch_wal();
(在PostgreSQL 10以后的版本,旧版本使用SELECT pg_switch_xlog();
),管理员可以手动触发WAL的切换。这在某些维护操作或在某些特定的业务逻辑实施前是有用的,如在进行大规模数据导入前做一次切换,以便容易地区分不同操作产生的WAL。
归档切换的频率受多种因素影响,包括:
- 数据库的写入负载:在写入密集型应用中,WAL文件填满的速度更快,导致归档切换的频率较高。
- WAL段文件的大小:管理员可以通过调整配置参数
wal_segment_size
来更改WAL段文件的大小(PostgreSQL 11及以后的版本)。较大的文件可能减少归档的频率,但在故障恢复时可能需要更多的时间和资源。 - 应用程序的行为:特定类型的操作,如大量的批量插入或更新,会更频繁地填满WAL文件。
频率调整和管理
虽然通常系统默认的配置足够应对大多数情况,但基于特定的业务需求和系统负载,有时需要调整归档策略以达到最佳的性能和数据安全性平衡。这包括调整WAL段文件大小、优化archive_command
的性能,或者更智能地触发手动WAL切换。
谨记:心存敬畏,行有所止。