このトピックでは、レプリケーション モニター、Transact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用して、SQL Server 2014 のトランザクション レプリケーションの待機時間を測定し、接続を検証する方法について説明します。 トランザクション レプリケーションにはトレーサー トークン機能が用意されており、トランザクション レプリケーション トポロジの待機時間を測定したり、パブリッシャー、ディストリビューター、サブスクライバー間の接続を検証したりするための便利な方法が提供されます。 トークン (少量のデータ) がパブリケーション データベースのトランザクション ログに書き込まれ、一般的なレプリケート されたトランザクションであるかのようにマークされ、システム経由で送信され、次の計算が可能になります。
パブリッシャーでコミットされるトランザクションと、ディストリビューターのディストリビューション データベースに挿入される対応するコマンドの間の経過時間。
ディストリビューション データベースに挿入されるコマンドと、サブスクライバーでコミットされている対応するトランザクションの間の経過時間。
これらの計算から、次のような多くの質問に回答できます。
パブリッシャーからの変更を受け取るために最も時間がかかるサブスクライバーはどれですか?
トレーサー トークンを受け取ることが予想されるサブスクライバーのうち、受け取っていないトレーサー トークンがある場合はどれですか?
このトピックについて
作業を開始する準備:
待機時間を測定し、接続を検証するには、次を使用します。
開始する前に
制限事項と制約条件
トレーサー トークンは、システムを休止する場合にも役立ちます。これには、すべてのアクティビティを停止し、すべてのノードが未処理の変更をすべて受け取ったかどうかを確認する必要があります。 詳細については、「レプリケーション トポロジの停止 (レプリケーション 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 を使用して入力されたトレース トークンがレプリケーション モニターに表示されます。
SQL Server レプリケーション モニターの使用
レプリケーション モニターの起動については、「レプリケーション モニターの起動」を参照してください。
トレーサー トークンを挿入し、トークンの情報を表示するには
左側のウィンドウでパブリッシャー グループを展開し、パブリッシャーを展開して、文書をクリックします。
[ トレーサー トークン ] タブをクリックします。
トレースの挿入をクリックします。
トレーサー トークンの経過時間を次の列に表示します。パブリッシャーからディストリビューター、ディストリビューターからサブスクライバー、合計待機時間。 Pending の値は、トークンが特定のポイントに到達しなかったことを示します。
前に挿入したトレーサー トークンに関する情報を表示するには
左側のウィンドウでパブリッシャー グループを展開し、パブリッシャーを展開して、文書をクリックします。
[ トレーサー トークン ] タブをクリックします。
[挿入時刻] ドロップダウン リストから 時刻 を選択します。
トレーサー トークンの経過時間を次の列に表示します。パブリッシャーからディストリビューター、ディストリビューターからサブスクライバー、合計待機時間。 Pending の値は、トークンが特定のポイントに到達しなかったことを示します。
注
トレーサー トークン情報は、ディストリビューション データベースの履歴保有期間によって管理される他の履歴データと同じ期間保持されます。 ディストリビューション データベースのプロパティの変更の詳細については、「 ディストリビューターとパブリッシャーのプロパティの表示と変更」を参照してください。
Transact-SQL の使用
トランザクション パブリケーションにトレーサー トークンをポストするには
(省略可能)パブリッシャー側のパブリケーション データベースで、 sp_helppublication (Transact-SQL) を実行します。 パブリケーションが存在し、状態がアクティブであることを確認します。
(省略可能)パブリッシャー側のパブリケーション データベースで、 sp_helpsubscription (Transact-SQL) を実行します。 サブスクリプションが存在し、状態がアクティブであることを確認します。
パブリケーション データベースのパブリッシャーで、@publicationを指定してsp_posttracertoken (Transact-SQL)を実行します。 @tracer_token_id出力パラメーターの値に注意してください。
トランザクション パブリケーションの待機時間を確認し、接続を検証するには
前の手順を使用して、トレーサー トークンをパブリケーションにポストします。
パブリッシャー側のパブリケーション データベースで、 sp_helptracertokens (Transact-SQL) を実行し、 @publicationを指定します。 これにより、パブリケーションにポストされたすべてのトレーサー トークンの一覧が返されます。 結果セット内の目的の tracer_id に注意してください。
パブリッシャー側のパブリケーション データベースで、sp_helptracertokenhistory (Transact-SQL) を実行し、@tracer_idの手順 2 の@publicationとトレーサー トークン ID を指定します。 これにより、選択したトレーサー トークンの待機時間情報が返されます。
トレーサー トークンを削除するには
パブリッシャー側のパブリケーション データベースで、 sp_helptracertokens (Transact-SQL) を実行し、 @publicationを指定します。 これにより、パブリケーションにポストされたすべてのトレーサー トークンの一覧が返されます。 結果セットで削除するトレーサー トークンの tracer_id に注意してください。
パブリッシャー側のパブリケーション データベースで、 sp_deletetracertokenhistory (Transact-SQL) を実行し、手順 2 で削除する @publication とトレーサーの ID を 指定して、@tracer_idします。
例 (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
レプリケーション管理オブジェクト (RMO) の使用
トランザクション パブリケーションにトレーサー トークンをポストするには
ServerConnection クラスを使用してパブリッシャーへの接続を作成します。
TransPublication クラスのインスタンスを作成します。
パブリケーションの Name プロパティと DatabaseName プロパティを設定し、 ConnectionContext プロパティを手順 1 で作成した接続に設定します。
LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが
false
を返す場合、手順 3 のパブリケーション プロパティが正しく定義されていないか、パブリケーションが存在しません。PostTracerToken メソッドを呼び出します。 このメソッドは、パブリケーションのトランザクション ログにトレーサー トークンを挿入します。
トランザクション パブリケーションの待機時間を確認し、接続を検証するには
ServerConnection クラスを使用してディストリビューターへの接続を作成します。
PublicationMonitor クラスのインスタンスを作成します。
Name、DistributionDBName、PublisherName、およびPublicationDBNameのプロパティを設定し、ConnectionContext プロパティを手順 1 で作成した接続に設定します。
LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが
false
を返す場合は、手順 3 でパブリケーション モニターのプロパティが正しく定義されていないか、パブリケーションが存在しません。EnumTracerTokens メソッドを呼び出します。 返された ArrayList オブジェクトを、 TracerToken オブジェクトの配列にキャストします。
EnumTracerTokenHistory メソッドを呼び出します。 手順 5. のトレーサー トークンに TracerTokenId の値を渡します。 これにより、選択したトレーサー トークンの待機時間情報が DataSet オブジェクトとして返されます。 すべてのトレーサー トークン情報が返された場合、パブリッシャーとディストリビューターの間の接続とディストリビューターとサブスクライバーの間の接続が存在し、レプリケーション トポロジが機能しています。
トレーサー トークンを削除するには
ServerConnection クラスを使用してディストリビューターへの接続を作成します。
PublicationMonitor クラスのインスタンスを作成します。
Name、DistributionDBName、PublisherName、およびPublicationDBNameのプロパティを設定し、ConnectionContext プロパティを手順 1 で作成した接続に設定します。
LoadProperties メソッドを呼び出して、オブジェクトのプロパティを取得します。 このメソッドが
false
を返す場合は、手順 3 でパブリケーション モニターのプロパティが正しく定義されていないか、パブリケーションが存在しません。EnumTracerTokens メソッドを呼び出します。 返された ArrayList オブジェクトを、 TracerToken オブジェクトの配列にキャストします。
CleanUpTracerTokenHistory メソッドを呼び出します。 次のいずれかの値を渡します。
手順5のトレーサー トークンの TracerTokenId。 これにより、選択したトークンの情報が削除されます。
DateTime オブジェクト。 これにより、指定した日時より古いトークンの情報がすべて削除されます。