はじめに
今回、仕事でこの件について調べたので、備考録として書きたいと思います。
SQLレプリケーションを行った時に、一番気になるのは、その同期スピードではないでしょうか?
一応、レプリケーションモニターから概要は見れますが、いまいち良くわからないですよね。
その場合、今回紹介する「トレーサートークン」機能が有用です。
マイクロソフトのページでは、以下に詳細が載せられています。
ページを見てもらったら分かるように、仕組みはいたって単純で、トークンと呼ばれる印をつけたデータがどのようにディストリビュータに渡り、サブスクライバーの渡るかを計測できます。
トレーサートークンの作り方
この操作はレプリケーションモニターからも出来ます。
ジョブなどで定期的に作成したい場合は、以下のように作ってあげると良いと思います。
DECLARE @tokenID AS INT EXEC sp_posttracertoken @publication = 'PubFirst' , @tracer_token_id = @tokenID OUTPUT SELECT @tokenID AS [TokenID]
※このスクリプトは、バプリケーション側で動かしてください。
トレーサートークンの削除
レプリケーションモニターには、なぜかこの機能がありません。
テスト後に綺麗に全部削除したい場合は、以下のようなスクリプトで削除する必要がありますね。
DECLARE @publication AS sysname; SET @publication = N'DummyDB'; CREATE TABLE #tokens (tracer_id int, publisher_commit datetime); INSERT #tokens (tracer_id, publisher_commit) EXEC sys.sp_helptracertokens @publication; select * from #tokens declare @w_tracer_id int declare @w_publisher_commit datetime declare cur_tokens cursor for select tracer_id, publisher_commit from #tokens open cur_tokens; fetch next from cur_tokens into @w_tracer_id,@w_publisher_commit; while @@FETCH_STATUS = 0 begin exec sp_deletetracertokenhistory @publication , @w_tracer_id fetch next from cur_tokens into @w_tracer_id,@w_publisher_commit; end close cur_tokens; DEALLOCATE cur_tokens; --result EXEC sys.sp_helptracertokens @publication; drop table #tokens
※このスクリプトは、バプリケーション側で動かしてください。
※@publicationには、パブリケーション名を入れてください。
全トレーサートークンの遅延時間を出力
レプリケーションモニターでは1件ずつは見ることが出来ます。
一覧で見たいときは、めんどくさいですが、下記のようなスクリプトで出力してあげる必要があります。
DECLARE @publication AS sysname; SET @publication = N'DummyDB'; CREATE TABLE #tokens (tracer_id int, publisher_commit datetime); CREATE TABLE #tokenshistory (distributor_latency bigint,subscriber sysname,subscriber_db sysname,subscriber_latency bigint,overall_latency bigint); CREATE TABLE #tokensresult (subscriber sysname,subscriber_db sysname,publisher_commit datetime,distributor_latency bigint,subscriber_latency bigint,overall_latency bigint); INSERT #tokens (tracer_id, publisher_commit) EXEC sys.sp_helptracertokens @publication; select * from #tokens declare @w_tracer_id int declare @w_publisher_commit datetime declare cur_tokens cursor for select tracer_id, publisher_commit from #tokens open cur_tokens; fetch next from cur_tokens into @w_tracer_id,@w_publisher_commit; while @@FETCH_STATUS = 0 begin INSERT #tokenshistory (distributor_latency,subscriber,subscriber_db,subscriber_latency,overall_latency) EXEC sys.sp_helptracertokenhistory @publication,@w_tracer_id insert #tokensresult select top 1 subscriber,subscriber_db,@w_publisher_commit,distributor_latency,subscriber_latency,overall_latency from #tokenshistory truncate table #tokenshistory fetch next from cur_tokens into @w_tracer_id,@w_publisher_commit; end close cur_tokens; DEALLOCATE cur_tokens; select * from #tokensresult drop table #tokens drop table #tokenshistory drop table #tokensresult
まとめ
いかがだったでしょうか?意外にこの手の情報があまり出てなかったので、今回簡単ではありますが、まとめさせていただきました。
もしよかったら参考にしてくだされば、嬉しいです!!
コメント