ラグのモニター
ラグ統計は、Oracle GoldenGateプロセスが、ビジネス・アプリケーションによって生成されたデータの量に後れを取らず適切に処理を進めているかどうかを示します。この情報によって、潜在的な問題を診断し、Oracle GoldenGateプロセスのパフォーマンスをチューニングしてソース・データベースとターゲット・データベース間のレイテンシを最小化できます。
ラグについて
Extractのラグとは、(システム・クロックに基づく)Extractがレコードを処理した時刻と、データ・ソース内のそのレコードのタイムスタンプとの差(秒)です。
Replicatのラグとは、(システムクロックに基づく)Replicatが最後のレコードを処理した時刻と、証跡内のそのレコードのタイムスタンプとの差(秒)です。
ラグ統計を表示するには、LAGまたはSEND ER、SEND EXTRACT、SEND REPLICATコマンドを使用します。
ノート:
INFOコマンドでもラグ統計は戻されますが、この統計は、処理中の現在のレコードではなく、チェックポイントが指定された最後のレコードから取得された統計です。LAGやINFOと比較して正確性の点で劣ります。
自動ハートビート表を使用したラグのモニター
デフォルトの自動ハートビート表機能を使用してエンドツーエンドのレプリケーション遅延を監視できます。自動ハートビートは、ハートビート・シード表およびハートビート表のレコードを更新し、ハートビート履歴表を構築することにより、各ソース・データベースからレプリケーション・ストリームに送信されます。レプリケーション・パスの各レプリケーション・プロセスがこれらのハートビート・レコードを処理して、その情報を更新します。これらのハートビート・レコードは、ターゲット・データベースでハートビート表に挿入されるか、更新されます。
ハートビート表には次の情報が含まれます。
-
ソース・データベース
-
宛先データベース
-
送信レプリケーション・ストリームに関する情報:
-
パス内のExtract、Distribution ServiceまたはReplicatプロセスの名前
-
ハートビート・レコードがレプリケーション・プロセスによって処理されたときのタイムスタンプ。
-
-
受信レプリケーション・ストリームに関する情報:
-
パス内のExtract、Distribution ServiceまたはReplicatプロセスの名前
-
ハートビート・レコードがレプリケーション・プロセスによって処理されたときのタイムスタンプ。
-
ハートビート表とハートビート履歴表の情報を使用して、各レプリケーションの現在と過去の遅延を計算できます。
Replicatは、自動ハートビート表(LOGBSN)を使用してExtractの現在の再開位置を追跡できます。これにより、必要に応じてソース・データベースから証跡ファイルを再生成し、ソース・データベースのREDOログ保存期間を最小化できます。また、最新のExtractの再開位置を追跡することにより、自動競合検出および解決(ACDR)表のツームストン表をより頻繁にパージできます。
双方向の構成では、データベースに含まれる近隣へのレプリケーション・パスと同数のエントリがハートビート表にあり、片方向設定ではソース側の表は空です。送信列には、タイムスタンプと送信パス、ローカルExtractおよびダウンストリームのプロセスが含まれます。受信列には、タイムスタンプ、アップストリームのプロセスのパスおよびローカルReplicatが含まれます。
片方向構成では、ターゲット・データベースはハートビート表の受信列のみに移入します。
ノート:
自動ハートビート機能はMySQLバージョン5.5ではサポートされていません。
ハートビート表のエンドツーエンド・レプリケーション・フロー
ハートビート表のエンドツーエンドのレプリケーション処理は、Oracle GoldenGateの証跡形式の使用に依存しています。この処理について、次に説明します。
-
ADD HEARTBEATTABLEコマンドを使用して、各データベースにハートビート表を追加します。ハートビート表をすべてのソース・インスタンスおよびターゲット・インスタンスに追加し、既存のOracle GoldenGateプロセスを再起動して、ハートビート機能を有効にします。データベース・システムによっては、ハートビート表データを移入するためにジョブの作成または有効化が必要になることがあります。次の例を参照してください。DBLOGIN USERIDALIAS alias [DOMAIN domain]|[SYSDBA | SQLID sqlid][SESSIONCHARSET character_set]}ADD HEARTBEATTABLE -
(オプション) Oracle Databaseの場合、ハートビート更新はOracle
DBMS_SCHEDULERに依存しているので、これが適切に動作していることを確認する必要があります。DBMS_SCHEDULERを問い合せるには、次を発行します。SELECT START_DATE, LAST_START_DATE, NEXT_RUN_DATE FROM DBA_SCHEDULER_JOBSWhere
job_name='GG_UPDATE_HEARTBEATS';次に、
NEXT_RUN_DATE(スケジューラを次回実行する日時)の有効な値を探します。これが過去のタイムスタンプである場合、ジョブは実行されないので修正する必要があります。スケジューラが機能しない一般的な理由は、パラメータ
job_queue_processesの設定値が低すぎる(通常はゼロ)場合です。ALTER SYSTEM SET JOB_QUEUE_PROCESSES = ##;(##はジョブ・キュー・プロセス数)コマンドを使用して、データベースに構成されたjob_queue_processesの数を増やします。 -
Extractを実行します。これにより、論理変更レコード(LCR)を受信時に、
OUTGOING_EXTRACT列の値がチェックされます。-
Extract名がこの値に一致すると、
OUTGOING_EXTRACT_TS列が更新され、レコードが証跡に入力されます。 -
Extract名が一致しない場合、LCRは破棄されます。
-
OUTGOING_EXTRACT値がNULLの場合、OUTGOING_EXTRACT_TSとともに移入され、レコードが証跡に入力されます。
-
-
レコードの読取り時にDistribution Serviceによって、
OUTGOING_ROUTING_PATH列の値がチェックされます。この列には分散パスのリストが含まれています。値が
NULLの場合、列は現在のグループ名(およびパス、ただしこれがDistribution Serviceの場合)"*"で更新され、OUTGOING_ROUTING_TS列を更新して、レコードがそのターゲット証跡ファイルに書き込まれます。値のリストに
"*"が含まれている場合は、それをgroup name[:pathname],"*"'で置換して、OUTGOING_ROUTING_TS列を更新し、レコードがそのターゲット証跡ファイルに書き込まれます。リストの値にアスタリスク(*)が含まれていない場合、分散パス名がリストにあると、リスト内の関連するgroup name[:pathname],"*"'ペアに指定されたパスにレコードが送信されます。分散パス名がリストにない場合、レコードは破棄されます。Replicatを実行します。これによりレコードの受信時に、
OUTGOING_REPLICA列の値がチェックされます。-
Replicat名が値に一致すると、ハートビート表の行が更新され、レコードが履歴表に挿入されます。
-
Replicat名が一致しない場合は、レコードが破棄されます。
-
値が
NULLの場合、Replicatの列マッピングを暗黙的に起動して、ハートビート表とハートビート履歴表の行が更新されます。Replicatの自動列マッピング
REMOTE_DATABASE = LOCAL_DATABASE INCOMING_EXTRACT = OUTGOING_EXTRACT INCOMING_ROUTING_PATH = OUTGOING_ROUTING_PATH with "*" removed INCOMING_REPLICAT = @GETENV ("GGENVIRONMENT", "GROUPNAME") INCOMING_HEARTBEAT_TS = HEARTBEAT_TIMESTAMP INCOMING_EXTRACT_TS = OUTGOING_EXTRACT_TS INCOMING_ROUTING_TS = OUTGOING_ROUTING_TS INCOMING_REPLICAT_TS = @DATE ('UYYYY-MM-DD HH:MI:SS.FFFFFF','JTSLCT',@GETENV ('JULIANTIMESTAMP')) LOCAL_DATABASE = REMOTE_DATABASE OUTGOING_EXTRACT = INCOMING_EXTRACT OUTGOING_ROUTING_PATH = INCOMING_ROUTING_PATH OUTGOING_HEARTBEAT_TS = INCOMING_HEARTBEAT_TS OUTGOING_REPLICAT = INCOMING_REPLICAT OUTGOING_HEARTBEAT_TS = INCOMING_HEARTBEAT_TS
-
その他の考慮事項:
ハートビートがシステムを流れる際の遅延の計算は、ソース・システムとターゲット・システムのクロックが正確に設定されているかどうかに依存します。ターゲット・システムがソース・システムよりも進んでいると、遅延が負の値になる可能性があります。クロックの差異に気付いて修正する措置を取れるよう、遅延は負の数値として表示されます。
システムを流れるタイムスタンプはUTCで設定されています。タイムスタンプにはタイムゾーンが関連付けられていないので、各コンポーネントが異なるタイムゾーンに設定されている場合でも、ハートビート表を表示するときは、すぐに遅延を表示できます。基礎となる表を基に必要なビューを書き込むことができます。UTCが推奨されます。
すべてのハートビート・エントリはUTF-8で証跡に書き込まれます。
送信パスと受信パスを組み合せて一意に行が特定されます。つまり、送信パスが同じで受信パスが異なる2つの行がある場合、2つの一意のエントリとみなされます。
ハートビート表の詳細
GG_HEARTBEAT表には、エンドツーエンド・レプリケーション時間のタイムスタンプ情報と、異なるコンポーネントのプライマリとセカンダリのExtractおよびReplicatのタイミング情報が表示されます。
片方向環境では、ターゲット・データベースのみにレプリケーション・ラグに関する情報が含まれます。この場合は、レコードがソース・データベースで生成され、ターゲット・データベースでクライアントに見えるようになります。
ノート:
ソース・データベースとリモート・データベースの両方が同じ名前の場合、自動ハートビート表はOUTGOING_%列にデータを移入しません。データベース名を変更するには、ユーティリティDBNEWIDを使用します。詳細は、DBNEWIDユーティリティを参照してください。
| 列 | データ型 | 説明 |
|---|---|---|
|
|
|
リモート・データベースからのレプリケーション時間が計測されるローカル・データベース。 |
|
|
|
タイムスタンプがリモート・データベースで生成された時点。 |
|
|
|
タイムスタンプが生成されるリモート・データベース |
|
|
|
リモート・データベースでのプライマリExtract (取得)の名前 |
|
|
|
リモート・データベースでのセカンダリExtract (ポンプ)の名前 |
|
|
|
ローカル・データベースでのReplicatの名前。 |
|
|
|
情報がローカル・データベースの |
|
|
|
生成されたタイムスタンプがリモート・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
|
生成されたタイムスタンプがリモート・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
|
生成されたタイムスタンプがローカル・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: ローカル・データベースのプライマリExtractの名前。 |
|
|
|
双方向/N方向レプリケーション: ローカル・データベースのセカンダリExtractの名前。 |
|
|
|
双方向/N方向レプリケーション: リモート・データベースのReplicatの名前。 |
|
|
|
双方向/N方向レプリケーション: 情報がリモート・データベースの表に挿入されるときの最終タイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがリモート・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
|
- |
|
|
|
- |
|
|
|
- |
|
|
|
- |
GG_HEARTBEAT_HISTORY表には、エンドツーエンド・レプリケーション時間のタイムスタンプ履歴情報と、異なるコンポーネントのプライマリとセカンダリのExtractおよびReplicatのタイミング情報が表示されます。
片方向環境では、宛先データベースのみにレプリケーション・ラグに関する情報が含まれます。
タイムスタンプはUTCタイムゾーンで管理されます。この場合は、レコードがソース・データベースで生成され、ターゲット・データベースでクライアントに見えるようになります。
| 列 | データ型 | 説明 |
|---|---|---|
|
|
|
エンドツーエンド・ラグが計測されるローカル・データベース。 |
|
|
|
リモート・データベースのタイムスタンプがローカル・データベースで受け取られた時点。 |
|
|
|
タイムスタンプが生成されるリモート・データベース。 |
|
|
|
リモート・データベースのプライマリExtractの名前。 |
|
|
|
リモート・データベースのセカンダリExtractの名前。 |
|
|
|
ローカル・データベースでのReplicatの名前。 |
|
|
|
情報がローカル・データベースの |
|
|
|
生成されたタイムスタンプがリモート・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
|
生成されたタイムスタンプがリモート・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
|
生成されたタイムスタンプがローカル・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: ローカル・データベースのプライマリExtractの名前。 |
|
|
|
双方向/N方向レプリケーション: ローカル・データベースのセカンダリExtractの名前。 |
|
|
|
双方向/N方向レプリケーション: リモート・データベースのReplicatの名前。 |
|
|
|
双方向/N方向レプリケーション: 情報がリモート・データベースの表に永続的に挿入されたときの最終タイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのプライマリExtractで処理されるときのタイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがローカル・データベースのセカンダリExtractで処理されるときのタイムスタンプ。 |
|
|
|
双方向/N方向レプリケーション: 生成されたタイムスタンプがリモート・データベースのReplicatで処理されるときのタイムスタンプ。 |
|
|
|
この列は、このハートビート・レコードを処理するときにReplicatによって移入されます。このレコードを処理する際に、現在の低水位標(LWM)がこの列に移入されます。これにより、ReplicatのLWM以降のハートビート・レコードからLOGBSNを選択できます。 |
|
|
|
この列は、Extractによって移入され、ソース・データベースのハートビート・トランザクションのソース・コミットSCNが含まれています。ソース・データベースのハートビート・ジョブは、コミットSCNを先験的に知らないため、この値を移入できません。 |
|
|
|
この列は、Extractによって移入され、Extractがこの特定のハートビート・レコードを処理するときの現在のLOGBSNが含まれています。ソース・データベースのハートビート・ジョブはこの値を移入しません。 |
|
|
|
この列は、Extractによって移入され、Extractがこの特定のハートビート・レコードを処理するときの現在のLOGBSNに対応するUTCのREDOタイムスタンプが含まれています。ソース・データベースのハートビート・ジョブはこの値を移入しません。 |
GG_LAGビューには、ローカル・データベースとリモート・データベースのレプリケーション・ラグに関する情報が表示されます。
片方向環境では、宛先データベースのみにレプリケーション・ラグに関する情報が含まれます。ラグは秒単位で計測されます。
| 列 | データ型 | 説明 |
|---|---|---|
|
|
|
リモート・データベースからのエンドツーエンド・レプリケーション・ラグが計測されるローカル・データベース。 |
|
|
|
ローカル・データベースの現在のタイムスタンプ。 |
|
|
|
タイムスタンプが生成されるリモート・データベース。 |
|
|
|
リモート・データベースから受信した最新のハートビートの経過時間。 |
|
|
|
リモート・データベースからExtractおよびReplicatコンポーネントを含むローカル・データベースへのレプリケーション・パス。 |
|
|
|
リモート・データベースからローカル・データベースへのレプリケーション・ラグ。この時間は、リモート・データベースでハートビートが生成された時刻から、ローカル・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
|
ローカル・データベースからリモート・データベースへの最新のハートビートの経過時間。 |
|
|
|
ローカル・データベースからExtractおよびReplicatコンポーネントを含むリモート・データベースへのレプリケーション・パス。 |
|
|
|
ローカル・データベースからリモート・データベースへのレプリケーション・ラグ。この時間は、ローカル・データベースでハートビートが生成された時刻から、リモート・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
|
ソースExtractの再開位置。 |
|
|
|
リモート・データベースの一意の名前が表示されます。一意の名前が存在しない場合は、 |
|
|
Timestamp |
ソースExtractのREDOの位置に関連付けられたタイムスタンプ。 |
|
|
Timestamp |
Extractが現在処理しているソース・データベースで最も古いオープン・トランザクションの経過時間。この列は、 |
|
|
String |
ハートビートを処理したときのローカルReplicatの低水位標CSN。 |
GG_LAG_HISTORYビューには、ローカル・データベースとリモート・データベースのレプリケーション・ラグ履歴に関する履歴情報が表示されます。
片方向環境では、宛先データベースのみにレプリケーション・ラグに関する情報が含まれます。
ラグは秒単位です。
| 列 | データ型 | 説明 |
|---|---|---|
|
|
|
リモート・データベースからのエンドツーエンド・レプリケーション・ラグが計測されるローカル・データベース。 |
|
|
|
リモート・データベースのタイムスタンプがローカル・データベースで受け取られた時点。 |
|
|
|
タイムスタンプが生成されるリモート・データベース。 |
|
|
String | リモート・データベース名。 |
DB_UNIQUE_NAME |
String | リモート・データベースの一意の名前。データベースの一意の名前が存在しない場合、DB_NAMEとDB_UNIQUE_NAMEは同じになります。
スタンバイへのスイッチオーバーのシナリオでは、 |
|
|
|
ハートビート表の経過期間。 |
|
|
|
リモート・データベースからExtractおよびReplicatコンポーネントを含むローカル・データベースへのレプリケーション・パス。 |
|
|
|
リモート・データベースからローカル・データベースへのレプリケーション・ラグ。この時間は、リモート・データベースでハートビートが生成された時刻から、ローカル・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
|
|
|
|
|
ローカル・データベースからExtractおよびReplicatコンポーネントを含むリモート・データベースへのレプリケーション・パス。 |
|
|
|
ローカル・データベースからリモート・データベースへのレプリケーション・ラグ。この時間は、ローカル・データベースでハートビートが生成された時刻から、リモート・データベースの表に情報が永続的に挿入された時刻を引いたものです。 |
|
|
|
ソースExtractの再開位置。 |
|
|
|
ソースExtractのREDOの位置に関連付けられたタイムスタンプ。 |
|
|
|
Extractが現在処理しているソース・データベースで最も古いオープン・トランザクションの経過時間。この列は、 |
|
|
|
ハートビートを処理したときのローカルReplicatの低水位標CSN。 |
|
|
- |
- |
|
|
- | - |
|
|
- | - |
|
|
- | - |
|
|
- | - |
|
|
- | - |
|
|
- | - |
|
|
- | - |
ハートビート表の更新
ハートビート・シード表のHEARTBEAT_TIMESTAMP列は、データベース・ジョブで定期的に更新する必要があります。デフォルトのハートビート間隔は1分で、この間隔はコマンドラインまたは管理サービスWebインタフェースから指定または上書きできます。
Oracle Databaseの場合、データベース・ジョブは自動的に作成されます。
PostgreSQLの場合は、ハートビート表を更新するための自動タスクを設定できます。「PostgreSQLの場合のハートビート表を更新する自動化タスクの構成」を参照してください。
サポートされているその他のすべてのデータベースの場合、データベース固有のスケジューラ機能を使用してハートビート・タイムスタンプを更新するバックグラウンド・ジョブを作成する必要があります。
ハートビート表の更新の詳細は、ADD HEARTBEATTABLE、ALTER HEARTBEATTABLEを参照してください。
PostgreSQLの場合のハートビート表を更新する自動化タスクの構成
Oracle GoldenGate 23ai for PostgreSQL Webインタフェースでは、ハートビート表を定期的に更新するためのcronジョブを作成する機能が提供されます。
Webインタフェースからこのタスクを作成するステップは、次のとおりです:
-
管理者の資格証明を使用して管理サービスにログインします。
-
左側のナビゲーション・ペインで、「タスク」を展開し、ハートビート更新タスクオプションを選択します。

-
ハートビート更新タスクページでプラス記号をクリックします。ハートビート・タスクの新規作成ダイアログ・ボックスが表示されます。

-
このダイアログ・ボックスで次の値を指定し、「発行」をクリックします。
-
名前: タスクの名前を指定します。
-
資格証明ドメイン: ドロップダウン・リストからドメイン名を選択します。
-
資格証明別名: ハートビート更新タスクを作成するPostgreSQLデータベース・インスタンスの資格証明別名を選択します。
-
頻度間隔: 更新タスクを実行する頻度間隔を指定します。最小値は60 (デフォルト)であり、最大値は7999に設定できます。
-
-
管理サービス・インタフェースの左側のナビゲーション・ペインで、「タスク」を選択します。
-
ハートビート更新タスクをクリックします。既存のハートビート更新タスクのリストが表示されます。
-
「アクション」列で、鉛筆アイコンをクリックします。ハートビート更新タスクの編集ダイアログ・ボックスが表示されます。
-
資格証明ドメイン、別名または頻度間隔を変更し、「発行」をクリックできます。変更したハートビート更新タスクがハートビート更新タスクページに示されます。
-
タスクを削除するには、そのタスクの「アクション」列から「削除」アイコンをクリックします。「OK」をクリックして削除を確認します。
ハートビート履歴表のパージ
ハートビート履歴表はジョブを使用して定期的にパージされます。デフォルトの間隔は30日で、この間隔は管理クライアントまたはAdministration Service Webインタフェースなどのコマンドライン・インタフェースを使用して指定または上書きできます。
Oracle Databaseの場合、データベース・ジョブは自動的に作成されます。
サポートされているその他のすべてのデータベースの場合、データベース固有のスケジューラ機能を使用してハートビート・履歴表をパージするバックグラウンド・ジョブを作成する必要があります。
ベスト・プラクティス
次のことをお薦めします。
-
すべてのデータベースで同じハートビート頻度を使用して診断を容易にします。
-
容量に問題がある場合は保存時間を調整します。
-
デフォルトのハートビート表の頻度を保持します。頻度を30から60秒に設定すると、ほとんどのワークロードで最適な結果をもたらします。
-
遅延履歴統計を使用して遅延および期間の情報を収集します。
自動ハートビート・コマンドの使用方法
ハートビート表コマンドを使用して、次のようにOracle GoldenGateの自動ハートビート機能を制御できます。
| コマンド | 説明 |
|---|---|
|
|
自動ハートビート機能に必要なハートビート表( |
|
|
既存のハートビート・オブジェクトを変更します。 |
|
|
ハートビート表を変更して、ハートビート表に |
|
|
既存のハートビート・オブジェクトを削除します。 |
|
|
ハートビート表内のエントリを削除します。 |
|
|
ハートビート表情報を表示します。 |
ラグ・レポートの生成
-
管理サービスの左側のナビゲーション・ペインで、「タスク」をクリックし、「ラグ・レポート」を選択します。
-
「アクション」列には、ラグ・レポート・タスクの詳細を削除、変更、リフレッシュおよび表示するためのすべてのオプションが含まれています。
-
必要なオプションを選択します。
-
「タスクの変更」オプションを選択すると、ラグ・レポートを編集するためのオプションが表示されます。次のオプションがあります。
-
Enabled: ラグ・レポート・タスクの処理を維持します。
-
Check Every (in minutes): ラグ・レポートをチェックする時間間隔を設定します。
-
レポート: 指定したしきい値を超えた場合にラグ・レポートを自動的に生成します。「超過した場合」ボックスでしきい値を指定できます。
-
If Exceeds: 警告が通知されるまでのしきい値を指定します。値は、秒、分または時間になります。
-
警告: ラグのしきい値が指定したしきい値を超えた場合に警告が生成されるようにします。
-
When Exceeds: 警告がトリガーされるまでのラグしきい値。
-
-
「発行」をクリックします。