首页 > 其他分享 >你真会判断DataGuard的延迟吗?

你真会判断DataGuard的延迟吗?

时间:2024-04-09 23:23:08浏览次数:23  
标签:03 00 真会 04 lag 2024 DataGuard TIME 延迟

这是一个比较细节的知识点,但必须要理解这个才能准确判断Oracle ADG的延迟情况。

以前做运维工作时,记得是要同时重点关注v$dataguard_stats视图中的几个字段的值,分别是:NAME、VALUE、TIME_COMPUTED、DATUM_TIME。

本文先不考虑v$dataguard_stats视图没有数值显示的特殊情况,只针对当v$dataguard_stats视图正常显示的情况,如何准确判断Oracle ADG的延迟情况。

其实绝大部分管理过ADG的同学都知道,要重点关注NAME列中的transport lag和apply lag,看这两项在VALUE列中的取值,如果都是0,那基本没问题。

经验多些的同学还会在此基础上多关注TIME_COMPUTED、DATUM_TIME这两列的时间,是否近乎相同,和系统时间有无差异。

曾经遇到有用户在巡检ADG延迟时,只简单关注了前者,看都是0就判断没问题,可实际情况已经有很大的gap,这就是没有同时关注TIME_COMPUTED、DATUM_TIME的结果。

而若只关注TIME_COMPUTED、DATUM_TIME,却忽略掉NAME列中的transport lag和apply lag取值,这样也同样会可能造成误判。

如果说给建议就是要都关注,当然,有经验的DBA还会各种查其他信息加以证明,但这也不在本文讨论范围。如果只谈v$dataguard_stats视图,很多用户心里是没底的,因为不清楚细节,为什么会有各种表现情况呢?

通过查阅官方文档,其实在这些字段的描述上也不够精确,容易造成误解。

所以,本文就构建这样的动手实验环境,来帮助大家通过上手实践来具体观察典型场景,加深理解。

场景1: TIME_COMPUTED、DATUM_TIME二者时间近似,且都随系统时间变化

这种情况,无法判定ADG是否延迟。
ADG的传输链路正常,但是ADG备库的MRP进程很可能出现问题,或者不是实时应用导致ADG延迟。

下面开始动手实践构造这类场景的测试用例:

MRP进程异常crash,这里使用kill进程的命令来模拟,一段时间后再去查看ADG延迟的情况:

PHYSICAL STANDBY @DB0913_DG -> SYS @CDB$ROOT> set time on
03:04:32 PHYSICAL STANDBY @DB0913_DG -> SYS @CDB$ROOT> @dg

SOURCE_DBID SOURCE_DB_UNIQU NAME		   VALUE	    UNIT			   TIME_COMPUTED		  DATUM_TIME			     CON_ID
----------- --------------- ---------------------- ---------------- ------------------------------ ------------------------------ ------------------------------ ----------
 2984003235 DB0913_9df_iad  transport lag	   +00 00:00:00     day(2) to second(0) interval   04/09/2024 03:04:35		  04/09/2024 03:04:34			  0
 2984003235 DB0913_9df_iad  apply lag		   +00 00:37:12     day(2) to second(0) interval   04/09/2024 03:04:35		  04/09/2024 03:04:34			  0
 2984003235 DB0913_9df_iad  apply finish time	   +00 00:00:03.330 day(2) to second(3) interval   04/09/2024 03:04:35							  0
	  0		    estimated startup time 12		    second			   04/09/2024 03:04:35							  0


上面例子,TIME_COMPUTED、DATUM_TIME二者时间近似,且随系统时间变化,但是实际ADG已经有了37分钟的应用延迟,体现在apply lag值。
所以必须要结合去看NAME列中的transport lag和apply lag的取值才OK。

场景2: NAME列中的transport lag和apply lag均为0

这种情况,无法判定ADG是否延迟。
当主库的传输链路不再传输,比如defer掉链路,那么这两个时间开始出现差异,并逐渐变大,注意这个时候apply lag不再变化。

下面开始动手实践构造这类场景的测试用例:

主库defer掉链路传输,然后切换下日志。

03:18:23 PRIMARY @DB0913_9DF_IAD -> SYS @CDB$ROOT> alter system set log_archive_dest_state_2 = defer;

System altered.

03:18:24 PRIMARY @DB0913_9DF_IAD -> SYS @CDB$ROOT> alter system switch logfile;

System altered.

备库查看ADG延迟情况:

03:24:32 PHYSICAL STANDBY @DB0913_DG -> SYS @CDB$ROOT> @dg

SOURCE_DBID SOURCE_DB_UNIQU NAME		   VALUE	    UNIT			   TIME_COMPUTED		  DATUM_TIME			     CON_ID
----------- --------------- ---------------------- ---------------- ------------------------------ ------------------------------ ------------------------------ ----------
 2984003235 DB0913_9df_iad  transport lag	   +00 00:00:00     day(2) to second(0) interval   04/09/2024 03:24:38		  04/09/2024 03:18:27			  0
 2984003235 DB0913_9df_iad  apply lag		   +00 00:00:00     day(2) to second(0) interval   04/09/2024 03:24:38		  04/09/2024 03:18:27			  0
 2984003235 DB0913_9df_iad  apply finish time	   +00 00:00:00.000 day(2) to second(3) interval   04/09/2024 03:24:38							  0
	  0		    estimated startup time 12		    second			   04/09/2024 03:24:38							  0


虽然NAME列中的transport lag和apply lag均为0,但是TIME_COMPUTED - DATUM_TIME已经有数分钟的GAP,是不正常的。
所以监控,要考虑这种情况,比如发现 TIME_COMPUTED - DATUM_TIME > 10s 或者 1分钟,就需要告警关注。

而当主库链路正常时,DATUM_TIME会立马发生变化,重新与Time_computed近似:

03:24:38 PHYSICAL STANDBY @DB0913_DG -> SYS @CDB$ROOT> @dg

SOURCE_DBID SOURCE_DB_UNIQU NAME		   VALUE	    UNIT			   TIME_COMPUTED		  DATUM_TIME			     CON_ID
----------- --------------- ---------------------- ---------------- ------------------------------ ------------------------------ ------------------------------ ----------
 2984003235 DB0913_9df_iad  transport lag	   +00 00:07:46     day(2) to second(0) interval   04/09/2024 03:26:15		  04/09/2024 03:26:14			  0
 2984003235 DB0913_9df_iad  apply lag		   +00 00:07:46     day(2) to second(0) interval   04/09/2024 03:26:15		  04/09/2024 03:26:14			  0
 2984003235 DB0913_9df_iad  apply finish time	   +00 00:00:00.001 day(2) to second(3) interval   04/09/2024 03:26:15							  0
	  0		    estimated startup time 12		    second			   04/09/2024 03:26:15							  0

03:26:15 PHYSICAL STANDBY @DB0913_DG -> SYS @CDB$ROOT> @dg

SOURCE_DBID SOURCE_DB_UNIQU NAME		   VALUE	    UNIT			   TIME_COMPUTED		  DATUM_TIME			     CON_ID
----------- --------------- ---------------------- ---------------- ------------------------------ ------------------------------ ------------------------------ ----------
 2984003235 DB0913_9df_iad  transport lag	   +00 00:00:00     day(2) to second(0) interval   04/09/2024 03:26:21		  04/09/2024 03:26:19			  0
 2984003235 DB0913_9df_iad  apply lag		   +00 00:00:00     day(2) to second(0) interval   04/09/2024 03:26:21		  04/09/2024 03:26:19			  0
 2984003235 DB0913_9df_iad  apply finish time	   +00 00:00:00.000 day(2) to second(3) interval   04/09/2024 03:26:21							  0
	  0		    estimated startup time 12		    second			   04/09/2024 03:26:21							  0

这里面还有个细节,当DATUM_TIME恢复正常后,里面会监测到真实的lag,然后开始应用,最终真正追平。

场景3: TIME_COMPUTED、DATUM_TIME二者时间近似,且都随系统时间变化,NAME列中的transport lag和apply lag均为0

TIME_COMPUTED、DATUM_TIME二者时间大概有1~2s的差值,随着系统时间不断更新。
NAME列中的transport lag和apply lag均为0。
这种情况,ADG正常,还是有1~2秒的延迟?

是正常的,这一点其实可以通过反证,比如将ADG设置为SYNC同步模式,TIME_COMPUTED、DATUM_TIME二者时间依然会有1~2s的差值,而此时机制是强同步的。

--ASYNC
alter system set log_archive_dest_2='SERVICE=DB0913_dg VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB0913_dg';

--SYNC
alter system set log_archive_dest_2='SERVICE=DB0913_dg SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB0913_dg';

最后我们来看下官方文档对这些指标的权威解释:

V$DATAGUARD_STATS displays information about Oracle Data Guard metrics when queried on a standby database. No rows are returned when queried on a primary database.

对于NAME列的解释:

Name of the metric:

APPLY FINISH TIME - An estimate of the time needed to apply all received, but unapplied redo from the primary database. If there are one or more redo gaps on the standby database, an estimate of the time needed to apply all received, but unapplied redo up to the end of the last archived redo log before the beginning of the earliest redo gap.

APPLY LAG - Apply lag is a measure of the degree to which the data in a standby database lags behind the data in the primary database, due to delays in propagating and applying redo to the standby database. This value is relevent only to the applying instance.

TRANSPORT LAG - Transport lag is a measure of the degree to which the transport of redo to the standby database lags behind the generation of redo on the primary database. If there are one or more redo gaps on the standby database, the transport lag is calculated as if no redo has been received after the beginning of the earliest redo gap.

ESTIMATED STARTUP TIME - An estimate of the time needed to start and open the database.

可以看到,APPLY LAG是衡量备数据库中数据相对于主数据库的滞后程度。
TRANSPORT LAG是衡量将redo传输到备用数据库的延迟程度。

对于TIME_COMPUTED列的解释:

TIME_COMPUTED
Local time at the standby database when the metric was computed

TIME_COMPUTED是计算指标时备用数据库的本地时间。

对于DATUM_TIME列的解释:

DATUM_TIME
Local time at the standby database when the datum used to compute the metric was received

The APPLY LAG and TRANSPORT LAG metrics are computed based on data that is periodically received from the primary database. An unchanging value in this column across multiple queries indicates that the standby database is not receiving data from the primary database.

DATUM_TIME是接收到用于计算指标的数据时备用数据库的本地时间。

APPLY LAG和指标TRANSPORT LAG是根据从主数据库定期接收的数据计算的。如果该列中的值在多个查询中保持不变,则表示备用数据库未从主数据库接收数据。

怎么样?是不是单看官方文档的解释会很迷糊?
那就赶快动起手来,结合上面的实验亲自上手来验证观察,这样就能理解的更透彻,对判断DataGuard的延迟得心应手。

标签:03,00,真会,04,lag,2024,DataGuard,TIME,延迟
From: https://www.cnblogs.com/jyzhao/p/18125106/ni-zhen-hui-pan-duandataguard-de-yan-chi-ma

相关文章

  • 监控指标体系:交互延迟上的探索与最佳实践
    FID在互联网高速发展的时代,用户体验已成为企业竞争的关键所在。网页性能作为用户体验的重要组成部分,直接影响着用户的满意度和工作效率。FirstInputDelay(FID)作为衡量网页性能的重要指标,越来越受到业界关注。今天,让我们一起来深入了解FID,探讨如何优化FID以提升用户体验,同时......
  • 通过css变量和动画的延迟负值, 实现动画效果
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title&g......
  • 如何使用Java和RabbitMQ实现延迟队列(方式二)?
    前言昨天写了一篇关于Java和RabbitMQ使用插件实现延迟队列功能的文章,今天来讲下另外一种方式,不需要RabbitMQ的插件。前期准备,需要安装好docker、docker-compose的运行环境。需要安装RabbitMQ的可以看下面这篇文章。如何使用PHP和RabbitMQ实现消息队列?-CSDN博客使用RabbitM......
  • 如何使用Java和RabbitMQ实现延迟队列?
    前言今天我们使用Java和RabbitMQ实现消息队列的延迟功能。前期准备,需要安装好docker、docker-compose的运行环境。需要安装RabbitMQ的可以看下面这篇文章。如何使用PHP和RabbitMQ实现消息队列?-CSDN博客今天讲的是依赖RabbitMQ的延迟插件实现消息队列的延迟功能。如何安装......
  • Fiddler(8)设置网络丢包和延迟
    1、打开Fiddler工具,点击Rules-CustomizeRules 2、打开了一个配置文件,ctrl+F搜索delay,往下找找到设置上行下行延迟的地方3、修改发送延迟和下载延迟的时间,可以修改的大一些,越大延迟越久,修改后保存4、选择Rules-Performance-SimulateModemSpeed,设置生效 然后刷新页面,就......
  • defer 延迟调用【GO 基础】
    〇、前言在Go语言中,defer是一种用于延迟调用的关键字。defer在Go语言中的地位非常重要,它是确保资源正确释放和程序健壮性的关键字。本文将通过示例对其进行专门的详解。一、defer简介defer的主要用途是在函数执行完毕之前,确保某个操作被执行。通常用于:资源的释放管......
  • MySQL主从同步延迟Seconds_Behind_Master很大
    1.mysql> showslavestatus\G  查看延迟6天多,也是很神奇了2.查看 Master_Log_File和Relay_Master_Log_File对比,可以说明中继日志差100多位置,所有定位是中继日志问题 3.查看中继日志文件,密密麻麻的relay-bin文件 4.查看优化配置mysql>showvariableslike'%......
  • Bat中cd到中文路径报错以及windows上设置快捷方式延迟启动执行
    场景要实现在windows启动目录下,执行bat脚本文件。脚本文件中需要进入某个中文目录所以直接cd/dD:\test\中文路径starttest.bat此时会提示: 此时需要指定bat的编码方式,修改bat脚本文件,添加如下chcp65001cd/dD:\test\中文路径starttest.bat则中文路径不再报错。......
  • linq的延迟加载
    下面两端代码执行结果为何不同list.Select(x=>{x.FieldA=100;returnx;});list.ForEach(x=>{Console.WriteLine(x.FieldA);});list.Select(x=>{x.FieldA=100;returnx;}).ToList();list.ForEach(x=>{Console.WriteLine(x.FieldA);});我明白你的疑惑......
  • 为什么延迟删除可以保证MYSQL 与redis的一致性?
    看过很多保持MYSQL与redis保持一致性的文章都提到了延迟删除,其实脱离任何业务场景的设计都是不切实际的,所以我会本着一个通用的读写场景去分析为什么延迟删除大概率可以保证MYSQL与redis的最终一致。通常的读写场景通常在使用redis作为读写缓存时,我们采用的是cacheasidepatte......