다음을 통해 공유


트랜잭션 복제에 대한 대기 시간 측정 및 연결 유효성 검사

적용 대상: SQL Server Azure SQL Managed Instance

이 항목에서는 복제 모니터, Transact-SQL 또는 RMO(복제 관리 개체)를 사용하여 SQL Server에서 트랜잭션 복제에 대한 대기 시간을 측정하고 연결의 유효성을 검사하는 방법을 설명합니다. 트랜잭션 복구를 통해 추적자 토큰 기능을 사용하여 편리하게 트랜잭션 복제 토폴로지의 대기 시간을 측정하고 게시자, 배포자 및 구독자 간의 연결을 유효성 검사할 수 있습니다. 토큰(소량의 데이터)은 게시 데이터베이스의 트랜잭션 로그에 기록되며, 일반적인 복제 트랜잭션인 것처럼 표시되고 시스템을 통해 전송되므로 다음을 계산할 수 있습니다.

  • 게시자에서 커밋된 트랜잭션과 배포자의 배포 데이터베이스에서 삽입된 해당 명령 사이의 경과 시간.

  • 배포 데이터베이스에 삽입된 명령과 구독자에서 커밋된 해당 트랜잭션 사이의 경과 시간.

이러한 계산을 잘 검토하면 다음을 비롯한 여러 가지 질문에 대답할 수 있습니다.

  • 게시자의 변경 내용을 받는 데 가장 오래 걸리는 구독자는 무엇입니까?

  • 추적 프로그램 토큰을 받아야 할 구독자가 있습니까? 있다면 아직 추적 프로그램 토큰을 받지 못한 구독자는 무엇입니까?

항목 내용

시작하기 전에

제한 사항

추적 프로그램 토큰은 모든 작업을 중지하고 모든 노드가 모든 미해결 변경 내용을 수신했는지 확인하는 시스템을 정지할 때 유용할 수 있습니다. 자세한 내용은 복제 토폴로지 정지(복제 Transact-SQL 프로그래밍)를 참조하세요.

추적 프로그램 토큰을 사용하려면 특정 버전의 Microsoft SQL Server를 사용해야 합니다.

  • 배포자는 Microsoft SQL Server 2005(9.x) 이상이어야 합니다.

  • 게시자는 SQL Server 2005(9.x) 이상이거나 Oracle 게시자여야 합니다.

  • 밀어넣기 구독의 경우 구독자가 Microsoft SQL Server 7.0 이상인 경우 게시자, 배포자 및 구독자로부터 추적 프로그램 토큰 통계가 수집됩니다.

  • 끌어오기 구독의 경우 구독자가 SQL Server 2005(9.x) 이상인 경우에만 구독자로부터 추적 프로그램 토큰 통계가 수집됩니다. 구독자가 SQL Server 7.0 또는 Microsoft SQL Server 2000(8.x)인 경우 통계는 게시자 및 배포자에서만 수집됩니다.

또한 다음과 같이 주의해야 할 다른 문제 및 제한 사항이 많이 있습니다.

  • 추적 프로그램 토큰을 수신하려면 구독이 활성 상태여야 합니다. 구독이 초기화된 경우 활성 상태입니다.

  • 다시 초기화하면 관련 구독에 대한 보류 중인 추적 프로그램 토큰이 제거됩니다.

  • 구독자는 초기 동기화 후에 만든 추적 프로그램 토큰만 수신합니다.

  • 추적 프로그램 토큰은 구독자를 재게시하여 전달되지 않습니다.

  • SQL Server 의 보조 복제본에 대한 장애 조치(Failover) 후에 복제 모니터는 SQL Server의 게시 인스턴스 이름을 조정할 수 없으며 계속해서 원래 주 인스턴스 이름으로 복제 정보를 표시합니다. 장애 조치 후 복제 모니터를 사용하여 추적 프로그램 토큰을 입력할 수 없지만 새 게시자가 Transact-SQL을 사용하여 입력한 추적 프로그램 토큰은 복제 모니터에 표시됩니다.

SQL Server 복제 모니터 사용

복제 모니터를 시작하는 방법은 복제 모니터 시작을 참조하세요.

추적 프로그램 토큰을 삽입하고 이 토큰에 대한 정보를 보려면

  1. 왼쪽 창에서 게시자 그룹을 확장하고 게시자를 확장한 다음, 게시를 클릭합니다.

  2. 추적 프로그램 토큰 탭을 클릭합니다.

  3. 추적 프로그램 삽입을 클릭합니다.

  4. 게시자에서 배포자로 연결 시 대기 시간, 배포자에서 구독자로 연결 시 대기 시간, 총 대기 시간열에서 추적 프로그램 토큰에 대한 경과 시간을 확인합니다. 보류 중 값은 토큰이 제시된 지점에 도달하지 않았음을 나타냅니다.

이전에 삽입한 추적 프로그램 토큰에 대한 정보를 보려면

  1. 왼쪽 창에서 게시자 그룹을 확장하고 게시자를 확장한 다음, 게시를 클릭합니다.

  2. 추적 프로그램 토큰 탭을 클릭합니다.

  3. 시간이 삽입된 드롭다운 목록에서 시간을 선택합니다.

  4. 게시자에서 배포자로 연결 시 대기 시간, 배포자에서 구독자로 연결 시 대기 시간, 총 대기 시간열에서 추적 프로그램 토큰에 대한 경과 시간을 확인합니다. 보류 중 값은 토큰이 제시된 지점에 도달하지 않았음을 나타냅니다.

    참고 항목

    추적 프로그램 토큰 정보는 배포 데이터베이스의 기록 보존 기간에 의해 제어되는 다른 기록 데이터와 같은 시간 동안 유지됩니다. 배포 데이터베이스 속성 변경에 대한 자세한 내용은 배포자 및 게시자 속성 보기 및 수정을 참조하세요.

Transact-SQL 사용

트랜잭션 게시에 추적 프로그램 토큰을 게시하려면

  1. (선택 사항) 게시 데이터베이스의 게시자에서 sp_helppublication (Transact-SQL)을 실행합니다. 게시가 있고 상태가 활성 상태인지 확인합니다.

  2. (선택 사항) 게시 데이터베이스의 게시자에서 sp_helpsubscription (Transact-SQL)을 실행합니다. 구독이 있고 상태가 활성 상태인지 확인합니다.

  3. 게시 데이터베이스의 게시자에서 sp_posttracertoken (Transact-SQL)을 실행하여 @publication을 지정합니다. @tracer_token_id 출력 매개 변수의 값을 확인합니다.

트랜잭션 게시에 대한 대기 시간을 확인하고 연결의 유효성을 검사하려면

  1. 이전 절차를 사용하여 게시에 추적 프로그램 토큰을 게시합니다.

  2. 게시 데이터베이스의 게시자에서 @publication을 지정하고 sp_helptracertokens(Transact-SQL)을 실행합니다. 게시에 게시된 모든 추적 프로그램 토큰 목록을 반환합니다. 결과 집합에서 원하는 tracer_id를 확인합니다.

  3. 게시 데이터베이스의 게시자에서 sp_helptracertokenhistory (Transact-SQL)을 실행하여 @publication을 지정하고 @tracer_id에 대해 2단계에서 얻은 추적 프로그램 토큰 ID를 지정합니다. 그러면 선택한 추적 프로그램 토큰에 대한 대기 시간 정보가 반환됩니다.

추적 프로그램 토큰을 제거하려면

  1. 게시 데이터베이스의 게시자에서 @publication을 지정하고 sp_helptracertokens(Transact-SQL)을 실행합니다. 게시에 게시된 모든 추적 프로그램 토큰 목록을 반환합니다. 결과 집합에서 삭제할 추적 프로그램 토큰의 tracer_id를 확인합니다.

  2. 게시 데이터베이스의 게시자에서 sp_deletetracertokenhistory(Transact-SQL)를 실행하여 @tracer_id에 대한 2단계에서 삭제할 추적자의 @publication 및 ID를 지정합니다.

예(Transact-SQL)

이 예제에서는 추적 프로그램 토큰 레코드를 게시하고 게시된 추적 프로그램 토큰의 반환된 ID를 사용하여 대기 시간 정보를 봅니다.

DECLARE @publication AS sysname;
DECLARE @tokenID AS int;
SET @publication = N'AdvWorksProductTran'; 

USE [AdventureWorks2022]

-- 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(복제 관리 개체) 사용

트랜잭션 게시에 추적 프로그램 토큰을 게시하려면

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.

  2. TransPublication 클래스의 인스턴스를 만듭니다.

  3. 게시에 NameDatabaseName 속성을 설정하고 ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.

  4. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다. 이 메서드가 false를 반환하는 경우 3단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 없습니다.

  5. PostTracerToken 메서드를 호출합니다. 이 메서드는 게시의 트랜잭션 로그에 추적 프로그램 토큰을 삽입합니다.

트랜잭션 게시에 대한 대기 시간을 확인하고 연결의 유효성을 검사하려면

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.

  2. PublicationMonitor 클래스의 인스턴스를 만듭니다.

  3. 게시의 Name, DistributionDBName, PublisherNamePublicationDBName 속성을 설정하고 ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.

  4. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다. 이 메서드가 false를 반환하는 경우 3단계에서 게시 모니터 속성이 올바르게 정의되지 않았거나 게시가 없습니다.

  5. EnumTracerTokens 메서드를 호출합니다. 반환된 ArrayList 개체를 TracerToken 개체의 배열에 캐스팅합니다.

  6. EnumTracerTokenHistory 메서드를 호출합니다. 5단계에서 추적 프로그램 토큰의 TracerTokenId 값을 전달합니다. 그러면 DataSet 개체로 선택한 추적 프로그램 토큰에 대한 대기 시간 정보가 반환됩니다. 모든 추적 프로그램 토큰 정보가 반환되면 게시자와 배포자 간의 연결과 배포자와 구독자 간의 연결이 모두 존재하며 복제 토폴로지가 작동합니다.

추적 프로그램 토큰을 제거하려면

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.

  2. PublicationMonitor 클래스의 인스턴스를 만듭니다.

  3. 게시의 Name, DistributionDBName, PublisherNamePublicationDBName 속성을 설정하고 ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.

  4. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다. 이 메서드가 false를 반환하는 경우 3단계에서 게시 모니터 속성이 올바르게 정의되지 않았거나 게시가 없습니다.

  5. EnumTracerTokens 메서드를 호출합니다. 반환된 ArrayList 개체를 TracerToken 개체의 배열에 캐스팅합니다.

  6. CleanUpTracerTokenHistory 메서드를 호출합니다. 다음 값 중 하나입니다.

    • 5단계의 추적 프로그램 토큰에 대한 TracerTokenId입니다. 그러면 선택한 토큰에 대한 정보가 삭제됩니다.

    • DateTime 개체입니다. 이렇게 하면 지정된 날짜 및 시간보다 오래된 모든 토큰에 대한 정보가 삭제됩니다.