WAL 机制 write ahead log ,在 PG 中是很重要的,关于数据库的安全和性能都会和 WAL 有牵扯。
下面的文字会根据相关的配置来进行分析和深入
1 wal_level
这个参数决定这有多少信息被写入到WAL 中,其中可以选择的值,有以下信息。
minimal
replica
logical
修改以下值需要进行数据库服务的重新启动。
首先要确认的是,如果你的PG 是单机的系统,并且建立在上面的业务也不是很重要,而且还经常有大量的DML操作,那的确是可以设置为 minimal减少日志的发生。同时你要明确的是,如果采用了 minimal 方式就不能期望能通过日志来进行数据的基于时间点的恢复。
另外,从PG11 另外两个参数一个是 replica 一个是 logical,对于 9.X的使用者这是两个新的参数,replica 相当于以前的host standy,logical 是针对逻辑复制而衍生的新的参数。
这里一般会选择replica 作为 wal_level的参数。
2 fsync
这个参数的意义在于,在数据写入磁盘中,调用 fsync()函数防止因为操作系统的崩溃而导致的数据丢失。所以需要将 fsync = on 而不是 off ,除非你的数据是静态数据并且可以在任何时间,系统崩溃后,都能通过任何手段(你拥有的),进行恢复。
同时如果你将其置为off 则你的 full_page_writes 也必须要off.
3 synchronous_commit
其中这个参数可以选择的值很多,但其实看似很多,如果你不设置 synchronous_standby_names 则这个参数中的 off , local, remote_write, remote_apply , on 等参数,可以理解为仅仅有 off 和 on 这两个参数。(暂不牵扯复制,所以这里设置为 ON 即可),也就是说只有WAL 落地磁盘才会回馈客户端 everything is done.
4 wal_sync_method
这个参数决定了你的日志以怎么样的方法刷新到磁盘,这边选择了 fsync的方式进行进行了日志的刷新,选择fsync对性能上来说,未必是最好的,但对数据的安全性性来说,是必要的,因为即使数据无法写入磁盘,但WAL 写入磁盘,还能将数据在crash后恢复,但如果wal日志的写入都有保留,那的确是性能和安全性方面的一个博弈,仁者见仁。
5 full_page_writes
如果你了解MYSQL的 double_write ,则你就会理解 PG的 full_page_writes 在设计之初就考虑到这个数据的安全性问题和数据性能上的问题 ,当然与MYSQL 的double_write 一样,启用他是数据的安全性和数据库性能之间的博弈,在每次checkpoint 点后,他wal的修改都将记录之前的数据页面,保证任何时间的情况下的系统的crash后数据的完整性。
5 wal_compression
建议打开,这样有利于大量的wal在存储时被压缩而读取时会被解压,这样对I/O是可以节省的,但会在CPU 上花费一些额外的资源。
6 wal_buffers 默认值为共享内存的 1/32 ,因为,此参数不建议调整太大
7 其他未调整的参数
wal_buffers
wal_write_delay
wal_writer_flush_after
commit_delay
commit_sibling
以上参数均保持默认值在PG11 中
那给以上参数的配置值,有什么依据
首先提到的就是检查点,为什么说检查点与wal的性能有关,我们可以考虑这样一件事情,如果我们把 checkpoint 之间的间隔加大,会有什么效果
1 数据随机性的写会尽量变成顺序型的写,这样会更多的减少寻道的时间增加数据的写入的性能。
2 可以设置 checkpoint_completion_target 来延长大数据量的checkpoint点的写入,分散一个点之内的数据写入的压力
当然想过的配置还需要配合 check point的 数据的方式来进行
其中关于checkpoint 的配置
1 checkpoint_timeout
这个参数就是在性能和数据恢复之间游走的参数,默认是5分钟,最大和最小的范围是 30秒和 24hours,
2 checkpoint_completion_target
在checkpoint 数据量较大的情况下的保证在下次checkpoint前 (默认值0.5) 用一半的时间来消化 checkpoint的数据,这样有利于缓解集中式写入的问题。
3 max_wal_size 在WAL 进行rotate 重复利用的情况下,最大的保留的空间是 1G (默认值)
4 min_wal_size 在WAL 进行磁盘空间重复利用的情况下,最小的保留空间是80MB (默认值)
说是深入,其实需要学习的东西很多,不过要赶上PG 的这班车,还的继续努力。
本文分享自 AustinDatabases 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!