次の方法で共有


トランザクション レプリケーションの待機時間の計測および接続の検証

このトピックでは、SQL Server 2012 でレプリケーション モニター、Transact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用し、トランザクション レプリケーションの待機時間を計測して接続を検証する方法について説明します。 トランザクション レプリケーションには、トレーサー トークン機能が用意されており、これによって簡単にトランザクション レプリケーション トポロジにおける待機時間を計測したり、パブリッシャー、ディストリビューター、およびサブスクライバーの間の接続を検証したりすることができます。 トークン (小量のデータ) は、パブリケーション データベースのトランザクション ログに書き込まれ、通常のレプリケートされたトランザクションのようにマークされ、システム全体に送信されます。トークンを使用して以下の値を計算できます。

  • パブリッシャーでコミットされるトランザクションと、ディストリビューターでディストリビューション データベース内に挿入される対応するコマンドの間での経過時間。

  • ディストリビューション データベース内に挿入されるコマンドと、サブスクライバーでコミットされる対応するトランザクションの間での経過時間。

これらの計算結果から、以下のようなさまざまな内容を特定できます。

  • 変更内容をパブリッシャーから受信するのに最も時間がかかるのはどのサブスクライバーか。

  • トレーサー トークンを受信予定のサブスクライバーの中で、まだ受信していないものはどれか。

このトピックの内容

  • 作業を開始する準備:

    制限事項と制約事項

  • 接続の待機時間を計測して検証するために使用するもの:

    SQL Server レプリケーション モニター

    Transact-SQL

    レプリケーション管理オブジェクト

作業を開始する準備

制限事項と制約事項

トレーサー トークンは、システムを停止する場合にも役立ちます。このとき、すべての処理を停止して、すべてのノードがすべての未処理の変更を受信したかどうかを検証します。 詳細については、「レプリケーション トポロジの停止 (レプリケーション Transact-SQL プログラミング)」を参照してください。

トレーサー トークンを使用するには、特定のバージョンの Microsoft SQL Server を使用する必要があります。

  • ディストリビューターは Microsoft SQL Server 2005 以降である必要があります。

  • パブリッシャーは SQL Server 2005 以降であるか、Oracle パブリッシャーである必要があります。

  • プッシュ サブスクリプションでは、サブスクライバーが Microsoft SQL Server 7.0 以降である場合に、トレーサー トークン統計がパブリッシャー、ディストリビューター、およびサブスクライバーから収集されます。

  • プル サブスクリプションでは、サブスクライバーが SQL Server 2005 以降である場合にのみ、トレーサー トークン統計がサブスクライバーから収集されます。 サブスクライバーが SQL Server 7.0 または Microsoft SQL Server 2000 である場合は、統計はパブリッシャーおよびディストリビューターからのみ収集されます。

その他にも、次のような問題点と制限事項について注意する必要があります。

  • トレーサー トークンを受信するには、サブスクリプションをアクティブにする必要があります。 サブスクリプションは、初期化されている場合はアクティブです。

  • 再初期化を行うと、関連するサブスクリプションに対する保留中のトレーサー トークンがすべて削除されます。

  • サブスクライバーは、初期同期の完了後に作成されたトレーサー トークンのみを受信します。

  • レーサ トークンは、再パブリッシュ サブスクライバーからは転送されません。

  • セカンダリにフェールオーバーした後、レプリケーション モニターは SQL Server のパブリッシング インスタンスの名前を調整できません。引き続き、SQL Server の元のプライマリ インスタンスの名前を使ってレプリケーション情報を表示します。 フェールオーバー後は、トレーサー トークンはレプリケーション モニターを使用して入力できませんが、新しいパブリッシャーで Transact-SQL を使用して入力されたトレース トークンがレプリケーション モニターに表示されます。

[トップに戻る] リンクで使用される矢印アイコン[Top]

SQL Server レプリケーション モニターの使用

レプリケーション モニターの起動の詳細については、「レプリケーション モニターの開始」を参照してください。

トレーサー トークンを挿入してトークンの情報を表示するには

  1. 左ペインでパブリッシャー グループを展開し、パブリッシャーを展開して、パブリケーションをクリックします。

  2. [トレーサー トークン] タブをクリックします。

  3. [トレーサーの挿入] をクリックします。

  4. [パブリッシャーからディストリビューターまで] 列、[ディストリビューターからサブスクライバーまで] 列、および [合計待機時間] 列で、トレーサー トークンの経過時間を表示します。 [保留中] の値は、トークンが特定のポイントに到達していないことを示します。

以前に挿入したトレーサー トークンの情報を表示するには

  1. 左ペインでパブリッシャー グループを展開し、パブリッシャーを展開して、パブリケーションをクリックします。

  2. [トレーサー トークン] タブをクリックします。

  3. [挿入された時間] ボックスで時間を選択します。

  4. [パブリッシャーからディストリビューターまで] 列、[ディストリビューターからサブスクライバーまで] 列、および [合計待機時間] 列で、トレーサー トークンの経過時間を表示します。 [保留中] の値は、トークンが特定のポイントに到達していないことを示します。

    注意

    トレーサー トークンの情報は、他の履歴データと同じ時間間隔だけ保持されます。この時間間隔は、ディストリビューション データベースの履歴の保有期間によって制御されます。 ディストリビューション データベースのプロパティの変更については、「ディストリビューターとパブリッシャーのプロパティの表示および変更」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン[Top]

Transact-SQL の使用

トレーサー トークンをトランザクション パブリケーションに通知するには

  1. (省略可) パブリッシャー側のパブリケーション データベースに対して、sp_helppublication (Transact-SQL) を実行します。 パブリケーションが存在すること、および状態がアクティブであることを確認します。

  2. (省略可) パブリッシャー側のパブリケーション データベースに対して、sp_helpsubscription (Transact-SQL) を実行します。 サブスクリプションが存在すること、および状態がアクティブであることを確認します。

  3. パブリッシャーのパブリケーション データベースで、@publication を指定して sp_posttracertoken (Transact-SQL) を実行します。 @tracer_token_id 出力パラメーターの値を確認します。

待機時間を決定し、トランザクション パブリケーションの接続を確認するには

  1. 上述の手順を使用して、トレーサー トークンをパブリケーションに通知します。

  2. パブリッシャーのパブリケーション データベースで、@publication を指定して sp_helptracertokens (Transact-SQL) を実行します。 パブリケーションに通知されたすべてのトレーサー トークンのリストが返されます。 結果セットの目的の tracer_id を確認します。

  3. パブリッシャーのパブリケーション データベースで、@publication を指定し、@tracer_id に手順 2. のトレーサー トークン ID を指定して、sp_helptracertokenhistory (Transact-SQL) を実行します。 選択したトレーサー トークンの待機情報が返されます。

トレーサー トークンを削除するには

  1. パブリッシャーのパブリケーション データベースで、@publication を指定して sp_helptracertokens (Transact-SQL) を実行します。 パブリケーションに通知されたすべてのトレーサー トークンのリストが返されます。 結果セットの削除するトレーサー トークンの tracer_id を確認します。

  2. パブリッシャーのパブリケーション データベースで、@publication を指定し、@tracer_id に手順 2. の削除するトレーサー トークン ID を指定して、sp_deletetracertokenhistory (Transact-SQL) を実行します。

例 (Transact-SQL)

次の例では、トレーサー トークン レコードを通知し、返された通知済みトレーサー トークンの ID を使用して待機時間情報を表示します。

DECLARE @publication AS sysname;
DECLARE @tokenID AS int;
SET @publication = N'AdvWorksProductTran'; 

USE [AdventureWorks2012]

-- Insert a new tracer token in the publication database.
EXEC sys.sp_posttracertoken 
  @publication = @publication,
  @tracer_token_id = @tokenID OUTPUT;
SELECT 'The ID of the new tracer token is ''' + 
    CONVERT(varchar,@tokenID) + '''.'
GO

-- Wait 10 seconds for the token to make it to the Subscriber.
WAITFOR DELAY '00:00:10';
GO

-- Get latency information for the last inserted token.
DECLARE @publication AS sysname;
DECLARE @tokenID AS int;
SET @publication = N'AdvWorksProductTran'; 

CREATE TABLE #tokens (tracer_id int, publisher_commit datetime)

-- Return tracer token information to a temp table.
INSERT #tokens (tracer_id, publisher_commit)
EXEC sys.sp_helptracertokens @publication = @publication;
SET @tokenID = (SELECT TOP 1 tracer_id FROM #tokens
ORDER BY publisher_commit DESC)
DROP TABLE #tokens

-- Get history for the tracer token.
EXEC sys.sp_helptracertokenhistory 
  @publication = @publication, 
  @tracer_id = @tokenID;
GO

[トップに戻る] リンクで使用される矢印アイコン[Top]

レプリケーション管理オブジェクト (RMO) の使用

トレーサー トークンをトランザクション パブリケーションに通知するには

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。

  2. TransPublication クラスのインスタンスを作成します。

  3. パブリケーションの Name プロパティおよび DatabaseName プロパティを設定し、ConnectionContext プロパティに手順 1. で作成した接続を設定します。

  4. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが false を返す場合、手順 3. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。

  5. PostTracerToken メソッドを呼び出します。 このメソッドは、トレーサー トークンをパブリケーションのトランザクション ログに挿入します。

待機時間を決定し、トランザクション パブリケーションの接続を確認するには

  1. ServerConnection クラスを使用して、ディストリビューターへの接続を作成します。

  2. PublicationMonitor クラスのインスタンスを作成します。

  3. NameDistributionDBNamePublisherName、および PublicationDBName の各プロパティを設定し、ConnectionContext プロパティに手順 1. で作成した接続を設定します。

  4. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが false を返す場合は、手順 3. のパブリケーション モニター プロパティが正しく定義されていないか、またはパブリケーションが存在していません。

  5. EnumTracerTokens メソッドを呼び出します。 返された ArrayList オブジェクトを TracerToken オブジェクトの配列にキャストします。

  6. EnumTracerTokenHistory メソッドを呼び出します。 手順 5. のトレーサー トークンに TracerTokenID の値を渡します。 これにより、DataSet オブジェクトとして選択したトレーサー トークンの待機時間情報が返されます。 すべてのトレーサー トークン情報が返された場合、パブリッシャーとディストリビューターとの接続、およびディストリビューターとサブスクライバーの接続が両方とも存在し、レプリケーション トポロジは機能しています。

トレーサー トークンを削除するには

  1. ServerConnection クラスを使用して、ディストリビューターへの接続を作成します。

  2. PublicationMonitor クラスのインスタンスを作成します。

  3. NameDistributionDBNamePublisherName、および PublicationDBName の各プロパティを設定し、ConnectionContext プロパティに手順 1. で作成した接続を設定します。

  4. LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが false を返す場合は、手順 3. のパブリケーション モニター プロパティが正しく定義されていないか、またはパブリケーションが存在していません。

  5. EnumTracerTokens メソッドを呼び出します。 返された ArrayList オブジェクトを TracerToken オブジェクトの配列にキャストします。

  6. CleanUpTracerTokenHistory メソッドを呼び出します。 次の値のいずれかを渡します。

    • 手順 5. のトレーサー トークンの TracerTokenID。 これにより、選択したトークンの情報が削除されます。

    • DateTime オブジェクト。 これにより、指定した日時より古いすべてのトークンの情報が削除されます。

[トップに戻る] リンクで使用される矢印アイコン[Top]