SQL Server 2005 이후 버전에서는 트랜잭션 복제 운영중에 구독자로의 동기화가 지연될 경우 복제 모니터에서
[추적 프로그램 토큰] (Tracer Token)을 이용해 어떤 구간에 병목이 있는지 확인할 수 있습니다.
사용방법 :
1. 복제 모니터 시작

2. [추적 프로그램 토큰]에서 [추적 프로그램 삽입] Click

위 화면에서 [추적 프로그램 삽입]을 Click하면 내부적으로 게시자에 Timestamp Transaction이 처리됩니다.
해당 트랜잭션은 LogReader Agent에 의해 배포 데이터베이스로 복사되고 이는 다시 Distribution Agent에
의해 구독자에 전달됩니다. 각 단계에 대한 commit 시간을 기록해 어떤 구간에서 지연이 발생하는지
체크하게 되는 것입니다.
[게시자에서 배포자로 연결]
LogReader Agent에 오류가 있거나 병목이 있는지 체크하게 됩니다.
[배포자에서 구독자로 연결]
Distribution Agent에 오류가 있거나 병목이 있는지 체크하게 됩니다.
또는 구독자 서버에 병목이 있는지도 체크할 필요가 있습니다.
시나리오 :
1. LogReader (로그 판독기) Agent가 중지(실패)된 경우
LogReader Agent가 실패한 상황을 가정하기 위해 해당 서비스를 중지한 상태에서 Tracer Token을 추가하면
보류 중... 상태로 나옵니다. 이는 LogReader Agent에서 게시자의 Timestamp Transaction을 읽지 못하기
떄문에 배포자 및 구독자로 반영이 안되기 떄문입니다.

LogReader Agent가 다시 시작됐을 때 [게시자에서 배포자로 연결]에서 지연이 발생함을 확인할 수 있습니다.

2. Distribution Agent 가 중지된 경우
이번에는 특정 구독자로의 배포 에이전트(Distribution Agent)를 중지한 후 Tracer Token을 추가해 보았습니다.

두개의 구독자에 대해 한쪽 구독자 서버에 대한 배포 에이전트가 중지된 시나리오이며 이에 구독자A의 경우
병목이 없으나 구독자B의 경우 [배포자에서 구독자로 연결]이 보류중 상태임을 확인할 수 있습니다.
이경우 해당 구독자로의 배포 에이전트가 정상인지 체크해 볼 필요가 있으며 또한 구독자B서버에 문제가
없는지 역시 체크해야 될 것입니다.
기타 :
Tracer Token 은 위와 같이 복제 모니터에서 추가할 수 있고 또한 다음의 T-SQL문으로도 추가가 가능합니다.
use replpub -- 게시 데이터베이스
go
EXEC sys.sp_posttracertoken @publication = 'replpub' -- 게시 이름
추가된 Tracer Token 은 다음의 테이블에 저장됩니다.
USE Distribution
go
SELECT * FROM MStracer_tokens
SELECT * FROM MStracer_history
즉, 주기적으로 Tracer Token을 추가(가령, 매 5분마다 추가)해 다음의 쿼리를 수행해 어느 시점에 병목이 있는지
모니터링하실 수 있습니다.
SELECT publication_id, agent_id, t.publisher_commit,
Datediff(s,t.publisher_commit,t.distributor_commit) as 'Time To Dist (sec)',
Datediff(s,t.distributor_commit,h.subscriber_commit) as 'Time To Sub (sec)'
FROM MStracer_tokens t
JOIN MStracer_history h
ON t.tracer_id = h.parent_tracer_id












최근 덧글