트랜잭션 복제에 대한 대기 시간 측정 및 연결 유효성 검사Measure Latency and Validate Connections for Transactional Replication

이 항목에서는 복제 모니터, SQL Server 2017SQL Server 2017 또는 RMO(복제 관리 개체)를 사용하여 Transact-SQLTransact-SQL에서 트랜잭션 복제에 대한 대기 시간을 측정하고 연결의 유효성을 검사하는 방법에 대해 설명합니다.This topic describes how to measure latency and validate connections for transactional replication in SQL Server 2017SQL Server 2017 by using Replication Monitor, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). 트랜잭션 복제는 트랜잭션 복제 토폴로지에서 대기 시간을 측정하고 게시자, 배포자 및 구독자 간 연결의 유효성을 검사하는 편리한 방법을 제공하는 추적 프로그램 토큰 기능을 제공합니다.Transactional replication provides the tracer token feature, which provides a convenient way to measure latency in transactional replication topologies and to validate the connections between the Publisher, Distributor and Subscribers. 토큰(적은 양의 데이터)은 게시 데이터베이스의 트랜잭션 로그에 기록되고, 일반적인 복제된 트랜잭션인 것처럼 표시되고, 시스템을 통해 전달되며 다음을 계산할 수 있습니다.A token (a small amount of data) is written to the transaction log of the publication database, marked as though it were a typical replicated transaction, and sent through the system, allowing a calculation of:

  • 게시자에서 커밋된 트랜잭션과 배포자의 배포 데이터베이스에서 삽입된 해당 명령 사이의 경과 시간How much time elapses between a transaction being committed at the Publisher and the corresponding command being inserted in the distribution database at the Distributor.

  • 배포 데이터베이스에 삽입된 명령과 구독자에서 커밋된 해당 트랜잭션 사이의 경과 시간How much time elapses between a command being inserted in the distribution database and the corresponding transaction being committed at a Subscriber.

    이러한 계산을 잘 검토하면 다음을 비롯한 여러 가지 질문에 대답할 수 있습니다.From these calculations, you can answer a number of questions, including:

  • 게시자의 변경 내용을 받는 데 가장 오래 걸리는 구독자는 무엇입니까?Which Subscribers take the longest to receive a change from the Publisher?

  • 추적 프로그램 토큰을 받아야 할 구독자가 있습니까? 있다면 아직 추적 프로그램 토큰을 받지 못한 구독자는 무엇입니까?Of the Subscribers expected to receive the tracer token, which, if any, have not received it?

    항목 내용In This Topic

  • 시작하기 전에:Before you begin:

    제한 사항Limitations and Restrictions

  • 대기 시간을 측정하고 연결의 유효성을 검사하려면:To measure latency and validate connections, using:

    SQL Server 복제 모니터SQL Server Replication Monitor

    Transact-SQLTransact-SQL

    RMO(복제 관리 개체)Replication Management Objects

시작하기 전에 Before You Begin

제한 사항 Limitations and Restrictions

또한 추적 프로그램 토큰은 모든 작업을 중지하고 모든 노드가 처리 중인 변경 내용을 모두 받았는지 확인하므로 시스템을 중지시킬 때 유용할 수 있습니다.Tracer tokens can also be useful when quiescing a system, which involves stopping all activity and verifying that all nodes have received all outstanding changes. 자세한 내용은 복제 토폴로지 정지(복제 Transact-SQL 프로그래밍)를 참조하세요.For more information, see Quiesce a Replication Topology (Replication Transact-SQL Programming).

추적 프로그램 토큰을 사용하려면 다음과 같이 특정 MicrosoftMicrosoft SQL ServerSQL Server버전을 사용해야 합니다.To use tracer tokens, you must use certain versions of MicrosoftMicrosoft SQL ServerSQL Server:

  • 배포자는 MicrosoftMicrosoft SQL Server 2005SQL Server 2005 이후 버전이어야 합니다.The Distributor must be MicrosoftMicrosoft SQL Server 2005SQL Server 2005 or later.

  • 게시자는 SQL Server 2005SQL Server 2005 이후 버전이거나 Oracle 게시자여야 합니다.The Publisher must be SQL Server 2005SQL Server 2005 or later or be an Oracle Publisher.

  • 밀어넣기 구독의 경우 구독자가 MicrosoftMicrosoft SQL ServerSQL Server 7.0 이후 버전이면 추적 프로그램 토큰 통계는 게시자, 배포자 및 구독자에서 수집됩니다.For push subscriptions, tracer token statistics are gathered from the Publisher, Distributor, and Subscribers if the Subscriber is MicrosoftMicrosoft SQL ServerSQL Server 7.0 or later.

  • 끌어오기 구독의 경우 구독자가 SQL Server 2005SQL Server 2005 이후 버전이면 추적 프로그램 토큰 통계는 구독자에서만 수집됩니다.For pull subscriptions, tracer token statistics are gathered from Subscribers only if the Subscriber is SQL Server 2005SQL Server 2005 or later. 구독자가 SQL ServerSQL Server 7.0이나 MicrosoftMicrosoft SQL Server 2000SQL Server 2000인 경우 게시자와 배포자를 통해서만 통계가 수집됩니다.If the Subscriber is SQL ServerSQL Server 7.0 or MicrosoftMicrosoft SQL Server 2000SQL Server 2000, statistics are gathered only from the Publisher and Distributor.

    또한 다음과 같이 주의해야 할 다른 문제 및 제한 사항이 많이 있습니다.There are also a number of other issues and restrictions to be aware of:

  • 추적 프로그램 토큰을 받으려면 구독이 활성 상태여야 합니다.Subscriptions must be active to receive a tracer token. 구독이 초기화되었다면 활성 상태입니다.A subscription is active if it has been initialized.

  • 다시 초기화는 관련 구독에 대해 보류 중인 추적 프로그램 토큰을 제거합니다.Reinitialization removes any pending tracer tokens for the relevant subscriptions.

  • 구독자는 자신의 초기 동기화 이후에 생성된 추적 프로그램 토큰만 받습니다.Subscribers only receive tracer tokens that were created after their initial synchronization.

  • 구독자를 다시 게시하면 추적 프로그램 토큰이 전달되지 않습니다.Tracer tokens are not forwarded by republishing Subscribers.

  • SQL ServerSQL Server 의 보조 인스턴스에 대한 장애 조치(failover) 후에 복제 모니터는 SQL ServerSQL Server의 게시 인스턴스 이름을 조정할 수 없으며 계속해서 원래 주 인스턴스 이름으로 복제 정보를 표시합니다.After failover to a secondary, Replication Monitor is unable to adjust the name of the publishing instance of SQL ServerSQL Server and will continue to display replication information under the name of the original primary instance of SQL ServerSQL Server. 장애 조치(Failover) 후 복제 모니터를 사용하여 추적 프로그램 토큰을 입력할 수 없지만 새 게시자가 Transact-SQLTransact-SQL을 사용하여 입력한 추적 프로그램 토큰은 복제 모니터에 표시됩니다.After failover, a tracer token cannot be entered by using the Replication Monitor, however a tracer token entered on the new publisher by using Transact-SQLTransact-SQL, is visible in Replication Monitor.

SQL Server 복제 모니터 사용 Using SQL Server Replication Monitor

복제 모니터를 시작하는 방법은 복제 모니터 시작을 참조하세요.For information about starting Replication Monitor, see Start the Replication Monitor.

추적 프로그램 토큰을 삽입하고 이 토큰에 대한 정보를 보려면To insert a tracer token and view information on the token

  1. 왼쪽 창에서 게시자 그룹을 확장하고 해당 게시자를 확장한 다음 해당 게시를 클릭합니다.Expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. 추적 프로그램 토큰 탭을 클릭합니다.Click the Tracer Tokens tab.

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

  4. 게시자에서 배포자로 연결 시 대기 시간, 배포자에서 구독자로 연결 시 대기 시간, 총 대기 시간열에서 추적 프로그램 토큰에 대한 경과 시간을 확인합니다.View elapsed time for the tracer token in the following columns: Publisher to Distributor, Distributor to Subscriber, Total Latency. 보류 중 은 토큰이 지정된 지점에 아직 도달하지 않았음을 나타냅니다.A value of Pending indicates that the token has not reached a given point.

이전에 삽입한 추적 프로그램 토큰에 대한 정보를 보려면To view information on a tracer token inserted previously

  1. 왼쪽 창에서 게시자 그룹을 확장하고 해당 게시자를 확장한 다음 해당 게시를 클릭합니다.Expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. 추적 프로그램 토큰 탭을 클릭합니다.Click the Tracer Tokens tab.

  3. 삽입된 시간 드롭다운 목록에서 시간을 선택합니다.Select a time from the Time inserted drop-down list.

  4. 게시자에서 배포자로 연결 시 대기 시간, 배포자에서 구독자로 연결 시 대기 시간, 총 대기 시간열에서 추적 프로그램 토큰에 대한 경과 시간을 확인합니다.View elapsed time for the tracer token in the following columns: Publisher to Distributor, Distributor to Subscriber, Total Latency. 보류 중 은 토큰이 지정된 지점에 아직 도달하지 않았음을 나타냅니다.A value of Pending indicates that the token has not reached a given point.

    참고

    추적 프로그램 토큰 정보는 배포 데이터베이스의 기록 보존 기간에 의해 제어되는 다른 기록 데이터와 같은 시간 동안 유지됩니다.Tracer token information is retained for the same time period as other historical data, which is governed by the history retention period of the distribution database. 배포 데이터베이스 속성 변경에 대한 자세한 내용은 게시자 및 배포자 속성 보기 및 수정을 참조하세요.For information about changing distribution database properties, see View and Modify Distributor and Publisher Properties.

Transact-SQL 사용 Using Transact-SQL

트랜잭션 게시에 추적 프로그램 토큰을 게시하려면To post a tracer token to a transactional publication

  1. (옵션) 게시 데이터베이스의 게시자에서 sp_helppublication(Transact-SQL)을 실행합니다.(Optional) At the Publisher on the publication database, execute sp_helppublication (Transact-SQL). 해당 게시가 있는지 그리고 상태가 활성 상태인지 확인합니다.Verify that the publication exists and that the status is active.

  2. (옵션) 게시 데이터베이스의 게시자에서 sp_helpsubscription(Transact-SQL)을 실행합니다.(Optional) At the Publisher on the publication database, execute sp_helpsubscription (Transact-SQL). 해당 구독이 있는지 그리고 상태가 활성 상태인지 확인합니다.Verify that the subscription exists and that the status is active.

  3. 게시 데이터베이스의 게시자에서 sp_posttracertoken(Transact-SQL)을 실행하여 @publication을 지정합니다.At the Publisher on the publication database, execute sp_posttracertoken (Transact-SQL), specifying @publication. @tracer_token_id 출력 매개 변수의 값을 확인합니다.Note the value of the @tracer_token_id output parameter.

트랜잭션 복제에 대한 대기 시간을 확인하고 연결 유효성을 검사하려면To determine latency and validate connections for a transactional publication

  1. 이전 절차를 따라 게시에 추적 프로그램 토큰을 게시합니다.Post a tracer token to the publication using the previous procedure.

  2. 게시 데이터베이스의 게시자에서 sp_helptracertokens(Transact-SQL)를 실행하여 @publication을 지정합니다.At the Publisher on the publication database, execute sp_helptracertokens (Transact-SQL), specifying @publication. 그러면 해당 게시에 게시된 모든 추적 프로그램 토큰의 목록이 반환됩니다.This returns a list of all tracer tokens posted to the publication. 결과 집합에서 원하는 tracer_id 를 확인합니다.Note the desired tracer_id in the result set.

  3. 게시 데이터베이스의 게시자에서 sp_helptracertokenhistory(Transact-SQL)를 실행하여 @publication을 지정하고 @tracer_id에 대해 2단계에서 얻은 추적 프로그램 토큰 ID를 지정합니다.At the Publisher on the publication database, execute sp_helptracertokenhistory (Transact-SQL), specifying @publication and the tracer token ID from step 2 for @tracer_id. 그러면 선택한 추적 프로그램 토큰에 대한 대기 시간 정보가 반환됩니다.This returns latency information for the selected tracer token.

추적 프로그램 토큰을 제거하려면To remove tracer tokens

  1. 게시 데이터베이스의 게시자에서 sp_helptracertokens(Transact-SQL)를 실행하여 @publication을 지정합니다.At the Publisher on the publication database, execute sp_helptracertokens (Transact-SQL), specifying @publication. 그러면 해당 게시에 게시된 모든 추적 프로그램 토큰의 목록이 반환됩니다.This returns a list of all tracer tokens posted to the publication. 결과 집합에서 삭제할 추적 프로그램 토큰의 tracer_id 를 확인합니다.Note the tracer_id for the tracer token to delete in the result set.

  2. 게시 데이터베이스의 게시자에서 sp_deletetracertokenhistory(Transact-SQL)를 실행하여 @publication을 지정하고 @tracer_id에 대해 2단계에서 얻은 삭제할 추적 프로그램의 ID를 지정합니다.At the Publisher on the publication database, execute sp_deletetracertokenhistory (Transact-SQL), specifying @publication and the ID of the tracer to delete from step 2 for @tracer_id.

예(Transact-SQL) Example (Transact-SQL)

이 예제에서는 추적 프로그램 토큰 레코드를 게시하고 게시된 추적 프로그램 토큰의 반환된 ID를 사용하여 대기 시간 정보를 봅니다.This example posts a tracer token record and uses the returned ID of the posted tracer token to view latency information.

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
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(복제 관리 개체) 사용 Using Replication Management Objects (RMO)

트랜잭션 게시에 추적 프로그램 토큰을 게시하려면To post a tracer token to a transactional publication

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.Create a connection to the Publisher by using the ServerConnection class.

  2. TransPublication 클래스의 인스턴스를 만듭니다.Create an instance of the TransPublication class.

  3. 게시에 대해 NameDatabaseName 속성을 설정하고 ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.Call the LoadProperties method to get the properties of the object. 이 메서드가 false를 반환하는 경우 3단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 없습니다.If this method returns false, either the publication properties in step 3 were defined incorrectly or the publication does not exist.

  5. PostTracerToken 메서드를 호출합니다.Call the PostTracerToken method. 이 메서드는 게시의 트랜잭션 로그에 추적 프로그램 토큰을 삽입합니다.This method inserts a tracer token into the publication's transaction log.

트랜잭션 복제에 대한 대기 시간을 확인하고 연결 유효성을 검사하려면To determine latency and validate connections for a transactional publication

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.Create a connection to the Distributor by using the ServerConnection class.

  2. PublicationMonitor 클래스의 인스턴스를 만듭니다.Create an instance of the PublicationMonitor class.

  3. Name, DistributionDBName, PublisherNamePublicationDBName 속성을 설정하고 ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.Set the Name, DistributionDBName, PublisherName, and PublicationDBName properties, and set the ConnectionContext property to the connection created in step 1.

  4. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.Call the LoadProperties method to get the properties of the object. 이 메서드가 false를 반환하는 경우 3단계에서 게시 모니터 속성이 올바르게 정의되지 않았거나 해당 게시가 없는 것입니다.If this method returns false, either the publication monitor properties in step 3 were defined incorrectly or the publication does not exist.

  5. EnumTracerTokens 메서드를 호출합니다.Call the EnumTracerTokens method. 반환된 ArrayList 개체를 TracerToken 개체의 배열로 캐스팅합니다.Cast the returned ArrayList object to an array of TracerToken objects.

  6. EnumTracerTokenHistory 메서드를 호출합니다.Call the EnumTracerTokenHistory method. 5단계에서 삽입한 추적 프로그램 토큰에 대한 TracerTokenId 값을 전달합니다.Pass a value of TracerTokenId for a tracer token from step 5. 그러면 선택한 추적 프로그램 토큰에 대한 대기 시간 정보가 DataSet 개체로 반환됩니다.This returns latency information for the selected tracer token as a DataSet object. 모든 추적 프로그램 토큰 정보가 반환되면 게시자와 배포자 간의 연결 및 배포자와 구독자 간의 연결이 모두 있으며 복제 토폴로지가 작동하고 있는 것입니다.If all tracer token information is returned, the connection between the Publisher and Distributor and the connection between the Distributor and the Subscriber both exist and the replication topology is functioning.

추적 프로그램 토큰을 제거하려면To remove tracer tokens

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.Create a connection to the Distributor by using the ServerConnection class.

  2. PublicationMonitor 클래스의 인스턴스를 만듭니다.Create an instance of the PublicationMonitor class.

  3. Name, DistributionDBName, PublisherNamePublicationDBName 속성을 설정하고 ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.Set the Name, DistributionDBName, PublisherName, and PublicationDBName properties, and set the ConnectionContext property to the connection created in step 1.

  4. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.Call the LoadProperties method to get the properties of the object. 이 메서드가 false를 반환하는 경우 3단계에서 게시 모니터 속성이 올바르게 정의되지 않았거나 해당 게시가 없는 것입니다.If this method returns false, either the publication monitor properties in step 3 were defined incorrectly or the publication does not exist.

  5. EnumTracerTokens 메서드를 호출합니다.Call the EnumTracerTokens method. 반환된 ArrayList 개체를 TracerToken 개체의 배열로 캐스팅합니다.Cast the returned ArrayList object to an array of TracerToken objects.

  6. CleanUpTracerTokenHistory 메서드를 호출합니다.Call the CleanUpTracerTokenHistory method. 다음 값 중 하나를 전달합니다.Pass one of the following values:

    • 5단계에서 삽입한 추적 프로그램 토큰에 대한 TracerTokenId 입니다.The TracerTokenId for a tracer token from step 5. 그러면 선택한 토큰에 대한 정보가 삭제됩니다.This deletes information for a selected token.

    • DateTime 개체입니다.A DateTime object. 그러면 지정한 날짜보다 오래된 모든 토큰에 대한 정보가 삭제됩니다.This deletes information for all tokens older than the specified date and time.