PostgreSQL WAL 日志发展史 - pg9
文章目录
- 一、pg9 实现流复制
- 二、pg9.1 备机同步提交
- 三、pg9.2 级联复制
- 四、pg9.3 小改动
- 五、pg9.4 复制槽与Logical
- 六、pg9.5 些许小改动
- 七、pg9.6 多同步备机
一、pg9 实现流复制
这里实现了流复制,为了流复制也增加了很多相应的GUC参数。与温备相对应,流复制也可以称为热备,他实现了主备之间以wal记录的粒度同步数据
WAL_LEVEL
wal的级别当前版本支持minimal、aichive、hot_standby,三种级别。
MAX_WAL_SENDERS
每一个流复制连接,在主机都会有一个对应的wal发送进程,这个参数定义最大支持的连接数。
WAL_SENDER_DELAY
wal发送进程每隔一段时间,向备机发送一次主机产生的wal日志。这个参数配置了这个时间间隔的大小。
WAL_KEEP_SEGMENTS
设想一下,如果因为某种原因,主备之间的同步延迟比较大,就会造成主机的wal日志记录在发送到备机之前就已经被移除。这样备机就无法同步主机数据了。因此在主机上配置wal_keep_segments参数,就可以使主机生成的wal日志不会被立即清除,可以让备机有充足的时间完成数据同步。
VACUUM_DEFER_CLEAN_AGE
主机上执行的vacuum操作会打断备机正在执行的查询,设置这个参数后主机对死亡元组的vacuum可以延迟几个事务的时间。这个参数在后面会有更为有效的hot_standby_feedback参数作为替代。
HOT_STANDBY
配置是否可以连接到这个备机进行查询操作。
MAX_STANDBY_ARCHIVE_DELAY&&MAX_STANDBY_STREAM_DELAY
当一个wal redo的操作与当前正在执行的查询冲突时,需要判断等待查询完成再redo,还是取消查询执行redo。
这个参数设定了一个允许查询继续执行的时间,经过这个时间之后,就会取消查询执行redo。
MAX_STANDBY_ARCHIVE_DELAY用于文件级别的wal传递,也就是温备的情况
MAX_STANDBY_STREAM_DELAY用于流复制,或者说热备。
ARCHIVE_CLEANUP_COMMAND
配置一个命令在遇到一个重启点时,清理归档路径中的wal段
RECOVERY_END_COMMAND
配置一个命令在完成恢复后,做一些清理工作
STANDBY_MODE
界定这是一次PITR还是一个备机,这个参数在PG12中删除了。
PRIMARY_CONNINFO
备机启动时连接主机的字符串
TRIGGER_FILE
指定一个触发文件,当文件存在时,备机退出recovery模式
二、pg9.1 备机同步提交
SYNCHRONOUS_COMMIT
这不是一个新的参数,而是为这个参数增加了一个可选值‘local’
ON:wal record在本地和备机中刷写到磁盘之后,事务才完成提交状态。
LOCAL:wal record在本地刷写到磁盘之后,事务才完成提交状态。
OFF:异步提交
SYNCHRONOUS_STANDBY_NAMES
指定primary_conninfo字符串中可以指定备机的名字,通过将名字添加到这个参数中,可以指定一个同步备机。
当前版本只支持一个同步备机。
REPLICATION_TIMEOUT
这里界定一个时间间隔,如果超过这个时间没有收到备机的消息,那么主机将断开与备机的连接。
WAL_RECEIVER_STATUS_INTERVAL
备机每隔一段时间会向主机报告复制情况,也是向主机报告备机存活的方法。
HOT_STANDBY_FEEDBACK
备机向主机发送备机正在执行的查询,目的是通知主机不要清理相关的死亡元组。
RECOVERY_TARGET_NAME
为PITR指定一个恢复点的名字,恢复点可以用 pg_create_restore_point()创建
三、pg9.2 级联复制
9.2版本的特点是出现了级联复制,一个备机可以从他的上游服务器获取wal日志,也可以向下游服务器传递wal日志。不过没有为级联复制准备特殊的GUC参数,我们只要把上游服务器配置为一个备机就可以了。
PAUSE_AT_RECOVERY_TARGET
在PITR时如果指定了恢复目标,那么当达到恢复目标时,startup进程停止redo,这时的数据库还是在恢复状态,你可以连接数据库查看当前数据库状态是否满足你的预期,如果不满足这提供了一次让你重新配置recovery.conf继续恢复的机会。当pause_at_recovery_target参数配置为false时,redo过程在达到恢复目标会立即会进入一个可读可写的状态。
SYNCHRONOUS_COMMIT
这个参数又来了,这次它提供了一个remote_write的可选项,remote_write比ON严谨一些,当walrecord在同步备机apply之后,事务才会被认为是完成了。
四、pg9.3 小改动
删除了replication_timeout参数,增加了wal_sender_timeout 替代参数,并增加了wal_receiver_timeout 参数。
WAL_SENDER_TIMEOUT
代替replication_timeout
WAL_RECEIVER_TIMEOUT
这个参数用来探测主机的状态,如果主机长时间没有回复则断开连接。
五、pg9.4 复制槽与Logical
实现了复制槽,使得发送服务器刚好能保存适当的wal文件。
出现了logical的wal日志级别,内置了wal日志的解析插件test_decoding和工具pg_recvlogical。
WAL_LEVEL
增加logical级别
WAL_LOG_HINTS
一些page页如果发生了不重要的页数据改动,也遵循全页写机制。
MAX_REPLICATION_SLOTS
9.4版本新增加了复制槽功能,每一个流复制备机可以配置使用一个复制槽,这个复制槽记录了对应备机的wal记录的apply情况,并在主机为备机保存还要使用的wal段不被清理。
PRIMARY_SLOT_NAME
在备机配置其要使用的复制槽,并为复制槽命名。
RECOVERY_MIN_APPLY_DELAY
备机收到wal日志后会延迟一段时间才完成wal记录的redo操作。同步复制不受此配置的影响。
考虑到如果你在主机执行了一个没有条件筛选的delete操作,幡然醒悟。这时delete操作还没有同步到备机,这时可以赶紧采取紧急措施补救数据。
六、pg9.5 些许小改动
WAL_COMPRESSION
是否压缩wal日志中的全页写数据
MAX_WAL_SIZE && MIN_WAL_SIZE
软限制wal日志在wal生成目录的size,当wal目录下wal段的size小于min_wal_size时,checkpoint进程不会处理wal段;当wal目录下wal段的size大于max_wal_size时,checkpoint会移除最旧的wal段直到wal段size为max_wal_size; 剩余的情况,checkpoint会将不在使用的wal段重命名为未来的的wal段名。
ARCHIVE_MODE
增加always选项,一个备机是否继续归档它接受到的wal日志
RECOVERY_TARGET_ACTION
在完成恢复后,数据库的动作,有三个可选项:pause,promote, shutdown.
这个参数替代了pause_at_recovery_target参数。
pause指停止redo,但此时数据库还是处于恢复模式,这个参数可以让你查看数据库当前值得状态,若当前状态不符合你的预期,可以停库修改恢复recovery.conf,启动数据库后继续redo,使用pg_xlog_replay_resume() 命令可以使数据库退出恢复模式。
promote:恢复完成后,直接将数据库提升为主机状态。
shutdown:这相当于在pause的基础上,多加了个停库的操作。
TRACK_COMMIT_TIMESTAMP
为提交的事务记录提交时间。
WAL_RETRIEVE_RETRY_INTERVAL
这是一个等待时间,当备机已经重演完所有的wal日志时,walreciver进程探测是否有新的wal日志的时间间隔。
七、pg9.6 多同步备机
9.6版本最大的亮点是支持多个同步备机,另外修整了wal级别为(minimal,replica,logical)
WAL_LEVEL
wal级别支持minimal,replica,logical三种。
SYNCHRONOUS_COMMIT
添加remote_apply选项,walrecord在synchronous_standby_names指定的同步备机上完成redo后,主机事务才算完成。
WAL_WRITE_FLUSH_AFTER
在事务异步提交时,会通知wal writer进程将wal日志刷盘,但这个刷盘只是指刷入操作系统缓存。
当刷入操作系统缓存,但是没有完成硬盘同步的wal日志的数量大于wal_write_flush_after值时,会触发一次将wal日志同步到硬盘的过程。
SYNCHRONOUS_STANDBY_NAMES
这个参数增加了值的类型,用以支持多同步备机