前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL WAL 再深入 base on pg 11

PostgreSQL WAL 再深入 base on pg 11

作者头像
AustinDatabases
发布2019-06-21 16:34:47
7890
发布2019-06-21 16:34:47
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

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 的这班车,还的继续努力。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档