트랜잭션 복제에 대한 대기 시간 측정 및 연결 유효성 검사
이 항목에서는 복제 모니터, Transact-SQL 또는 RMO(복제 관리 개체)를 사용하여 SQL Server 2012에서 트랜잭션 복제에 대한 대기 시간을 측정하고 연결의 유효성을 검사하는 방법에 대해 설명합니다. 트랜잭션 복제는 트랜잭션 복제 토폴로지에서 대기 시간을 측정하고 게시자, 배포자 및 구독자 간 연결의 유효성을 검사하는 편리한 방법을 제공하는 추적 프로그램 토큰 기능을 제공합니다. 토큰(적은 양의 데이터)은 게시 데이터베이스의 트랜잭션 로그에 기록되고, 일반적인 복제된 트랜잭션인 것처럼 표시되고, 시스템을 통해 전달되며 다음을 계산할 수 있습니다.
게시자에서 커밋된 트랜잭션과 배포자의 배포 데이터베이스에서 삽입된 해당 명령 사이의 경과 시간
배포 데이터베이스에 삽입된 명령과 구독자에서 커밋된 해당 트랜잭션 사이의 경과 시간
이러한 계산을 잘 검토하면 다음을 비롯한 여러 가지 질문에 대답할 수 있습니다.
게시자의 변경 내용을 받는 데 가장 오래 걸리는 구독자는 무엇입니까?
추적 프로그램 토큰을 받아야 할 구독자가 있습니까? 있다면 아직 추적 프로그램 토큰을 받지 못한 구독자는 무엇입니까?
항목 내용
시작하기 전 주의 사항
제한 사항
대기 시간을 측정하고 연결의 유효성을 검사하려면:
SQL Server 복제 모니터
Transact-SQL
RMO(복제 관리 개체)
시작하기 전 주의 사항
제한 사항
또한 추적 프로그램 토큰은 모든 작업을 중지하고 모든 노드가 처리 중인 변경 내용을 모두 받았는지 확인하므로 시스템을 중지시킬 때 유용할 수 있습니다. 자세한 내용은 복제 토폴로지 정지(복제 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의 보조 인스턴스에 대한 장애 조치(failover) 후에 복제 모니터는 SQL Server의 게시 인스턴스 이름을 조정할 수 없으며 계속해서 원래 주 인스턴스 이름으로 복제 정보를 표시합니다. 장애 조치(failover) 후 복제 모니터를 사용하여 추적 프로그램 토큰을 입력할 수 없지만 새 게시자가 Transact-SQL을 사용하여 입력한 추적 프로그램 토큰은 복제 모니터에 표시됩니다.
[Top]
SQL Server 복제 모니터 사용
복제 모니터를 시작하는 방법은 복제 모니터 시작을 참조하십시오.
추적 프로그램 토큰을 삽입하고 이 토큰에 대한 정보를 보려면
왼쪽 창에서 게시자 그룹을 확장하고 해당 게시자를 확장한 다음 해당 게시를 클릭합니다.
추적 프로그램 토큰 탭을 클릭합니다.
추적 프로그램 삽입을 클릭합니다.
게시자에서 배포자로 연결 시 대기 시간, 배포자에서 구독자로 연결 시 대기 시간 및 총 대기 시간 열에서 추적 프로그램 토큰에 대한 경과 시간을 확인합니다. 값 보류 중은 토큰이 지정된 지점에 아직 도달하지 않았음을 나타냅니다.
이전에 삽입한 추적 프로그램 토큰에 대한 정보를 보려면
왼쪽 창에서 게시자 그룹을 확장하고 해당 게시자를 확장한 다음 해당 게시를 클릭합니다.
추적 프로그램 토큰 탭을 클릭합니다.
삽입된 시간 드롭다운 목록에서 시간을 선택합니다.
게시자에서 배포자로 연결 시 대기 시간, 배포자에서 구독자로 연결 시 대기 시간 및 총 대기 시간 열에서 추적 프로그램 토큰에 대한 경과 시간을 확인합니다. 값 보류 중은 토큰이 지정된 지점에 아직 도달하지 않았음을 나타냅니다.
[!참고]
추적 프로그램 토큰 정보는 배포 데이터베이스의 기록 보존 기간에 의해 제어되는 다른 기록 데이터와 같은 시간 동안 유지됩니다. 배포 데이터베이스 속성을 변경하는 방법은 게시자 및 배포자 속성 보기 및 수정을 참조하십시오.
[Top]
Transact-SQL 사용
트랜잭션 게시에 추적 프로그램 토큰을 게시하려면
(옵션) 게시 데이터베이스의 게시자에서 sp_helppublication(Transact-SQL)을 실행합니다. 해당 게시가 있는지 그리고 상태가 활성 상태인지 확인합니다.
(옵션) 게시 데이터베이스의 게시자에서 sp_helpsubscription(Transact-SQL)을 실행합니다. 해당 구독이 있는지 그리고 상태가 활성 상태인지 확인합니다.
게시 데이터베이스의 게시자에서 sp_posttracertoken(Transact-SQL)을 실행하고 @publication을 지정합니다. @tracer_token_id 출력 매개 변수의 값을 확인합니다.
트랜잭션 복제에 대한 대기 시간을 확인하고 연결 유효성을 검사하려면
이전 절차를 따라 게시에 추적 프로그램 토큰을 게시합니다.
게시 데이터베이스의 게시자에서 sp_helptracertokens(Transact-SQL)를 실행하고 @publication을 지정합니다. 그러면 해당 게시에 게시된 모든 추적 프로그램 토큰의 목록이 반환됩니다. 결과 집합에서 원하는 tracer_id를 확인합니다.
게시 데이터베이스의 게시자에서 sp_helptracertokenhistory(Transact-SQL)를 실행하고 @publication을 지정하고 @tracer_id에 대해 2단계에서 얻은 추적 프로그램 토큰 ID를 지정합니다. 그러면 선택한 추적 프로그램 토큰에 대한 대기 시간 정보가 반환됩니다.
추적 프로그램 토큰을 제거하려면
게시 데이터베이스의 게시자에서 sp_helptracertokens(Transact-SQL)를 실행하고 @publication을 지정합니다. 그러면 해당 게시에 게시된 모든 추적 프로그램 토큰의 목록이 반환됩니다. 결과 집합에서 삭제할 추적 프로그램 토큰의 tracer_id를 확인합니다.
게시 데이터베이스의 게시자에서 @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(복제 관리 개체) 사용
트랜잭션 게시에 추적 프로그램 토큰을 게시하려면
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 개체를 전달합니다. 그러면 지정한 날짜보다 오래된 모든 토큰에 대한 정보가 삭제됩니다.
[Top]