Mesurer la latence et valider les connexions pour la réplication transactionnelleMeasure Latency and Validate Connections for Transactional Replication

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database (Managed Instance uniquement) nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Cette rubrique explique comment mesurer la latence et valider les connexions pour la réplication transactionnelle dans SQL Server 2019 (15.x)SQL Server 2019 (15.x) à l'aide du Moniteur de réplication, de Transact-SQLTransact-SQLou d'objets RMO (Replication Management Objects).This topic describes how to measure latency and validate connections for transactional replication in SQL Server 2019 (15.x)SQL Server 2019 (15.x) by using Replication Monitor, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). La réplication transactionnelle offre la fonctionnalité de jeton de suivi, moyen facile de mesurer la latence dans les topologies de réplication transactionnelle et de valider les connexions entre le serveur de publication, le serveur de distribution et les Abonnés.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. Un jeton (une petite quantité de données) est écrit dans le journal des transactions de la base de données de publication et est marqué comme s'il s'agissait d'une transaction standard répliquée, puis est envoyé dans le système, permettant ainsi le calcul :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:

  • du temps écoulé entre la validation d'une transaction par le serveur de publication et l'insertion de la commande qui en découle dans la base de données de distribution sur le serveur de distribution ;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.

  • du temps écoulé entre l'insertion d'une commande dans la base de données de distribution et la validation de la transaction qui en découle au niveau d'un Abonné.How much time elapses between a command being inserted in the distribution database and the corresponding transaction being committed at a Subscriber.

De par ces calculs, vous pouvez ainsi répondre à diverses questions, notamment :From these calculations, you can answer a number of questions, including:

  • Quels Abonnés mettent le plus longtemps à recevoir une modification du serveur de publication ?Which Subscribers take the longest to receive a change from the Publisher?

  • De l'ensemble des Abonnés prévus pour recevoir le jeton de suivi, lesquels, le cas échéant, ne l'ont pas reçu ?Of the Subscribers expected to receive the tracer token, which, if any, have not received it?

Dans cette rubriqueIn This Topic

Avant de commencerBefore You Begin

Limitations et restrictionsLimitations and Restrictions

Les jetons de suivi peuvent également être utiles lors de la suspension d'un système, qui consiste à arrêter toute l'activité pour vérifier que tous les nœuds ont reçu les changements en cours.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. Pour plus d’informations, consultez Suspendre une topologie de réplication (programmation Transact-SQL de la réplication).For more information, see Quiesce a Replication Topology (Replication Transact-SQL Programming).

Pour utiliser les jetons de suivi, vous avez besoin de certaines versions de MicrosoftMicrosoft SQL ServerSQL Server :To use tracer tokens, you must use certain versions of MicrosoftMicrosoftSQL ServerSQL Server:

  • Le serveur de distribution doit être MicrosoftMicrosoft SQL Server 2005 (9.x)SQL Server 2005 (9.x) ou une version ultérieure.The Distributor must be MicrosoftMicrosoftSQL Server 2005 (9.x)SQL Server 2005 (9.x) or later.

  • Le serveur de publication doit être SQL Server 2005 (9.x)SQL Server 2005 (9.x) ou version ultérieure, ou un serveur de publication Oracle.The Publisher must be SQL Server 2005 (9.x)SQL Server 2005 (9.x) or later or be an Oracle Publisher.

  • Pour les abonnements par envoi de données, les statistiques de jetons de suivi sont collectées à partir du serveur de publication, du serveur de distribution et des Abonnés si l’Abonné exécute MicrosoftMicrosoft SQL ServerSQL Server 7.0 ou une version ultérieure.For push subscriptions, tracer token statistics are gathered from the Publisher, Distributor, and Subscribers if the Subscriber is MicrosoftMicrosoftSQL ServerSQL Server 7.0 or later.

  • Pour les abonnements par extraction de données, les statistiques de jetons de suivi sont rassemblées uniquement à partir des Abonnés si l'Abonné exécute SQL Server 2005 (9.x)SQL Server 2005 (9.x) 7.0 ou version ultérieure.For pull subscriptions, tracer token statistics are gathered from Subscribers only if the Subscriber is SQL Server 2005 (9.x)SQL Server 2005 (9.x) or later. Si l’Abonné exécute SQL ServerSQL Server 7.0 ou MicrosoftMicrosoft SQL Server 2000 (8.x)SQL Server 2000 (8.x), les statistiques sont collectées uniquement à partir du serveur de publication et du serveur de distribution.If the Subscriber is SQL ServerSQL Server 7.0 or MicrosoftMicrosoftSQL Server 2000 (8.x)SQL Server 2000 (8.x), statistics are gathered only from the Publisher and Distributor.

Il existe aussi d'autres problèmes et restrictions à connaître :There are also a number of other issues and restrictions to be aware of:

  • Les abonnements doivent être actifs pour recevoir un jeton de suivi.Subscriptions must be active to receive a tracer token. Un abonnement est actif s'il a été initialisé.A subscription is active if it has been initialized.

  • La réinitialisation supprime tout jeton de suivi en suspens pour les abonnements concernés.Reinitialization removes any pending tracer tokens for the relevant subscriptions.

  • Les Abonnés ne reçoivent que les jetons de suivi créés après leur première synchronisation.Subscribers only receive tracer tokens that were created after their initial synchronization.

  • Les jetons de suivi ne sont pas retransmis par les Abonnés qui republient.Tracer tokens are not forwarded by republishing Subscribers.

  • Après un basculement vers un réplica secondaire, le Moniteur de réplication ne peut pas ajuster le nom de l'instance de publication de SQL ServerSQL Server et continue à afficher les informations de réplication sous le nom de l'instance principale SQL ServerSQL Serverd'origine.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. Après le basculement, un jeton de suivi ne peut pas être écrit à l'aide du Moniteur de réplication, toutefois un jeton de suivi écrit sur le nouveau serveur de publication à l'aide de Transact-SQLTransact-SQLest visible dans le Moniteur de réplication.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.

Utilisation du Moniteur de réplication SQL Server

Using SQL Server Replication Monitor
Pour plus d’informations sur le démarrage du Moniteur de réplication, consultez Démarrer le Moniteur de réplication.For information about starting Replication Monitor, see Start the Replication Monitor.

Pour insérer un jeton de suivi et afficher des informations sur le jetonTo insert a tracer token and view information on the token

  1. Développez un groupe de serveurs de publication dans le volet gauche, développez un serveur de publication, puis cliquez sur une publication.Expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. Cliquez sur l'onglet Jetons de suivi .Click the Tracer Tokens tab.

  3. Cliquez sur Insérer un suivi.Click Insert Tracer.

  4. Affichez la durée calendaire pour le jeton de suivi dans les colonnes suivantes : Du serveur de publication vers le serveur de distribution, Du serveur de distribution vers l’Abonné, Latence totale.View elapsed time for the tracer token in the following columns: Publisher to Distributor, Distributor to Subscriber, Total Latency. Une valeur En attente indique que le jeton n'a pas atteint un point donné.A value of Pending indicates that the token has not reached a given point.

Pour afficher les informations d'un jeton de suivi inséré précédemmentTo view information on a tracer token inserted previously

  1. Développez un groupe de serveurs de publication dans le volet gauche, développez un serveur de publication, puis cliquez sur une publication.Expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. Cliquez sur l'onglet Jetons de suivi .Click the Tracer Tokens tab.

  3. Sélectionnez une heure dans la liste déroulante Heure de l'insertion .Select a time from the Time inserted drop-down list.

  4. Affichez la durée calendaire pour le jeton de suivi dans les colonnes suivantes : Du serveur de publication vers le serveur de distribution, Du serveur de distribution vers l’Abonné, Latence totale.View elapsed time for the tracer token in the following columns: Publisher to Distributor, Distributor to Subscriber, Total Latency. Une valeur En attente indique que le jeton n'a pas atteint un point donné.A value of Pending indicates that the token has not reached a given point.

    Notes

    Les informations de jeton de suivi sont conservées pour la même durée que toute autre donnée d'historique, elles-mêmes étant régies par la période de rétention des historiques définie dans la base de données de distribution.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. Pour plus d’informations sur la modification des propriétés de base de données de distribution, consultez Afficher et modifier les propriétés d’un serveur de distribution ou d’un serveur de publication.For information about changing distribution database properties, see View and Modify Distributor and Publisher Properties.

Utilisation de Transact-SQLUsing Transact-SQL

Pour publier un jeton de suivi sur une publication transactionnelleTo post a tracer token to a transactional publication

  1. (Facultatif) Dans la base de données de publication sur le serveur de publication, exécutez sp_helppublication (Transact-SQL).(Optional) At the Publisher on the publication database, execute sp_helppublication (Transact-SQL). Vérifiez que la publication existe et que l'état est actif.Verify that the publication exists and that the status is active.

  2. (Facultatif) Dans la base de données de publication sur le serveur de publication, exécutez sp_helpsubscription (Transact-SQL).(Optional) At the Publisher on the publication database, execute sp_helpsubscription (Transact-SQL). Vérifiez que l'abonnement existe et que l'état est actif.Verify that the subscription exists and that the status is active.

  3. Dans la base de données du serveur de publication sur le serveur de publication, exécutez sp_posttracertoken (Transact-SQL), en spécifiant @publication.At the Publisher on the publication database, execute sp_posttracertoken (Transact-SQL), specifying @publication. Notez la valeur du paramètre de sortie @tracer_token_id.Note the value of the tracer_token_id output parameter.

Pour déterminer la latence et valider les connexions d'une publication transactionnelleTo determine latency and validate connections for a transactional publication

  1. Publiez un jeton de suivi sur la publication à l'aide de la procédure précédente.Post a tracer token to the publication using the previous procedure.

  2. Dans la base de données du serveur de publication sur le serveur de publication, exécutez sp_helptracertokens (Transact-SQL), en spécifiant @publication.At the Publisher on the publication database, execute sp_helptracertokens (Transact-SQL), specifying @publication. La liste de tous les jetons de suivi publiés sur la publication est ainsi retournée.This returns a list of all tracer tokens posted to the publication. Notez le tracer_id désiré dans le jeu de résultats.Note the desired tracer_id in the result set.

  3. Dans la base de données du serveur de publication sur le serveur de publication, exécutez sp_helptracertokenhistory (Transact-SQL), en spécifiant @publication et l’ID du jeton de suivi obtenu à l’étape 2 pour @tracer_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. Les informations de latence pour le jeton de suivi sélectionné sont ainsi retournées.This returns latency information for the selected tracer token.

Pour supprimer les jetons de suiviTo remove tracer tokens

  1. Dans la base de données du serveur de publication sur le serveur de publication, exécutez sp_helptracertokens (Transact-SQL), en spécifiant @publication.At the Publisher on the publication database, execute sp_helptracertokens (Transact-SQL), specifying @publication. La liste de tous les jetons de suivi publiés sur la publication est ainsi retournée.This returns a list of all tracer tokens posted to the publication. Notez tracer_id pour le jeton de suivi à supprimer dans le jeu de résultats.Note the tracer_id for the tracer token to delete in the result set.

  2. Dans la base de données du serveur de publication sur le serveur de publication, exécutez sp_deletetracertokenhistory (Transact-SQL), en spécifiant @publication et l’ID du jeton de suivi à supprimer obtenu à l’étape 2 pour @tracer_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.

Exemple (Transact-SQL)

Example (Transact-SQL)
Cet exemple publie un enregistrement de jeton de suivi et utilise l'ID retourné du jeton de suivi publié pour consulter les informations de latence.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

Utilisation d'objets RMO (Replication Management Objects)

Using Replication Management Objects (RMO)

Pour publier un jeton de suivi sur une publication transactionnelleTo post a tracer token to a transactional publication

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Créez une instance de la classe TransPublication.Create an instance of the TransPublication class.

  3. Définissez les propriétés Name et DatabaseName de la publication, et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.Call the LoadProperties method to get the properties of the object. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l’étape 3, soit la publication n’existe pas.If this method returns false, either the publication properties in step 3 were defined incorrectly or the publication does not exist.

  5. Appelez la méthode PostTracerToken .Call the PostTracerToken method. Cette méthode insère un jeton de suivi dans le journal des transactions de la publication.This method inserts a tracer token into the publication's transaction log.

Pour déterminer la latence et valider les connexions d'une publication transactionnelleTo determine latency and validate connections for a transactional publication

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .Create a connection to the Distributor by using the ServerConnection class.

  2. Créez une instance de la classe PublicationMonitor.Create an instance of the PublicationMonitor class.

  3. Définissez les propriétés Name, DistributionDBName, PublisherName, et PublicationDBName , et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.Set the Name, DistributionDBName, PublisherName, and PublicationDBName properties, and set the ConnectionContext property to the connection created in step 1.

  4. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.Call the LoadProperties method to get the properties of the object. Si cette méthode retourne false, soit les propriétés de surveillance de la publication ont été définies de manière incorrecte à l'étape 3, soit la publication n'existe pas.If this method returns false, either the publication monitor properties in step 3 were defined incorrectly or the publication does not exist.

  5. Appelez la méthode EnumTracerTokens .Call the EnumTracerTokens method. Effectuez un cast de l'objet ArrayList retourné en un tableau d'objets TracerToken .Cast the returned ArrayList object to an array of TracerToken objects.

  6. Appelez la méthode EnumTracerTokenHistory .Call the EnumTracerTokenHistory method. Passez une valeur de TracerTokenId pour un jeton de suivi de l'étape 5.Pass a value of TracerTokenId for a tracer token from step 5. Les informations de latence pour le jeton de suivi sélectionné sont ainsi retournées comme objet DataSet .This returns latency information for the selected tracer token as a DataSet object. Si toutes les informations de jeton de suivi sont retournées, la connexion entre le serveur de publication et le serveur de distribution et la connexion entre le serveur de distribution et l'Abonné existent et la topologie de réplication fonctionne.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.

Pour supprimer les jetons de suiviTo remove tracer tokens

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .Create a connection to the Distributor by using the ServerConnection class.

  2. Créez une instance de la classe PublicationMonitor.Create an instance of the PublicationMonitor class.

  3. Définissez les propriétés Name, DistributionDBName, PublisherName, et PublicationDBName , et définissez la propriété ConnectionContext avec la connexion créée à l'étape 1.Set the Name, DistributionDBName, PublisherName, and PublicationDBName properties, and set the ConnectionContext property to the connection created in step 1.

  4. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.Call the LoadProperties method to get the properties of the object. Si cette méthode retourne false, soit les propriétés de surveillance de la publication ont été définies de manière incorrecte à l'étape 3, soit la publication n'existe pas.If this method returns false, either the publication monitor properties in step 3 were defined incorrectly or the publication does not exist.

  5. Appelez la méthode EnumTracerTokens .Call the EnumTracerTokens method. Effectuez un cast de l'objet ArrayList retourné en un tableau d'objets TracerToken .Cast the returned ArrayList object to an array of TracerToken objects.

  6. Appelez la méthode CleanUpTracerTokenHistory .Call the CleanUpTracerTokenHistory method. Passez l'une des valeurs suivantes :Pass one of the following values:

    • TracerTokenId pour un jeton de suivi de l'étape 5.The TracerTokenId for a tracer token from step 5. Les informations d'un jeton sélectionné sont alors supprimées.This deletes information for a selected token.

    • Objet DateTime .A DateTime object. Les informations pour tous les jetons plus anciens que les date et heure spécifiées sont alors supprimées.This deletes information for all tokens older than the specified date and time.