PostgreSQL 10.0 preview 功能增强 - slave提前苏醒
背景
PostgreSQL 数据库的WAL为重做日志,如果数据库CRASH,那么需要等待WAL来恢复数据库,只有当数据库恢复到一致状态时,才能将数据库唤醒(或者说此时数据库才是一致的)。
数据库被唤醒后(promote),客户就可以对数据库执行查询、增删改查的动作了。
那么如果数据库需要apply很多的WAL文件,导致唤醒前的等待时间很长怎么办?
有什么方法能提前让数据库苏醒吗?
其实有,因为数据块都是有LSN的,如果数据库未达到一致位点,其实可以提供只读服务给用户,当用户读取的LSN比检查点早时,说明这个数据块是一致的,如果读取到的LSN比检查点晚,说明这个数据块可能是DIRTY的,需要WAL恢复,那么可以返回错误给用户,。
10.0提供了提前苏醒的功能。
这个patch的讨论,详见邮件组,本文末尾URL。
PostgreSQL社区的作风非常严谨,一个patch可能在邮件组中讨论几个月甚至几年,根据大家的意见反复的修正,patch合并到master已经非常成熟,所以PostgreSQL的稳定性也是远近闻名的。
参考
https://commitfest.postgresql.org/13/847/
https://www.postgresql.org/message-id/flat/CAEyp7J8z6dmjZGNA5f0n3TsEahHFU5Bt2er91Ec5RdDxHn4nTg@mail.gmail.com#CAEyp7J8z6dmjZGNA5f0n3TsEahHFU5Bt2er91Ec5RdDxHn4nTg@mail.gmail.com