이 항목에서는 복제 모니터, 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 복제 모니터 사용
복제 모니터를 시작하는 방법에 대한 자세한 내용은 복제 모니터 시작을 참조하세요.
추적 프로그램 토큰을 삽입하고 토큰에 대한 정보를 보려면
왼쪽 창에서 게시자 그룹을 확장하고 게시자를 확장한 다음 발행물을 클릭합니다.
추적 프로그램 토큰 탭을 클릭합니다.
추적 프로그램 삽입을 클릭합니다.
다음 열에서 추적 토큰의 경과 시간을 확인합니다: 게시자에서 배포자로, 배포자에서 구독자로, 총 대기 시간. 보류 중인 값은 토큰이 지정된 지점에 도달하지 않음을 나타냅니다.
이전에 삽입한 추적 프로그램 토큰에 대한 정보를 보려면
왼쪽 창에서 게시자 그룹을 확장하고 게시자를 확장한 다음 발행물을 클릭합니다.
추적 프로그램 토큰 탭을 클릭합니다.
시간 삽입 드롭다운 목록에서 시간을 선택합니다.
다음 열에서 추적 토큰의 경과 시간을 확인합니다: 게시자에서 배포자로, 배포자에서 구독자로, 총 대기 시간. 보류 중인 값은 토큰이 지정된 지점에 도달하지 않음을 나타냅니다.
비고
추적 프로그램 토큰 정보는 배포 데이터베이스의 기록 보존 기간에 따라 제어되는 다른 기록 데이터와 동일한 기간 동안 보존됩니다. 배포 데이터베이스 속성 변경에 대한 자세한 내용은 배포자 및 게시자 속성 보기 및 수정을 참조하세요.
Transact-SQL 사용
트랜잭션 게시에 추적 토큰을 전송하려면
(선택 사항) 게시 데이터베이스의 게시자에서 sp_helppublication(Transact-SQL)를 실행합니다. 게시가 있고 상태가 활성 상태인지 확인합니다.
(선택 사항) 게시 데이터베이스의 게시자에서 sp_helpsubscription(Transact-SQL)를 실행합니다. 구독이 있고 상태가 활성 상태인지 확인합니다.
게시자 출판 데이터베이스에서 @publication을 지정하여 sp_posttracertoken(Transact-SQL)을 실행합니다. @tracer_token_id 출력 매개 변수의 값을 확인합니다.
트랜잭션 게시에 대한 대기 시간을 확인하고 연결의 유효성을 검사하려면
이전 절차를 사용하여 게시에 추적 토큰을 전송합니다.
게시 데이터베이스의 게시자에서 @publication 지정하여sp_helptracertokens(Transact-SQL)를 실행합니다. 게시에 등록된 모든 추적 토큰 목록을 반환합니다. 결과 집합에서 원하는 tracer_id 확인합니다.
게시 데이터베이스의 게시자에서 sp_helptracertokenhistory(Transact-SQL)를 실행하고, @publication과 2단계에서 얻은 추적 토큰 ID를 @tracer_id로 지정합니다. 그러면 선택한 추적 프로그램 토큰에 대한 대기 시간 정보가 반환됩니다.
추적 프로그램 토큰을 제거하려면
게시 데이터베이스의 게시자에서 @publication 지정하여sp_helptracertokens(Transact-SQL)를 실행합니다. 게시물에 게시된 모든 추적 토큰 목록을 반환합니다. 결과 집합에서 추적 프로그램 토큰을 삭제할 tracer_id를 기록해 두십시오.
게시 데이터베이스의 게시자에서 sp_deletetracertokenhistory(Transact-SQL)를 실행하여 @publication과 2단계에서 삭제할 추적자의 @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 속성을 설정하고 1단계에서 만든 연결로 속성을 설정합니다 ConnectionContext .
메서드를 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 개체입니다. 이렇게 하면 지정된 날짜 및 시간보다 오래된 모든 토큰에 대한 정보가 삭제됩니다.