Mesurer la latence et valider les connexions pour la réplication transactionnelle

S’applique à :SQL ServerAzure SQL Managed Instance

Cette rubrique explique comment mesurer la latence et valider les connexions pour la réplication transactionnelle dans SQL Server à l’aide du Moniteur de réplication, transact-SQL ou RMO (Replication Management Objects). 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. 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 :

  • 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 ;

  • 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é.

De par ces calculs, vous pouvez ainsi répondre à diverses questions, notamment :

  • Quels Abonnés mettent le plus longtemps à recevoir une modification du serveur de publication ?

  • 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 ?

Dans cette rubrique

Avant de commencer

Limitations et 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. Pour plus d’informations, consultez Suspension d’une topologie de réplication (programmation Transact-SQL de la réplication).

Pour utiliser des jetons de suivi, vous devez utiliser certaines versions de Microsoft SQL Server :

  • Le serveur de distribution doit être Microsoft SQL Server 2005 (9.x) ou version ultérieure.

  • Le serveur de publication doit être SQL Server 2005 (9.x) ou version ultérieure ou être un serveur de publication Oracle.

  • Pour les abonnements Push, les statistiques des jetons de suivi sont collectées à partir du serveur de publication, du serveur de distribution et des abonnés si l’Abonné est Microsoft SQL Server 7.0 ou version ultérieure.

  • Pour les abonnements par extraction, les statistiques des jetons de suivi sont collectées auprès des Abonnés uniquement si l’Abonné est SQL Server 2005 (9.x) ou version ultérieure. Si l’Abonné est SQL Server 7.0 ou Microsoft SQL Server 2000 (8.x), les statistiques sont collectées uniquement à partir du serveur de publication et du serveur de distribution.

Il existe aussi d'autres problèmes et restrictions à connaître :

  • Les abonnements doivent être actifs pour recevoir un jeton de suivi. Un abonnement est actif s'il a été initialisé.

  • La réinitialisation supprime tout jeton de suivi en suspens pour les abonnements concernés.

  • Les Abonnés ne reçoivent que les jetons de suivi créés après leur première synchronisation.

  • Les jetons de suivi ne sont pas retransmis par les Abonnés qui republient.

  • Après le basculement vers une instance secondaire, le Moniteur de réplication ne peut pas ajuster le nom de l’instance de publication de SQL Server et continue d’afficher les informations de réplication sous le nom de l’instance principale d’origine de SQL Server. Après le basculement, un jeton de suivi ne peut pas être entré en utilisant le Moniteur de réplication, toutefois un jeton de suivi entré sur le nouveau serveur de publication en utilisant Transact-SQL est visible dans le Moniteur de réplication.

Utilisation du Moniteur de réplication SQL Server

Pour plus d’informations sur le démarrage du Moniteur de réplication, consultez Démarrer le Moniteur de réplication.

Pour insérer un jeton de suivi et afficher des informations sur le jeton

  1. Développez un groupe de serveurs de publication dans le volet gauche, développez un serveur de publication, puis cliquez sur une publication.

  2. Cliquez sur l'onglet Jetons de suivi .

  3. Cliquez sur Insérer un suivi.

  4. Affichez le temps écoulé 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éet Latence totale. Une valeur En attente indique que le jeton n'a pas atteint un point donné.

Pour afficher les informations d'un jeton de suivi inséré précédemment

  1. Développez un groupe de serveurs de publication dans le volet gauche, développez un serveur de publication, puis cliquez sur une publication.

  2. Cliquez sur l'onglet Jetons de suivi .

  3. Sélectionnez une heure dans la liste déroulante Heure de l'insertion .

  4. Affichez le temps écoulé 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éet Latence totale. Une valeur En attente indique que le jeton n'a pas atteint un point donné.

    Remarque

    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. 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.

Utilisation de Transact-SQL

Pour publier un jeton de suivi sur une publication transactionnelle

  1. (Facultatif) Sur le serveur de publication sur la base de données de publication, exécutez sp_helppublication (Transact-SQL). Vérifiez que la publication existe et que l'état est actif.

  2. (Facultatif) Sur le serveur de publication sur la base de données de publication, exécutez sp_helpsubscription (Transact-SQL). Vérifiez que l'abonnement existe et que l'état est actif.

  3. Sur le serveur de publication sur la base de données de publication, exécutez sp_posttracertoken (Transact-SQL) en spécifiant @publication. Notez la valeur du paramètre de sortie @tracer_token_id .

Pour déterminer la latence et valider les connexions d'une publication transactionnelle

  1. Publiez un jeton de suivi sur la publication à l'aide de la procédure précédente.

  2. Sur le serveur de publication sur la base de données de publication, exécutez sp_helptracertokens (Transact-SQL), en spécifiant @publication. La liste de tous les jetons de suivi publiés sur la publication est ainsi retournée. Notez le tracer_id désiré dans le jeu de résultats.

  3. Sur le serveur de publication sur la base de données de publication, exécutez sp_helptracertokenhistory (Transact-SQL), en spécifiant @publication et l’ID de jeton de suivi de l’étape 2 pour @tracer_id. Les informations de latence pour le jeton de suivi sélectionné sont ainsi retournées.

Pour supprimer les jetons de suivi

  1. Sur le serveur de publication sur la base de données de publication, exécutez sp_helptracertokens (Transact-SQL), en spécifiant @publication. La liste de tous les jetons de suivi publiés sur la publication est ainsi retournée. Notez tracer_id pour le jeton de suivi à supprimer dans le jeu de résultats.

  2. Sur le serveur de publication sur la base de données de publication, exécutez sp_deletetracertokenhistory (Transact-SQL), en spécifiant @publication et l’ID du traceur à supprimer de l’étape 2 pour @tracer_id.

Exemple (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.

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

Utilisation d'objets RMO (Replication Management Objects)

Pour publier un jeton de suivi sur une publication transactionnelle

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .

  2. Créez une instance de la classe TransPublication.

  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.

  4. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet. 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.

  5. Appelez la méthode PostTracerToken . Cette méthode insère un jeton de suivi dans le journal des transactions de la publication.

Pour déterminer la latence et valider les connexions d'une publication transactionnelle

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .

  2. Créez une instance de la classe PublicationMonitor.

  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.

  4. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet. 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.

  5. Appelez la méthode EnumTracerTokens . Effectuez un cast de l'objet ArrayList retourné en un tableau d'objets TracerToken .

  6. Appelez la méthode EnumTracerTokenHistory . Passez une valeur de TracerTokenId pour un jeton de suivi de l'étape 5. Les informations de latence pour le jeton de suivi sélectionné sont ainsi retournées comme objet DataSet . 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.

Pour supprimer les jetons de suivi

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .

  2. Créez une instance de la classe PublicationMonitor.

  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.

  4. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet. 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.

  5. Appelez la méthode EnumTracerTokens . Effectuez un cast de l'objet ArrayList retourné en un tableau d'objets TracerToken .

  6. Appelez la méthode CleanUpTracerTokenHistory . Passez l'une des valeurs suivantes :

    • TracerTokenId pour un jeton de suivi de l'étape 5. Les informations d'un jeton sélectionné sont alors supprimées.

    • Objet DateTime. Les informations pour tous les jetons plus anciens que les date et heure spécifiées sont alors supprimées.