Medir la latencia y validar las conexiones de la replicación transaccional

Se aplica a:SQL ServerAzure SQL Managed Instance

En este tema se describe cómo medir la latencia y validar conexiones para la replicación transaccional en SQL Server mediante el Monitor de replicación, Transact-SQL o Replication Management Objects (RMO). La replicación transaccional proporciona la característica de testigo de seguimiento, que ofrece una forma cómoda de medir la latencia en topologías de replicación transaccional y validar las conexiones entre el publicador, el distribuidor y los suscriptores. Se escribe un token (una pequeña cantidad de datos) en el registro de transacción de la base de datos de publicaciones, marcado como si fuese una transacción replicada, y se envía a través del sistema, de forma que permite calcular:

  • Cuánto tiempo transcurre desde que se confirma una transacción en el publicador hasta que se inserta el comando correspondiente en la base de datos de distribución del distribuidor.

  • Cuánto tiempo transcurre desde que se inserta un comando en la base de datos de distribución hasta que se confirma la transacción correspondiente en el suscriptor.

A partir de estos cálculos, podrá responder a diversas preguntas, como por ejemplo:

  • ¿Qué suscriptores tardan más en recibir un cambio del publicador?

  • De los suscriptores que esperan recibir el testigo de seguimiento, ¿cuáles, si los hay, no lo han recibido?

En este tema

Antes de empezar

Limitaciones y restricciones

Los testigos de seguimiento también pueden ser útiles al detener el sistema, lo que implica detener todas las actividades y comprobar que todos los nodos han recibido todos los cambios pendientes. Para más información, vea Poner en modo inactivo una topología de replicación (programación de la replicación con Transact-SQL).

Para usar testigos de seguimiento, debe utilizar determinadas versiones de Microsoft SQL Server:

  • El distribuidor debe ser Microsoft SQL Server 2005 (9.x) o posterior.

  • El publicador debe ser SQL Server 2005 (9.x) o posterior, o un publicador de Oracle.

  • En el caso de las suscripciones de inserción, las estadísticas del token de seguimiento se obtienen del publicador, del distribuidor y de los suscriptores, si el suscriptor es Microsoft SQL Server 7.0 o posterior.

  • Para las suscripciones de extracción, las estadísticas del testigo de seguimiento se obtienen solo de los suscriptores, si el suscriptor es de SQL Server 2005 (9.x) o posterior. Si el suscriptor es SQL Server 7.0 o Microsoft SQL Server 2000 (8.x), las estadísticas solo se recopilan desde el publicador y el distribuidor.

También hay que tener en cuenta otros problemas y restricciones:

  • Para recibir un token de seguimiento, las suscripciones deben estar activas. Una suscripción está activa si se ha inicializado.

  • La reinicialización quita los testigos de seguimiento pendientes en las suscripciones correspondientes.

  • Los suscriptores solo reciben los testigos de seguimiento que se han creado después de la sincronización inicial.

  • Los suscriptores que vuelven a publicar no reenvían los testigos de seguimiento.

  • Después de la conmutación por error a una réplica secundaria, el Monitor de replicación no puede ajustar el nombre de la instancia de publicación de SQL Server y seguirá mostrando información de replicación bajo el nombre de la instancia principal original de SQL Server. Después de la conmutación por error, el Monitor de replicación no puede especificar un token de seguimiento, aunque muestra un token de seguimiento especificado en el nuevo publicador mediante Transact-SQL.

Usar el Monitor de replicación de SQL Server

Para información sobre cómo iniciar el Monitor de replicación, vea Iniciar el Monitor de replicación.

Para insertar un testigo de seguimiento y ver la información del token

  1. Expanda un grupo de publicador en el panel izquierdo, expanda un publicador y, a continuación, haga clic en una publicación.

  2. Haga clic en la pestaña Testigos de seguimiento .

  3. Haga clic en Insertar seguimiento.

  4. Vea el tiempo transcurrido para el testigo de seguimiento en las siguientes columnas: Publicador a distribuidor, Distribuidor a suscriptory Latencia total. El valor Pendiente indica que el testigo no ha alcanzado un punto específico.

Para ver información en el testigo de seguimiento insertado previamente

  1. Expanda un grupo de publicador en el panel izquierdo, expanda un publicador y, a continuación, haga clic en una publicación.

  2. Haga clic en la pestaña Testigos de seguimiento .

  3. Seleccione una hora en la lista desplegable Hora de inserción .

  4. Vea el tiempo transcurrido para el testigo de seguimiento en las siguientes columnas: Publicador a distribuidor, Distribuidor a suscriptory Latencia total. El valor Pendiente indica que el testigo no ha alcanzado un punto específico.

    Nota:

    La información del testigo de seguimiento se guarda durante el mismo período que otros datos del historial, que depende del período de retención de historial de la base de datos de distribución. Para obtener información sobre cómo cambiar las propiedades de la base de datos de distribución, vea Ver y modificar las propiedades del distribuidor y del publicador.

Usar Transact-SQL

Para exponer un token de seguimiento en una publicación transaccional

  1. (Opcional) En la base de datos de publicación del publicador, ejecute sp_helppublication (Transact-SQL). Compruebe que la publicación existe y que el estado está activo.

  2. (Opcional) En la base de datos de publicación del publicador, ejecute sp_helpsubscription (Transact-SQL). Compruebe que la suscripción existe y que el estado está activo.

  3. En la base de datos de publicación del publicador, ejecute sp_posttracertoken (Transact-SQL) y especifique @publication. Anote el valor del parámetro de salida @tracer_token_id .

Para medir la latencia y validar las conexiones de una replicación transaccional

  1. Exponga un token de seguimiento en la publicación utilizando el procedimiento anterior.

  2. En la base de datos de publicación del publicador, ejecute sp_helptracertokens (Transact-SQL) y especifique @publication. Esto devuelve una lista de todos los testigos de seguimiento expuestos en la publicación. Anote el tracer_id que desee del conjunto de resultados.

  3. En la base de datos de publicación del publicador, ejecute sp_helptracertokenhistory (Transact-SQL) y especifique @publication y el identificador del testigo de seguimiento del paso 2 para @tracer_id. Esto devuelve información de latencia del token de seguimiento seleccionado.

Para quitar los testigos de seguimiento

  1. En la base de datos de publicación del publicador, ejecute sp_helptracertokens (Transact-SQL) y especifique @publication. Esto devuelve una lista de todos los testigos de seguimiento expuestos en la publicación. Anote el tracer_id del token de seguimiento que se va a eliminar del conjunto de resultados.

  2. En la base de datos de publicación del publicador, ejecute sp_deletetracertokenhistory (Transact-SQL) y especifique @publication y el id. del seguimiento que se va a eliminar del paso 2 para @tracer_id.

Ejemplo (Transact-SQL)

Este ejemplo expone un registro de token de seguimiento y utiliza el Id. devuelto del token de seguimiento expuesto para ver información de la latencia.

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

Usar Replication Management Objects (RMO)

Para exponer un token de seguimiento en una publicación transaccional

  1. Cree una conexión al publicador mediante la clase ServerConnection .

  2. Cree una instancia de la clase TransPublication.

  3. Establezca las propiedades Name y DatabaseName para la publicación y la propiedad ConnectionContext en la conexión creada en el paso 1.

  4. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades de publicación del paso 3 se definieron incorrectamente, o bien que la publicación no existe.

  5. Llame al método PostTracerToken. Este método inserta un token de seguimiento en el registro de transacciones de la publicación.

Para medir la latencia y validar las conexiones de una replicación transaccional

  1. Cree una conexión al distribuidor mediante la clase ServerConnection .

  2. Cree una instancia de la clase PublicationMonitor.

  3. Establezca las propiedades Name, DistributionDBName, PublisherNamey PublicationDBName , y la propiedad ConnectionContext en la conexión creada en el paso 1.

  4. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades del monitor de la publicación del paso 3 se definieron incorrectamente, o bien que la publicación no existe.

  5. Llame al método EnumTracerTokens. Convierta el objeto ArrayList devuelto a una matriz de objetos TracerToken .

  6. Llame al método EnumTracerTokenHistory. Pase un valor de TracerTokenId para un token de seguimiento del paso 5. Esto devuelve información de latencia del token de seguimiento seleccionado como objeto DataSet . Si se devuelve toda la información del token de seguimiento, la conexión entre el publicador y el distribuidor y la conexión entre el distribuidor y el suscriptor existen, y la topología de replicación está funcionando.

Para quitar los testigos de seguimiento

  1. Cree una conexión al distribuidor mediante la clase ServerConnection .

  2. Cree una instancia de la clase PublicationMonitor.

  3. Establezca las propiedades Name, DistributionDBName, PublisherNamey PublicationDBName , y la propiedad ConnectionContext en la conexión creada en el paso 1.

  4. Llame al método LoadProperties para obtener las propiedades del objeto. Si este método devuelve false, significa que las propiedades del monitor de la publicación del paso 3 se definieron incorrectamente, o bien que la publicación no existe.

  5. Llame al método EnumTracerTokens. Convierta el objeto ArrayList devuelto a una matriz de objetos TracerToken .

  6. Llame al método CleanUpTracerTokenHistory. Pase uno de los siguientes valores:

    • El TracerTokenId para un token de seguimiento del paso 5. Esto elimina información de un token seleccionado.

    • Un objeto DateTime. Esto elimina información de todos los tokens anteriores a la fecha y hora especificada.