监视器滞后

滞后统计信息显示 Oracle GoldenGate 流程与业务应用生成的数据量保持同步的程度。利用此信息,您可以诊断可疑问题并优化 Oracle GoldenGate 进程的性能,从而最大限度地减少源数据库和目标数据库之间的延迟。

关于滞后

对于提取,滞后是提取处理记录的时间(基于系统时钟)与数据源中该记录的时间戳之间的差异,以秒为单位。

对于复制,滞后是复制处理最后一个记录的时间(基于系统时钟)与线索中该记录的时间戳之间的差异,以秒为单位。

要查看滞后统计信息,请使用 [LAG](/pls/topic/lookup?ctx=en/database/goldengate/core/26/coredoc&id=GCLIR-GUID-52D1B2C3-6ACF-4461-9ED2-FD3AE9121022) 或 [SEND ER](/pls/topic/lookup?ctx=en/database/goldengate/core/26/coredoc&id=GCLIR-GUID-DD62102E-A84D-4866-9A3A-9C2281CFEED7)、[SEND EXTRACT](/pls/topic/lookup?ctx=en/database/goldengate/core/26/coredoc&id=GCLIR-GUID-2A83CA04-DAB8-494B-BF36-F8D15E645749) 和 [SEND REPLICAT](/pls/topic/lookup?ctx=en/database/goldengate/core/26/coredoc&id=GCLIR-GUID-DBA8F45C-6016-4AB4-BF9A-00C117029E7F) 命令。

注:INFO 命令还返回滞后统计信息,但此统计信息取自检查点的最后一条记录,而不是当前正在处理的记录。它的准确度低于 LAG 或 INFO。

使用自动心跳表监视滞后

您可以使用默认的自动心跳表功能来监视端到端复制滞后。自动心跳从每个源数据库发送到复制流,方法是更新心跳种子表和心跳表中的记录并构建 heartbeat history table。复制路径中的每个复制进程都会处理这些心跳记录并更新其中的信息。这些心跳记录将插入或更新到目标数据库的心跳表中。

心跳表包含以下信息:

使用心跳表和心跳历史记录表中的信息,可以计算每个复制中的当前和历史滞后。

Replicat 可以使用自动心跳表 (LOGBSN) 跟踪提取的当前重新启动位置。这样,可以根据需要从源数据库重新生成线索文件,并最大程度地缩短源数据库的重做日志保留期。此外,通过跟踪最近的提取重新启动位置,可以更频繁地清除自动冲突检测和解决 (ACDR) 表的墓碑表。

在双向配置中,心跳表的条目数与数据库具有的相邻项的复制路径数相同,在单向设置中,源处的表为空。传出列具有时间戳和传出路径、本地提取和下游进程。传入列具有上游进程和本地复制的时间戳和路径。

在单向配置中,目标数据库将仅填充心跳表中的传入列。

注:MySQL 版本 5.5 不支持自动心跳功能。

心跳表端到端复制流

心跳表的端到端复制过程依赖于使用 Oracle GoldenGate 线索格式。该过程如下:


使用 ADD HEARTBEATTABLE 命令将心跳表添加到每个数据库。将心跳表添加到所有源实例和目标实例,然后重新启动现有 Oracle GoldenGate 进程以启用心跳功能。根据数据库,您可能需要也可能不需要创建或启用作业来填充心跳表数据。

请参见以下示例:

DBLOGIN USERIDALIAS *alias*  [DOMAIN domain]|[SYSDBA | SQLID sqlid][SESSIONCHARSET character_set]}
ADD HEARTBEATTABLE

(可选)对于 Oracle 数据库,必须确保 Oracle DBMS_SCHEDULER 在心跳更新依赖时能够正常运行。可以通过发出以下命令来查询 DBMS_SCHEDULER:

SELECT START_DATE, LAST_START_DATE, NEXT_RUN_DATE
FROM DBA_SCHEDULER_JOBS

Where job_name ='GG_UPDATE_HEARTBEATS';

然后查找 NEXT_RUN_DATE 的有效条目,这是调度程序下次运行的时间。如果这是过去的时间戳,则不会运行任何作业,您必须对其进行更正。

调度程序无法工作的常见原因是参数 job_queue_processes 设置得太低(通常为零)。使用 ALTER SYSTEM SET JOB_QUEUE_PROCESSES = ##; 命令增加数据库中配置的 job_queue_processes 的数量,其中 ## 是作业队列进程数。


运行提取,在接收逻辑更改记录 (LCR) 时,提取将检查 OUTGOING_EXTRACT 列中的值。



读取记录的分发服务将检查 OUTGOING_ROUTING_PATH 列中的值。此列包含分发路径的列表。

如果值为 NULL,则使用当前组名称(和路径(如果这是分发服务)更新该列),"*",更新 OUTGOING_ROUTING_TS 列,并将记录写入其目标线索文件。

如果该值在列表中包含 "*",则将其替换为 group name[:pathname],"*"',更新 OUTGOING_ROUTING_TS 列,并将记录写入其目标线索文件中。如果该值在列表中没有星号 (*),并且分发路径名在列表中,则会将记录发送到列表中相关 group name[:pathname],"*"' 对中指定的路径。如果分发路径名称不在列表中,则会放弃该记录。

运行复制,在收到记录时,复制将检查 OUTGOING_REPLICAT 列中的值。

附加注意事项:

当心跳流过系统时,计算滞后依赖于要正确设置的源系统和目标系统的时钟。如果目标系统领先于源系统,则延迟可能为负。滞后显示为负数,以便您了解其时钟差异并可以采取措施来修复它。

流经系统的时间戳为 UTC。没有与时间戳关联的时区,因此在查看心跳表时,即使不同的组件位于不同的时区,也可以快速查看滞后。可以在基础表上编写所需的任何视图;建议使用 UTC。

所有心跳条目都将写入 UTF-8 中的线索。

传出路径和传入路径共同唯一地确定行。这意味着,如果有两行具有相同的传出路径和不同的传入路径,则将其视为两个唯一的条目。

心跳表详细信息

GG_HEARTBEAT 表显示端到端复制时间的时间戳信息,以及不同组件主要和辅助提取和复制的时间戳信息。

在单向环境中,只有目标数据库包含有关复制滞后的信息。也就是在源数据库中生成记录并在目标数据库中对客户机可见的时间。注:当源数据库和远程数据库具有相同的名称时,自动心跳表不会使用数据填充 OUTGOING_% 列。要更改数据库名称,请使用实用程序 DBNEWID。有关详细信息,请参见 DBNEWID Utility 。

列 数据类型 说明
LOCAL_DATABASE VARCHAR2 测量来自远程数据库的复制时间的本地数据库。
HEARTBEAT_TIMESTAMP TIMESTAMP(6) 在远程数据库中生成时间戳的时间点。
REMOTE_DATABASE VARCHAR2 生成时间戳的远程数据库
INCOMING_EXTRACT VARCHAR2 远程数据库中的主提取(捕获)的名称
INCOMING_ROUTING_PATH VARCHAR2 远程数据库中的辅助提取(泵)的名称
INCOMING_REPLICAT VARCHAR2 本地数据库上的复制的名称。
INCOMING_HEARTBEAT_TS TIMESTAMP(6) 将信息插入到本地数据库的 GG_HEARTBEAT 表中的最终时间戳。
INCOMING_EXTRACT_TS TIMESTAMP(6) 生成的时间戳的时间戳由远程数据库中的主提取处理。
INCOMING_ROUTING_TS TIMESTAMP(6) 生成的时间戳的时间戳由远程数据库的辅助提取处理。
INCOMING_REPLICAT_TS TIMESTAMP(6) 生成的时间戳的时间戳由本地数据库的 Replicat 处理。
OUTGOING_EXTRACT VARCHAR2 双向/反向复制:本地数据库上的主提取的名称。
OUTGOING_ROUTING_PATH VARCHAR2 双向/N- 向复制:本地数据库上的辅助提取的名称。
OUTGOING_REPLICAT VARCHAR2 双向/N- 向复制:远程数据库上的复制的名称。
OUTGOING_HEARTBEAT_TS TIMESTAMP(6) 双向/N- 向复制:将信息插入远程数据库的表中时的最终时间戳。
OUTGOING_EXTRACT_TS TIMESTAMP(6) 双向/N- 向复制:生成的时间戳的时间戳由本地数据库上的主提取处理。
OUTGOING_ROUTING_TS TIMESTAMP(6) 双向/N- 向复制:生成的时间戳的时间戳由本地数据库上的辅助提取处理。
OUTGOING_REPLICAT_TS TIMESTAMP(6) 双向/N- 向复制:生成的时间戳的时间戳由远程数据库上的 Replicat 处理。
INCOMING_REPLICAT_LW_CSN VARCHAR2 -
INCOMING_EXTRACT_HEARTBEAT_CSN VARCHAR2 -
INCOMING_EXTRACT_RESTART_CSN VARCHAR2 -
INCOMING_EXTRACT_RESTART_TS TIMESTAMP(6) -

GG_HEARTBEAT_HISTORY 表显示端到端复制时间的历史时间戳信息以及不同组件主要和辅助提取和复制的计时信息。

在单向环境中,只有目标数据库包含有关复制滞后的信息。

时间戳以 UTC 时区管理。也就是在源数据库中生成记录并在目标数据库中对客户机可见的时间。

列 数据类型 说明
LOCAL_DATABASE VARCHAR2 测量端到端延迟的本地数据库。
HEARTBEAT_RECEIVED_TS TIMESTAMP(6) 远程数据库的时间戳在本地数据库接收的时间点。
REMOTE_DATABASE VARCHAR2 生成时间戳的远程数据库。
INCOMING_EXTRACT VARCHAR2 远程数据库上的主提取的名称。
INCOMING_ROUTING_PATH VARCHAR2 远程数据库的辅助提取的名称。
INCOMING_REPLICAT VARCHAR2 本地数据库上的复制的名称。
INCOMING_HEARTBEAT_TS TIMESTAMP(6) 将信息插入本地数据库上的 GG_HEARTBEAT_HISTORY 表时的最终时间戳。
INCOMING_EXTRACT_TS TIMESTAMP(6) 由远程数据库上的主提取处理生成的时间戳。
INCOMING_ROUTING_TS TIMESTAMP(6) 远程数据库上的辅助提取处理生成的时间戳。
INCOMING_REPLICAT_TS TIMESTAMP(6) 本地数据库上的 Replicat 处理生成的时间戳的时间戳。
OUTGOING_EXTRACT VARCHAR2 双向/N- 向复制:从本地数据库提取的主数据库的名称。
OUTGOING_ROUTING_PATH VARCHAR2 双向/反向复制:从本地数据库提取的辅助提取的名称。
OUTGOING_REPLICAT VARCHAR2 双向/N- 向复制:远程数据库上的复制的名称。
OUTGOING_HEARTBEAT_TS TIMESTAMP(6) 双向/N- 向复制:将信息持久插入远程数据库的表中时的最终时间戳。
OUTGOING_EXTRACT_TS TIMESTAMP(6) 双向/N- 向复制:本地数据库上的主提取处理生成的时间戳。
OUTGOING_ROUTING_TS TIMESTAMP(6) 双向/非向复制:由本地数据库上的辅助提取处理生成的时间戳的时间戳。
OUTGOING_REPLICAT_TS TIMESTAMP(6) 双向/双向复制:远程数据库上的复制处理生成的时间戳时的时间戳。
REPLICAT_LOW_WATERMARK_CSN String 此列在处理此心跳记录时由复制填充。处理此记录时,它会用当前低水位标记 (LWM) 填充此列。这允许我们从作为复制 LWM 的心跳记录中选择 LOGBSN。
SOURCE_EXTRACT_HEARTBEAT_CSN String 此列由提取填充,并包含源数据库中心跳事务处理的源提交 SCN。源数据库上的心跳作业无法填充此值,因为它将不知道提交 SCN apriori。
SOURCE_EXTRACT_RESTART_CSN String 此列将由 Extract 填充,并在 Extract 处理此特定心跳记录时包含当前 LOGBSN。源数据库上的心跳作业将不会填充此值。
SOURCE_EXTRACT_RESTART_CSN_TS TIMESTAMP 提取将填充此列,并在提取处理此特定心跳记录时包含 UTC 中与当前 LOGBSN 对应的重做时间戳。源数据库上的心跳作业将不会填充此值。

GG_LAG 视图显示有关本地数据库与远程数据库之间的复制滞后的信息。

在单向环境中,只有目标数据库包含有关复制滞后的信息。滞后以秒为单位。

列 数据类型 说明
LOCAL_DATABASE VARCHAR2 测量来自远程数据库的端到端复制滞后的本地数据库。
CURRENT_LOCAL_TS TIMESTAMP(6) 本地数据库的当前时间戳。
REMOTE_DATABASE VARCHAR2 生成时间戳的远程数据库。
INCOMING_HEARTBEAT_AGE NUMBER 从远程数据库接收的最近心跳的持续时间。
INCOMING_PATH VARCHAR2 使用提取和复制组件从远程数据库到本地数据库的复制路径。
INCOMING_LAG NUMBER 从远程数据库到本地数据库的复制滞后。这是远程数据库生成的心跳减去信息持久插入本地数据库表的时间。
OUTGOING_HEARTBEAT_AGE NUMBER 从本地数据库到远程数据库的最近心跳的持续时间。
OUTGOING_PATH VARCHAR2 从本地数据库到具有提取和复制组件的远程数据库的复制路径
OUTGOING_LAG NUMBER 从本地数据库到远程数据库的复制滞后。这是本地数据库生成的心跳减去信息持久插入远程数据库表的时间。
REMOTE_EXTRACT_RESTART_CSN String 来源提取重新启动位置。
REMOTE_DATABASE DB_UNIQUE_NAME String 将显示远程数据库唯一名称。如果不存在唯一名称,则显示 DB_NAME 值。
REMOTE_EXTRACT_RESTART_CSN_TIME Timestamp 与来源提取重做位置关联的时间戳。
REMOTE_DB_OLDEST_OPEN_TXN_AGE Timestamp 提取当前正在处理的源数据库中最早未结事务处理的存活时间。此列可以计算为 SYSTIMESTAMP - REMOTE_EXTRACT_RESTART_TIME。
LOCAL_REPLICAT_LWM_CSN String 处理心跳时本地复制的低水位标志 CSN。

GG_LAG_HISTORY 视图显示有关本地数据库与远程数据库之间的复制滞后历史记录的历史记录信息。

在单向环境中,只有目标数据库包含有关复制滞后的信息。

滞后单位以秒为单位。

列 数据类型 说明
LOCAL_DATABASE VARCHAR2 测量来自远程数据库的端到端复制滞后的本地数据库。
HEARTBEAT_RECEIVED_TS TIMESTAMP(6) 远程数据库的时间戳在本地数据库上接收的时间点。
REMOTE_DATABASE VARCHAR2 生成时间戳的远程数据库。
DB_NAME 字符串 远程数据库名称。
DB_UNIQUE_NAME 字符串 远程数据库唯一名称。如果数据库唯一名称不存在,则 DB_NAME 和 DB_UNIQUE_NAME 将相同。在切换到备用方案时,db_unique_name 将更改,但 db_name 和复制路径保持不变
INCOMING_HEARTBEAT_AGE NUMBER 心跳表的年龄。
INCOMING_PATH VARCHAR2 使用 Extract 和 Replicat 组件从远程数据库到本地数据库的复制路径。
INCOMING_LAG NUMBER 从远程数据库到本地数据库的复制滞后。这是远程数据库生成心跳的时间,减去将信息持久插入本地数据库表的时间。
OUTGOING_HEARTBEAT_AGE NUMBER  
OUTGOING_PATH VARCHAR2 使用提取和复制组件从本地数据库到远程数据库的复制路径。
OUTGOING_LAG NUMBER 从本地数据库到远程数据库的复制滞后。这是本地数据库生成心跳的时间减去信息持久插入远程数据库表的时间。
REMOTE_EXTRACT_RESTART_CSN String 来源提取重新启动位置。
REMOTE_EXTRACT_RESTART_CSN_TIME TIMESTAMP 与来源提取重做位置关联的时间戳。
REMOTE_DB_OLDEST_OPEN_TXN_AGE TIMESTAMP 提取当前正在处理的源数据库中最早未结事务处理的存活时间。此列的计算公式为:SYSTIMESTAMP - REMOTE_EXTRACT_RESTART_TIME
LOCAL_REPLICAT_LWM_CSN String 处理心跳时本地复制的低水位标志 CSN。
INCOMING_EXTRACT_LAG - -
INCOMING_ROUTINE_LAG - -
INCOMING_REPLICAT_READ_LAG - -
INCOMING_REPICAT_LAG - -
OUTGOING_EXTRACT_LAG - -
OUTGOING_ROUTINE_LAG - -
OUTGOING_REPLICAT_READ_LAG - -
OUTGOING_REPLICAT_LAG - -

更新脉动表

心跳种子表中的 HEARTBEAT_TIMESTAMP 列必须由数据库作业定期更新。默认心跳间隔为 1 分钟,可以使用命令行或管理服务 Web 界面指定或覆盖此间隔。

对于 Oracle AI Database,将自动创建数据库作业。

对于 PostgreSQL,您可以设置自动任务以更新心跳表。请参阅配置自动化任务以更新 PostgreSQL 的心跳表。

对于所有其他受支持的数据库,必须创建后台作业以使用特定于数据库的调度程序功能更新心跳时间戳。

有关更新心跳表的详细信息,请参见 [ADD HEARTBEATTABLE](/pls/topic/lookup?ctx=en/database/goldengate/core/26/coredoc&id=GCLIR-GUID-126E30A2-DC7A-4C93-93EC-0EB8BA7C13CB) 和 [ALTER HEARTBEATTABLE](/pls/topic/lookup?ctx=en/database/goldengate/core/26/coredoc&id=GCLIR-GUID-08BC29F9-8A5D-4AD9-B355-528A270EECC8)。

配置自动化任务以更新 PostgreSQL 的心跳表

Oracle GoldenGate for PostgreSQL Web 界面提供了用于创建 cron 作业以定期更新心跳表的功能。

以下是从 Web 界面创建此任务的步骤:

  1. 从左侧导航窗格中,展开任务,然后选择更新心跳任务选项。

    \

    用于更新 PostgreSQL 的心跳的“自动化任务”选项

    \

  2. 单击“更新心跳任务”页上的加号。此时将显示创建新心跳任务对话框。\\

    创建新的 "Update Heartbeat Task"(更新心跳任务)对话框,其中包含用于选择数据库身份证明别名、域和指定执行心跳表的自动更新的频率间隔的选项。

  3. 在对话框中指定以下值,然后单击提交:

    • 名称:为任务指定一个名称。

    • Credential Domain(身份证明域):从下拉列表中选择域名。

    • 身份证明别名:选择要为其创建更新心跳任务的 PostgreSQL 数据库实例的身份证明别名。

    • 频率间隔:指定运行更新任务的频率间隔。最小值为 60(默认值),最大值为 7999。

要修改或删除“更新心跳”任务,可以使用以下步骤:1。从管理服务界面的左侧导航窗格中,选择任务。

  1. 单击 Update Heartbeat Tasks 。此时将显示现有更新心跳任务的列表。

  2. 从操作列中,单击铅笔图标。此时将显示 Edit Update Heartbeat Task(编辑更新心跳任务)对话框。

  3. 您可以更改或修改身份证明域、别名或频率间隔,然后单击提交。修改的“更新心跳任务”列在“更新心跳任务”页上。

  4. 要删除任务,请在任务的“操作”列中单击删除图标。单击 "OK"(确定)以确认删除。

清除脉动历史记录表

使用作业定期清除心跳历史记录表。默认间隔为 30 天,可以使用管理客户端或管理服务 Web 界面等命令行界面指定或覆盖此间隔。

对于 Oracle AI Database,将自动创建数据库作业。

对于所有其他受支持的数据库,必须创建后台作业以使用特定于数据库的调度程序功能清除心跳历史记录表。

最佳实践

Oracle 建议您:

使用自动心跳命令

可以使用脉动表命令控制 Oracle GoldenGate 自动脉动功能,如下所示。

命令 说明
ADD HEARTBEATTABLE 创建自动心跳功能所需的心跳表,包括 LOGBSN 列。
ALTER HEARTBEATTABLE 变更现有脉动对象。
ALTER HEARTBEATTABLE UPGRADE 更改心跳表以将 LOGBSN 列添加到心跳表。此项是可选的。
DELETE HEARTBEATTABLE 删除现有脉动对象。
DELETE HEARTBEATENTRY 删除脉动表中的条目。
INFO HEARTBEATTABLE 显示脉动表信息。

报告滞后

可以从管理服务访问滞后报告。您可以设置滞后报告任务,以在滞后值超过指定阈值时自动生成特定任期的滞后报告并发出警告。要设置用于生成滞后报表的自动任务,请执行以下操作:1。在“管理服务”左侧导航窗格中,单击任务,然后选择滞后报表。

  1. “操作”列包含用于删除、更改、刷新和查看滞后报告任务详细信息的所有选项。

  2. 选择所需的选项。

  3. 如果选择“变更任务”选项,则会显示用于编辑滞后报告的选项。这些选项是:

    • Enabled:继续处理滞后报表任务。

    • 检查间隔(分钟):设置时间间隔以检查滞后报告。

    • 报告:如果超过指定的阈值,则自动生成滞后报告。您可以在“如果超出”框中指定阈值。

    • If Exceeds(如果超过):指定将启动警告的阈值。值可以是秒、分钟或小时。

    • 警告:如果滞后阈值超过指定的阈值,则允许生成警告。

    • 当超过:触发警告的滞后阈值。

  4. 单击提交。

标识复制中的滞后

要标识复制进程中的滞后并修改表的列,请执行以下操作:

  1. 在源数据库上暂停链接到 Oracle GoldenGate 的所有表的活动。

  2. 启动管理客户机。

  3. 对 Replicat 组运行以下命令:

INFO REPLICAT *group*
  1. 在 Checkpoint Lag 行上,验证是否存在任何复制滞后。如果需要,继续发出 INFO REPLICAT,直到滞后为零,这表示已处理线索中的所有数据。

  2. 停止复制组。

STOP REPLICAT *group*
  1. 对目标数据库执行表修改。

  2. 启动复制进程。

START REPLICAT *group*
  1. 允许用户活动恢复链接到 Oracle GoldenGate 的所有源表。