你真会判断DataGuard的延迟吗?
这是一个比较细节的知识点,但必须要理解这个才能准确判断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的延迟得心应手。
你真会判断DataGuard的延迟吗?的更多相关文章
- mysql主从同步(4)-Slave延迟状态监控
mysql主从同步(4)-Slave延迟状态监控 转自:http://www.cnblogs.com/kevingrace/p/5685511.html 之前部署了mysql主从同步环境(Mysql ...
- 如何实现1080P延迟低于500ms的实时超清直播传输技术<转>
转载地址:http://www.yunweipai.com/archives/9037.html 最近由于公司业务关系,需要一个在公网上能实时互动超清视频的架构和技术方案.众所周知,视频直播用 CDN ...
- 如何实现1080P延迟低于500ms的实时超清直播传输技术
再来当一次技术搬运工,内容来自高可用框架,学霸君工程师袁荣喜的如何实现1080P延迟低于500ms的实时超清直播传输技术. 导语:视频直播是很多技术团队及架构师关注的问题,在实时性方面,大部分直播是准 ...
- 【转】实现1080P延迟低于500ms的实时超清直播传输技术
最近由于公司业务关系,需要一个在公网上能实时互动超清视频的架构和技术方案.众所周知,视频直播用 CDN + RTMP 就可以满足绝大部分视频直播业务,我们也接触了和测试了几家 CDN 提供的方案,单人 ...
- if语句中的判断条件(nginx)
if语句中的判断条件 正则表达式匹配: ==:等值比较; ~:与指定正则表达式模式匹配时返回"真",判断匹配与否时区分字符大小写: ~*:与指定正则表达 ...
- 监控Mysql主从环境下Slave延迟状态的操作记录
在MySQL主从环境下,通常会根据Seconds_Behind_Master的值来判断slave的延迟状态,这么做在大部分情况下尚可接受,但其实是并不够准确的.对于Slave延迟状态的监控,应该考虑多 ...
- MySQL复制中slave延迟监控
在MySQL复制环境中,我们通常只根据 Seconds_Behind_Master 的值来判断SLAVE的延迟.这么做大部分情况下尚可接受,但并不够准确,而应该考虑更多因素. 首先,我们先看下SLAV ...
- Nginx中if语句中的判断条件
一.if语句中的判断条件(nginx) 1.正则表达式匹配: ==:等值比较; ~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写: ~*:与指定正则表达式模式匹配时返回“真”,判 ...
- Kafka技术内幕 读书笔记之(五) 协调者——延迟的加入组操作
协调者处理不同消费者的“加入组请求”,由于不能立即返回“加入组响应”给每个消费者,它会创建一个“延迟操作”,表示协调者会延迟发送“加入组响应”给消费者 . 但协调者不会为每个消费者的 “加入组请求 ...
- nginx 配置中的if判断
正则表达式匹配: ==:等值比较; ~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写: ~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字 ...
随机推荐
- 冲击900亿美元估值!邀约路演、秘密交表的Shein上市有望
双十一的狂欢刚刚结束,Shein即将赴美上市的消息又在电商圈里投下一枚重磅炸弹. 继被媒体曝光其寻求900亿美金估值后,最新的消息称其已邀请投资人参与路演,且已秘密完成交表.这个神秘的中国独角兽,离敲 ...
- 工具 --- IL指令集解释
引言 汇总一下所有的 .NET IL 指令,以及它们的名称.操作码值.堆栈转换行为和描述. 作为反编译IL代码时的查询字典. IL 指令集列表 以下内容来自微软官方文档,通过百度翻译API翻译为中文. ...
- 使用 PMML 实现模型融合及优化技巧
在机器学习的生产环境中,我们经常需要将多个模型的预测结果进行融合,以便提高预测的准确性.这个过程通常涉及到多个模型子分的简单逻辑回归融合.虽然离线训练时我们可以直接使用sklearn的逻辑回归进行训练 ...
- async await $api vue
async getDataNew () { const res = await this.$api('apiPath') if (res && res.status === 20) { ...
- DiagnosticSource DiagnosticListener 无侵入式分布式跟踪
ASP.NET Core 中的框架中发出大量诊断事件,包括当前请求进入请求完成事件,HttpClient发出收到与响应,EFCore查询等等. 我们可以利用DiagnosticListener来选择性 ...
- 从一线方案商的角度来看高通QCC3020芯片
写在前面的话 QCC3020的推出已经有一段时间了.在蓝牙音频的圈子里,属于家喻户晓的芯片了.再加上高通的大力宣传和一些顶尖级产品的使用,可以说,它是高通在吸收CSR的技术之后,着力推出的最具竞争 ...
- leetcode数据库sql之Department Top Three Salaries
leetcode原文引用: How would you print just the 10th line of a file? For example, assume that file.txt ha ...
- Performance Improvements in .NET 8 -- Native AOT & VM & GC & Mono【翻译】
原生 AOT 原生 AOT 在 .NET 7 中发布.它使 .NET 程序在构建时被编译成一个完全由原生代码组成的自包含可执行文件或库:在执行时不需要 JIT 来编译任何东西,实际上,编译的程序中没有 ...
- echo: nice day
乐开花了,echo 姑娘,很合我的胃口,活泼.俏皮.专业.三观出乎的齐,第一次遇见这种默契度如此高的,你说半句我懂,我说半句你懂,太完美了,以前感觉和女生沟通太累,聊几句就 game over,我这是 ...
- 百度 Linux 运维工程师面试真题
百度 Linux 运维工程师面试真题 百度面了好久了,两个月了,估计都快成馊面了,一跟面条在走边边一不小心掉进了大海,于是 就有了汤面_经历非技术总结就两句话,幸运的是在朋友的帮助下顺利通过笔试,还认 ...