Mede a latência e valida ligações para replicação transacional

Aplica-se a: SQL ServerAzure SQL Managed Instance

Este tópico descreve como medir a latência e validar ligações para replicação transacional no SQL Server utilizando o Replication Monitor, Transact-SQL ou Replication Management Objects (RMO). A replicação transacional fornece a funcionalidade do token traçador, que proporciona uma forma conveniente de medir a latência em topologias de replicação transacional e de validar as ligações entre o Publisher, o Distribuidor e os Assinantes. Um token (uma pequena quantidade de dados) é escrito no registo de transações da base de dados de publicação, marcado como se fosse uma transação replicada típica, e enviado através do sistema, permitindo um cálculo de:

  • Quanto tempo decorre entre uma transação ser comprometida no Publisher e o comando correspondente ser inserido na base de dados de distribuição do Distribuidor.

  • Quanto tempo decorre entre a inserção de um comando na base de dados de distribuição e a confirmação da transação correspondente num Subscritor.

A partir destes cálculos, pode responder a várias perguntas, incluindo:

  • Quais assinantes demoram mais a receber uma alteração do Publisher?

  • Dos subscritores dos quais se espera que recebam o token de rastreio, quais, se existirem, não o receberam?

Limitações e Restrições

Os tokens de rastreio também podem ser úteis ao colocar um sistema em quiescência, o que implica parar toda a atividade e verificar se todos os nós receberam todas as alterações pendentes. Para obter mais informações, consulte desativar uma topologia de replicação (replicação Transact-SQL programação).

Para utilizar tokens de rastreio, tem de utilizar determinadas versões do Microsoft SQL Server:

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

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

  • Para subscrições push, as estatísticas dos tokens de rastreio são recolhidas do Publicador, do Distribuidor e dos Assinantes, se o Assinante for o Microsoft SQL Server 7.0 ou posterior.

  • Para subscrições pull, as estatísticas dos tokens de rastreio são recolhidas apenas dos subscritores, se o Subscritor for o SQL Server 2005 (9.x) ou posterior. Se o Assinante for SQL Server 7.0 ou Microsoft SQL Server 2000 (8.x), as estatísticas são recolhidas apenas do Publisher e do Distribuidor.

Existem também várias outras questões e restrições a ter em conta:

  • As subscrições devem estar ativas para receber um token rastreador. Uma subscrição está ativa se tiver sido inicializada.

  • A reinicialização remove todos os tokens de rastreio pendentes das subscrições relevantes.

  • Os assinantes só recebem tokens rastreadores que foram criados após a sua sincronização inicial.

  • Os tokens Tracer não são encaminhados por Subscritores de republicação.

  • Após o failover para uma instância secundária, o Replication Monitor não consegue atualizar o nome da instância publicadora do SQL Server e continuará a apresentar as informações de replicação com o nome da instância primária original do SQL Server. Após o failover, não é possível introduzir um token de rastreio através do Monitor de Replicação; no entanto, um token de rastreio introduzido no novo publicador através de Transact-SQL é visível no Monitor de Replicação.

Utilização do SQL Server Replication Monitor

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

Para inserir um token rastreador e visualizar informações sobre o token

  1. Expanda um grupo Publisher no painel esquerdo, expanda um Publisher e depois clique numa publicação.

  2. Clique no separador Fichas de rastreio.

  3. Clique em Inserir rastreador.

  4. Veja o tempo decorrido para o token rastreador nas colunas seguintes: Editor para Distribuidor, Distribuidor para Assinante, Latência Total. Um valor de Pendente indica que o token não atingiu um determinado ponto.

Para visualizar informações sobre um token rastreador inserido anteriormente

  1. Expanda um grupo Publisher no painel esquerdo, expanda um Publisher e depois clique numa publicação.

  2. Clique no separador Fichas de rastreio.

  3. Selecione uma hora na lista suspensa Hora inserida.

  4. Veja o tempo decorrido para o token rastreador nas colunas seguintes: Editor para Distribuidor, Distribuidor para Assinante, Latência Total. Um valor de Pendente indica que o token não atingiu um determinado ponto.

    Note

    A informação dos tokens de rastreio é mantida durante o mesmo período que os outros dados históricos, o qual é regido pelo período de retenção do histórico da base de dados de distribuição. Para informações sobre a alteração das propriedades da base de dados de distribuição, consulte Visualizar e Modificar Propriedades de Distribuidores e Publisher.

Usando Transact-SQL

Para publicar um token rastreador numa publicação transacional

  1. (Opcional) No Publicador, na base de dados de publicação, execute sp_helppublication (Transact-SQL). Verifique se a publicação existe e que o estado está ativo.

  2. (Opcional) No Publicador, na base de dados de publicação, execute sp_helpsubscription (Transact-SQL). Verifique se a subscrição existe e se o estado está ativo.

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

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

  1. Coloque um token rastreador na publicação usando o procedimento anterior.

  2. No Publicador, na base de dados de publicação, execute sp_helptracertokens (Transact-SQL), especificando @publication. Isto devolve uma lista de todos os tokens de rastreio enviados para a publicação. Note a tracer_id desejada no conjunto de resultados.

  3. No Publicador da base de dados de publicações, execute sp_helptracertokenhistory (Transact-SQL), especificando @publication e o ID do token de rastreio do passo 2 para @tracer_id. Isto devolve informação de latência para o token traçador selecionado.

Para remover tokens de rastreio

  1. No Publicador, na base de dados de publicação, execute sp_helptracertokens (Transact-SQL), especificando @publication. Isto devolve uma lista de todos os tokens de rastreio enviados para a publicação. Note a tracer_id para o token traçador ser eliminado do conjunto de resultados.

  2. No Publisher da base de dados de publicação, execute sp_deletetracertokenhistory (Transact-SQL), especificando @publication e o ID do traçador a eliminar do passo 2 para @tracer_id.

Exemplo (Transact-SQL)

Este exemplo publica um registo de token rastreador e utiliza o ID devolvido do token rastreador publicado para visualizar a informação de 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

Utilização de Objetos de Gestão de Replicação (RMO)

Para publicar um token rastreador numa publicação transacional

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

  2. Crie uma instância da TransPublication classe.

  3. Defina as Name propriedades e DatabaseName para a publicação, e defina a ConnectionContext propriedade para a ligação criada no passo 1.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se este método devolver falso, ou as propriedades de publicação no passo 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método PostTracerToken. Este método insere um token rastreador no registo de transações da publicação.

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

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

  2. Crie uma instância da PublicationMonitor classe.

  3. Defina as propriedades Name, DistributionDBName, PublisherName e PublicationDBName, e defina a propriedade ConnectionContext para a ligação criada no passo 1.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se este método devolver falso, ou as propriedades do monitor de publicação no passo 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método EnumTracerTokens. Converta o objeto ArrayList devolvido num array de objetos TracerToken.

  6. Chame o método EnumTracerTokenHistory. Introduza um valor de TracerTokenId para um token de rastreio obtido no passo 5. Isto devolve informação de latência para o token traçador selecionado como objeto DataSet . Se forem devolvidas todas as informações do token de rastreio, isso significa que a ligação entre o Publisher e o Distributor e a ligação entre o Distributor e o Subscriber ambas existem e que a topologia de replicação está a funcionar.

Para remover tokens de rastreio

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

  2. Crie uma instância da PublicationMonitor classe.

  3. Defina as propriedades Name, DistributionDBName, PublisherName e PublicationDBName, e defina a propriedade ConnectionContext para a ligação criada no passo 1.

  4. Chame o método LoadProperties para obter as propriedades do objeto. Se este método devolver falso, ou as propriedades do monitor de publicação no passo 3 foram definidas incorretamente ou a publicação não existe.

  5. Chame o método EnumTracerTokens. Converta o objeto ArrayList devolvido num array de objetos TracerToken.

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

    • O TracerTokenId para um token de rastreio do passo 5. Isto apaga a informação de um token selecionado.

    • Um objeto DateTime. Isto elimina a informação de todos os tokens mais antigos do que a data e hora especificadas.