PostgreSQL WAL replay 加速(datapage preload) - 恢复加速, 备库延迟优化-阿里云开发者社区

开发者社区> 德哥> 正文

PostgreSQL WAL replay 加速(datapage preload) - 恢复加速, 备库延迟优化

简介:
+关注继续查看

标签

PostgreSQL , replace , standby , recovery , preload , 预加载


背景

PostgreSQL 数据库恢复时,读取wal,如果当前wal page不是full page,则从这笔wal record对应的data file中拿到datapage,与wal record合并,覆盖对应data page。持续读取wal 实现恢复的目的。

需要注意wal是顺序读写,而data file可能是离散读写(大部分oltp业务都是如此),WAL的目的就是要将离散的DATA FILE写变成顺序的IO。

那么问题来了,恢复时,data file就变成了离散的读操作。

在主库WAL产生量非常巨大时,standby recovery(replay)将会导致与主库的延迟,通常wal write不会有大的延迟(因为WAL是顺序写),replay的延迟主要是recovery时data file的离散读导致。

如何降低离散读呢?

DBAs struggling with replication lag is nothing new. A large volume of data or write IO comes into the system and the followers struggle to keep up. pg_prefaulter was written to eliminate replication lag on followers and also improves database startup times.

If your database is under 24/7 write workload, has periodic replication lag that is unacceptable, or want to reduce the startup time of PostgreSQL, pg_prefaulter will help all three of these scenarios.

At Joyent we use PostgreSQL as the metadata tier for our object storage system, Manta. This talk chronicles how we identified our source of replication lag and why we found it necessary to write pgprefaulter. pgprefaulter is a sidecar process for PostgreSQL written in Go that pre-fetches pages from disk and loads them into the operating system's filesystem cache before PostgreSQL requests them during the startup and application of WAL records.

Additionally, this talk also discusses:

the design considerations that went into writing pg_prefaulter
the various forms of "replication lag" in PostgreSQL (WAL receive lag, WAL apply lag, and checkpoint lag)
pathologies that came from deploying pg_prefaulter
why we now consider pg_prefaulter mission critical software for our production databases
tips for deploying pg_prefaulter

优化方法

在备库接收到WAL后,解析WAL,并提前将需要用到的DATA FILE PAGE加载到OS PAGE CACHE中,在postgresql startup process replay wal时,读取需要的data page时,从os cache读取,从而降低replay时因为读取data page带来的IO等待。

patch:

http://www.postgresql-archive.org/WAL-prefetch-td6024900.html

参考

pg_prefaulter: Scaling WAL Performance (application/pdf - 2.6 MB)

http://www.postgresql-archive.org/WAL-prefetch-td6024900.html

http://www.pgcon.org/2018/schedule/events/1204.en.html

https://github.com/joyent/pg_prefaulter

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
HH
冬季实战营第一期感受
实战营第一期从17日到21日每日简简单单但依旧有所收获。
7 0
基于阿里云从零到一上手玩转云服务器
基于国内最大的云服务商阿里云,开展几次基础的玩法课程来体验云服务的乐趣。
5 0
什么是软件实施?软件实施前景几何?软件实施的面试题有那些?
事情是这样的,由于自己目前还没有对象,就想着在兰州找一份还不错的工作,于是投了一家在我的家乡还算不错的公司,对方却说有可能是软件实施岗位,于是趁机了解了一下, 什么是软件实施? 软件实施掌握的基础知识有哪些? 软件实施前景几何?
6 0
我的ECS使用体验
在阿里云ECS服务器使用中学习和收获了很多。
4 0
漫谈“架构团队”之组织架构(下)
漫谈“架构团队”之组织架构(下)
3 0
也谈分库分表在实际应用的实践(上)
也谈分库分表在实际应用的实践(上)
2 0
+关注
德哥
公益是一辈子的事, I'm digoal, just do it.
2153
文章
245
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载