Medir a latência e validar conexões para replicação transacional

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Este tópico descreve como medir a latência e validar conexões para replicação transacional no SQL Server usando o Replication Monitor, o Transact-SQL ou RMO (Replication Management Objects). A replicação transacional fornece o recurso do token de rastreamento, que proporciona um meio adequado para medir a latência em topologias de replicação transacional e validar as conexões entre o Publicador, o Distribuidor e os Assinantes. Um token (uma quantidade pequena de dados) é gravado no log de transações do banco de dados de publicação, marcado como se fosse uma transação replicada comum e enviado pelo sistema, permitindo um cálculo de:

  • O tempo decorrido entre a confirmação de uma transação no Publicador e o comando correspondente inserido no banco de dados de distribuição no Distribuidor.

  • O tempo decorrido entre um comando inserido no banco de dados de distribuição e a transação correspondente confirmada no Assinante.

Desses cálculos, você pode responder várias perguntas, enquanto incluindo:

  • Quais Assinantes levam mais tempo para receber uma alteração do Publicador?

  • Dos Assinantes esperados para receber o token de rastreamento quais, se houver, ainda não receberam?

Neste tópico

Antes de começar

Limitações e Restrições

Os tokens de rastreamento também são úteis para confirmar um sistema, o que implica em parar todas as atividades e verificar que todos os nós tenham recebido todas as alterações pendentes. Para obter mais informações, confira Como confirmar uma topologia de replicação (Programação Transact-SQL de replicação).

Para usar os tokens de rastreamento, você deve utilizar versões específicas do Microsoft SQL Server:

  • O Distribuidor deve ser o Microsoft SQL Server 2005 (9.x) ou posterior.

  • O Publicador deve ser SQL Server 2005 (9.x) ou posterior, ou ser um Editor Oracle.

  • Para as assinaturas push, as estatísticas dos tokens de rastreamento são coletadas do Publicador, do Distribuidor e dos Assinantes, se o Assinante for Microsoft SQL Server 7.0 ou posterior.

  • Para as assinaturas pull, as estatísticas dos tokens de rastreamento são coletadas dos Assinantes somente se o Assinante for SQL Server 2005 (9.x) ou posterior. Se o Assinante for o SQL Server 7.0 ou o Microsoft SQL Server 2000 (8.x), as estatísticas serão coletadas somente do Publicador e do Distribuidor.

Há vários outros itens e restrições que devem ser considerados:

  • Para receber um token de rastreamento, as assinaturas devem estar ativas. Uma assinatura estará ativa se ela foi inicializada.

  • A reinicialização remove todos os tokens de rastreamento pendentes para as assinaturas relevantes.

  • Os Assinantes recebem os tokens de rastreamento que foram criados somente após a sua sincronização inicial.

  • Os tokens de rastreamento não são encaminhados pelos Assinantes de republicação.

  • Após o failover em uma replica secundária, o Replication Monitor não poderá ajustar o nome da instância de publicação do SQL Server e continuará exibindo informações de replicação abaixo do nome da instância primária original do SQL Server. Depois do failover, um token de rastreamento não pode ser inserido usando o Replication Monitor; no entanto, um token de rastreamento inserido no novo publicador usando Transact-SQL fica visível no Replication Monitor.

Usando o SQL Server Replication Monitor

Para obter informações sobre como iniciar o Replication Monitor, consulte Start the Replication Monitor (Iniciar o Replication Monitor).

Para inserir um token de rastreamento e exibir informações sobre o token

  1. Expanda um Grupo do publicador no painel esquerdo, expanda um Publicador e clique em uma publicação.

  2. Clique na guia Tokens de Rastreamento .

  3. Clique em Inserir Rastreador.

  4. Exiba o tempo decorrido para o token de rastreamento nas seguintes colunas: Publicador para Distribuidor, Distribuidor para Assinante, Latência Total. Um valor de Pendente indica que o token não alcançou um determinado ponto.

Para exibir informações sobre um token de rastreamento previamente inserido

  1. Expanda um Grupo do publicador no painel esquerdo, expanda um Publicador e clique em uma publicação.

  2. Clique na guia Tokens de Rastreamento .

  3. Selecione uma opção de tempo na lista suspensa Tempo inserido .

  4. Exiba o tempo decorrido para o token de rastreamento nas seguintes colunas: Publicador para Distribuidor, Distribuidor para Assinante, Latência Total. Um valor de Pendente indica que o token não alcançou um determinado ponto.

    Observação

    Informações de token de rastreamento são retidas para o mesmo período de tempo que outros dados históricos, os quais são governados pelo período de retenção de histórico do banco de dados de distribuição. Para obter informações sobre como alterar as propriedades do banco de dados de distribuição, consulte Exibir e modificar as propriedades do Distribuidor e do Publicador.

Usando o Transact-SQL

Para publicar um token de rastreamento em uma publicação transacional

  1. (Opcional) No Publicador do banco de dados de publicação, execute sp_helppublication (Transact-SQL). Verifique se a publicação existe e se o status é ativo.

  2. (Opcional) No Publicador do banco de dados de publicação, execute sp_helpsubscription (Transact-SQL). Verifique se a assinatura existe e se o status é ativo.

  3. No Publicador do banco de dados de publicação, execute sp_posttracertoken (Transact-SQL), especificando @publication. Observe o valor do parâmetro de saída @tracer_token_id .

Para determinar a latência e validar as conexões para uma publicação transacional

  1. Publique um token de rastreamento na publicação usando o procedimento anterior.

  2. No Publicador do banco de dados de publicação, execute sp_helptracertokens (Transact-SQL), especificando @publication. Isso retorna uma lista de todos os tokens de rastreamento publicados na publicação. Observe o tracer_id desejado no conjunto de resultados.

  3. No Publicador do banco de dados de publicação, execute sp_helptracertokenhistory (Transact-SQL), especificando @publication, e o ID do token de rastreamento da etapa 2 para @tracer_id. Isso retorna informações de latência para o token de rastreamento selecionado.

Para remover tokens de rastreamento

  1. No Publicador do banco de dados de publicação, execute sp_helptracertokens (Transact-SQL), especificando @publication. Isso retorna uma lista de todos os tokens de rastreamento publicados na publicação. Observe o tracer_id a ser excluído pelo token de rastreamento no conjunto de resultados.

  2. No Publicador do banco de dados de publicação, execute sp_deletetracertokenhistory (Transact-SQL), especificando @publication e o ID de rastreamento a ser excluída da etapa 2 para @tracer_id.

Exemplo (Transact-SQL)

Esse exemplo publica um registro dos tokens de rastreamento, e usa o ID retornado do token de rastreamento publicado, para exibir as informações da latência.

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

Usando o RMO (Replication Management Objects)

Para publicar um token de rastreamento em uma publicação transacional

  1. Crie uma conexão com o Publicador usando a classe ServerConnection .

  2. Criar uma instância da classe TransPublication.

  3. Defina as propriedades Name e DatabaseName para a publicação, e a propriedade ConnectionContext para a conexão criada na etapa 1.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades de publicação na etapa 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método PostTracerToken . Esse método insere um token de rastreamento no log de transações da publicação.

Para determinar a latência e validar as conexões para uma publicação transacional

  1. Crie uma conexão com o Distribuidor usando a classe ServerConnection .

  2. Criar uma instância da classe PublicationMonitor.

  3. Defina as propriedades Name, DistributionDBName, PublisherNamee PublicationDBName ; e, defina a propriedade ConnectionContext para a conexão criada na etapa 1.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades do monitor da publicação na etapa 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método EnumTracerTokens . Converta o objeto ArrayList retornado em uma matriz de objetos TracerToken .

  6. Chame o método EnumTracerTokenHistory . Passe um valor de TracerTokenId para um token de rastreamento da etapa 5. Isso retorna as informações da latência para o token de rastreamento selecionado como um objeto DataSet . Se todas as informações do token de rastreamento forem retornadas, a conexão entre o Publicador e o Distribuidor e a conexão entre o Distribuidor e o Assinante serão efetivas e a topologia de replicação estará funcionando.

Para remover tokens de rastreamento

  1. Crie uma conexão com o Distribuidor usando a classe ServerConnection .

  2. Criar uma instância da classe PublicationMonitor.

  3. Defina as propriedades Name, DistributionDBName, PublisherNamee PublicationDBName ; e, defina a propriedade ConnectionContext para a conexão criada na etapa 1.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se esse método retornar false, as propriedades do monitor da publicação na etapa 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método EnumTracerTokens . Converta o objeto ArrayList retornado em uma matriz de objetos TracerToken .

  6. Chame o método CleanUpTracerTokenHistory . Passe um dos seguintes valores:

    • O TracerTokenId para um token de rastreamento da etapa 5. Isso exclui as informações para um token selecionado.

    • Um objeto DateTime. Isso exclui as informações de todos os tokens anteriores à data e hora especificadas.