我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PG库实现 t+1 同步

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PG库实现 t+1 同步

PG库实现 t+1 同步

需求:业务场景中有很多需要查询t+1的数据,但又不想影响生产实时的业务,是否可以搭建一个延时的灾备库就可以解决这个问题呢。

问题:如何实现延时? 

解决方向:recovery_min_apply_delay (integer)   
这个参数可以实现从库的延时同步。

测试过程:
配置在备库recovery.conf中
recovery_min_apply_delay = 5min

主库插入一条数据,5分钟后从库可以查到该数据,在此期间,不影响从库的使用。

需要注意的是,如果从库配置了synchronous_commit 这个参数,一定要配为on,配为remote_apply时,在主库上插入一条数据,主库会hang住等待5min(等待从库完成apply操作)后,然后才能返回执行成功or失败的结果。

4版本之前存在bug,配置好这个参数后,马上重启standby库,连接数据库会报错如下:psql: FATAL:  the database system is starting up,这时候需要等待配置时间,然后连接才可以正常使用数据库,但是目前这个bug已经修复了。高版本不存在这个问题。

从库放开给用户使用,带来的问题:
在进行主从复制的时候,如果从库放开给用户使用,很容易产生冲突。举个例子,从库有一个长事务或者长查询正在执行,此时,主库执行 UPDATE 并 VACUUM,由于主库上已经不存在使用被更新元组的事务,VACUUM 会将这些元组清理掉,当从库回放到 VACUUM 对应的日志时,检测到当前 VACUUM 清理的元组仍然有事务在使用,则认为有冲突,在等待 max_standby_streaming_delay(默认30s) 后,若事务仍然没有执行完,则中断 SLAVE 上的连接,这时候就产生了冲突。

解决方向:hot_standby_feedback (boolean)
通过设置 HOT_STANDBY_FEEDBACK 解决因 MASTER 执行 VACUUM 引起的复制冲突。
测试过程:
配置在主库postgresql.conf中
hot_standby_feedback = on   --如果有错误的数据复制,向主库进行反馈
HOT_STANDBY_FEEDBACK 的原理很简单,就是将从库的最小活跃事务ID定期告知主库,使得主库在执行 VACUUM 时对这些事务还需要的数据手下留情。

设置 HOT_STANDBY_FEEDBACK 的好处是可以减少从库执行查询时复制冲突的可能,但也有其弊端,即会使主库延迟回收,从而导致数据膨胀;极端情况下,如果从库有一个很长的事务,且涉及的表上DML操作又很频繁,则表的膨胀是不容小觑的,表膨胀,进而使得主库出现IO抖动。
解决冲突问题:
max_standby_streaming_delay(默认30s):
从库因为接收wal流日志产生查询冲突而取消查询之前的等待时间,设置该参数会在发生冲突时,备库查询不会立即取消,而是等待一个时间后如果还没结束再抛出报错。这个值的大小可以参考从库可能产生的长事务运行时间。

测试过程:
配置在主库postgresql.conf中
max_standby_streaming_delay = 30s  --数据流备份的最大延迟时间

max_standby_archive_delay:
备机因为处理归档的wal日志产生查询冲突而取消查询之前的等待时间,和上面的参数类似。

测试过程:
配置在主库postgresql.conf中
max_standby_archive_delay = 30s  --数据流备份的最大延迟时间

注意这两个参数不要配置为-1,如果配置为-1, 那么在从库上可以无限时常的执行sql。后果是从库只接收但是不归档 xlog. 造成从库 xlog文件越来越多, 甚至撑爆磁盘分区。

vacuum_defer_cleanup_age:
指定vacuum延迟清理死亡元组的事务数,vacuum会延迟清除无效的记录,延迟的事务个数通过vacuum_defer_cleanup_age进行设置。即vacuum和vacuum full操作不会立即清理刚刚被删除元组。

生产环境里可以根据pg_stat_database和pg_stat_database_confliects视图查看冲突发生的情况,以此来进行如上参数的调整。

Oracle:
方法1: 在备库指定delay属性
alter database recover managed standby database delay 10 disconnect from session; 
--备库延迟10分钟应用主库日志

方法2: log_ archive_dest_n参数中指定了delay属性
alter system set log_archive_dest_3="service=goolen lgwr async delay=10 valid_for=(all_logfiles,all_roles)  db_unique_name=goolen";
注意:delay属性并不是说延迟发送主库日志到备库,而是指日志到备库后,延迟多长时间应用主库日志。如果在备库应用主库日志的语句中指定了实时应用,也就是使用了using current logfile,如alter database recover managed standby database using current logfile disconnect from session;那么,即使在log_ archive_dest_n参数中指定了delay属性,备库也会忽略delay属性。

方法3:alter system set log_archive_dest_state_2=defer; 

MYSQL:
使用MASTER_DELAY选项CHANGE MASTER TO将延迟设置为N秒:
CHANGE MASTER TO MASTER_DELAY = N;

在修改延迟从库的master_delay数值的时候,设置新的master_delay之后,MySQL自动将从库的所有relay log清空,并重新生成,序号从000001开始,清掉relay log以后,MySQL会重新拉取还没应用过的binlog,避免数据丢失。
每次修改延迟数据,都要清掉relay log,再重新拉取binlog,造成主库和从库之间重复的数据流量,消耗了不必要的资源。
修改master_delay,根本不需要stop slave将整个从库停止,而只需要stop slave sql_thread即可, MySQL就不会清除并重新生成relay log了。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PG库实现 t+1 同步

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PG库实现 t+1 同步

需求:业务场景中有很多需要查询t+1的数据,但又不想影响生产实时的业务,是否可以搭建一个延时的灾备库就可以解决这个问题呢。 问题:如何实现延时?  解决方向:recovery_min_apply_delay (integer)    这个参数可以实现从库的延时
PG库实现 t+1 同步
2020-02-12

mysql数据库同步如何实现

MySQL数据库同步可以通过多种方式实现,以下是一些常用的方法:使用主从复制:主从复制是MySQL自带的一种数据库同步方法,通过将主数据库的变更日志传输到从数据库,从数据库可以实时同步主数据库的数据。这种方法适用于需要实时同步数据的场景。使
mysql数据库同步如何实现
2024-04-09

Qt怎么实现通用数据库同步

这篇文章主要介绍“Qt怎么实现通用数据库同步”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Qt怎么实现通用数据库同步”文章能帮助大家解决问题。一、前言数据库同步的主要功能是将本地的数据库记录同步到远
2023-06-29

阿里云数据库同步数据轻松实现跨平台数据同步

随着互联网技术的不断发展,数据的同步需求日益增长。尤其是在跨平台应用开发中,如何实现不同平台之间的数据同步,成为了开发者需要解决的重要问题。本文将介绍阿里云数据库同步数据的相关功能和使用方法,帮助您轻松实现跨平台数据同步。一、阿里云数据库同步数据阿里云数据库同步数据是一种能够实现跨平台数据同步的技术。通过使用阿里
阿里云数据库同步数据轻松实现跨平台数据同步
2023-11-04

python如何实现不同数据库间数据同步功能

这篇文章主要为大家展示了python如何实现不同数据库间数据同步功能,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“python如何实现不同数据库间数据同步功能”这篇文章吧。python是什么意思P
2023-06-06

vue如何实现同步

本篇内容主要讲解“vue如何实现同步”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue如何实现同步”吧!vue实现同步的方法:1、创建一个vue示例文件;2、通过“data(){return
2023-07-05

编程热搜

目录