PostgreSQL配置文件--WAL

本文详细探讨了PostgreSQL的WAL(Write-Ahead Log)配置,包括设置如fsync, wal_level, wal_buffers等对数据库性能的影响,检查点checkpoint的设置如checkpoint_timeout, checkpoint_completion_target,以及归档Archiving的相关参数如archive_mode和archive_command,全面解析如何优化PostgreSQL的WAL以确保数据安全和性能。" 94416878,7242844,XLNet深度解析:超越BERT的最新NLP模型,"['自然语言处理', '深度学习', '预训练模型', 'Transformer']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3 WAL WRITE AHEAD LOG

3.1 Settings

3.1.1 fsync

字符串
默认: fsync = on   
开启后强制把数据同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的后恢复到一个一致的状态。
虽然关闭,可以提升数据库性能,但无法保证数据库崩溃后数据一致性。
通常情况下需要打开这个参数,除非能经受掉电或硬件故障带来的数据丢失,否则不要关闭。

3.1.2 wal_level

字符型
默认: wal_level = replica ,minimal、replica、logical三选一
重启数据库生效
预写日志模式
minimal是仅写入崩溃或者突发关机时所需要的信息
replica增加wal归档信息,包括只读服务器需要的信息。(9.6中新增,将之前版本的 archive 和 hot_standby 合并)
logical主要用于logical decoding场景
在写入频繁的场景中,会产生大量的WAL日志,而且WAL日志量会远远超过实际更新的数据量。叫做“WAL写放大”。
造成WAL写放大的主要原因有2点。
    1、在checkpoint之后第一次修改页面,需要在WAL中输出整个page,即全页写(full page writes)。全页写的目的是防止在意外宕机时出现的数据块部分写导致数据库无法恢复。
    2、更新记录时如果新记录位置(ctid)发生变更,索引记录也要相应变更,这个变更也要记入WAL。更严重的是索引记录的变更又有可能导致索引页的全页写,进一步加剧了WAL写放大。
过量的WAL输出会对系统资源造成很大的消耗,因此需要进行适当的优化。
    1. 磁盘IO:WAL写入是顺序写,通常再差的硬盘对付WAL的写入速度也是绰绰有余。所以一般可以忽略。
    2. 网络IO:对局域网内的复制估计还不算问题,远程复制就难说了。
    3. 磁盘空间:如果做WAL归档,需要的磁盘空间也是巨大的。 
版本小于或等于9.6的配置为:
    minimal是仅写入崩溃或者突发关机时所需要的信息(不建议使用)。
    archive是增加wal归档所需的日志(最常用)。
    hot_standby是在备用服务器上增加了运行只读查询所需的信息,一般实在流复制的时候使用到。

3.1.3 wal_buffers

数字型
默认: wal_buffers = -1 ,最小值32kB,-1表示和shared_buffers共用。
重启数据库生效

用于存放WAL数据的内存空间(日志缓存区的大小)。最小32K。
执行一个大事务肯定受到影响,应该适当的增大该参数,降低IO。
如果比较多的并发短事务,应该考了设置commit_delay、commit_siblings。

3.1.4 wal_writer_delay

数字型
默认: wal_writer_delay = 200ms ,取值范围1-10000ms
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值