Misurazione della latenza e convalida delle connessioni per la replica transazionaleMeasure Latency and Validate Connections for Transactional Replication

In questo argomento viene descritto come misurare le connessione di convalida e latenza per la replica transazionale in SQL Server 2017SQL Server 2017 tramite Monitoraggio replica, Transact-SQLTransact-SQLo RMO (Replication Management Objects).This topic describes how to measure latency and validate connections for transactional replication in SQL Server 2017SQL Server 2017 by using Replication Monitor, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). La replica transazionale offre la funzionalità token di traccia, che rappresenta una modalità pratica di misurazione della latenza nelle topologie di replica transazionale e di convalida delle connessioni tra server di pubblicazione, database di distribuzione e Sottoscrittori.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 token, ovvero una piccola quantità di dati, viene scritto nel log delle transazioni del database di pubblicazione, contrassegnato come se fosse una comune transazione replicata e inviato tramite il sistema in modo da consentire: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:

  • Il calcolo del tempo che trascorre tra l'esecuzione del commit di una transazione nel server di pubblicazione e l'inserimento del comando corrispondente nel database di distribuzione del server di distribuzione.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.

  • Il calcolo del tempo che trascorre tra l'inserimento di un comando nel database di distribuzione e l'esecuzione del commit della transazione corrispondente nel Sottoscrittore.How much time elapses between a command being inserted in the distribution database and the corresponding transaction being committed at a Subscriber.

    I risultati ottenuti da questi calcoli consentono all'utente di rispondere a una serie di domande, incluse le seguenti:From these calculations, you can answer a number of questions, including:

  • Quali Sottoscrittori hanno richiesto più tempo per ricevere una modifica dal server di pubblicazione?Which Subscribers take the longest to receive a change from the Publisher?

  • Tra i Sottoscrittori destinati a ricevere il token di traccia, quali non lo hanno eventualmente ricevuto?Of the Subscribers expected to receive the tracer token, which, if any, have not received it?

    Contenuto dell'argomentoIn This Topic

  • Prima di iniziare:Before you begin:

    Limitazioni e restrizioniLimitations and Restrictions

  • Per misurare la latenza e convalidare le connessioni, utilizzando:To measure latency and validate connections, using:

    Monitoraggio replica per SQL ServerSQL Server Replication Monitor

    Transact-SQLTransact-SQL

    oggetti RMO (Replication Management Objects)Replication Management Objects

Prima di iniziare Before You Begin

Limitazioni e restrizioni Limitations and Restrictions

I token di traccia possono inoltre essere utili quando si mette un sistema in stato di inattività, il che richiede l'arresto di tutte le attività e la verifica dell'avvenuta ricezione di tutte le modifiche in attesa da parte di tutti i nodi.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. Per altre informazioni, vedere Come mettere una topologia di replica in stato di inattività (programmazione Transact-SQL della replica).For more information, see Quiesce a Replication Topology (Replication Transact-SQL Programming).

Per utilizzare i token di traccia, è necessario utilizzare alcune versioni di MicrosoftMicrosoft SQL ServerSQL Server:To use tracer tokens, you must use certain versions of MicrosoftMicrosoft SQL ServerSQL Server:

  • Il database di distribuzione deve essere MicrosoftMicrosoft SQL Server 2005SQL Server 2005 o versione successiva.The Distributor must be MicrosoftMicrosoft SQL Server 2005SQL Server 2005 or later.

  • Il server di pubblicazione deve essere SQL Server 2005SQL Server 2005 o versione successiva, oppure deve essere un server di pubblicazione Oracle.The Publisher must be SQL Server 2005SQL Server 2005 or later or be an Oracle Publisher.

  • Per le sottoscrizioni push, le statistiche dei token di traccia vengono raccolte dal server di pubblicazione, dal server di distribuzione e dai Sottoscrittori se il Sottoscrittore è MicrosoftMicrosoft SQL ServerSQL Server 7.0 o versione successiva.For push subscriptions, tracer token statistics are gathered from the Publisher, Distributor, and Subscribers if the Subscriber is MicrosoftMicrosoft SQL ServerSQL Server 7.0 or later.

  • Per le sottoscrizioni pull, le statistiche dei token di traccia vengono raccolte dai soli Sottoscrittori se il Sottoscrittore è SQL Server 2005SQL Server 2005 o versione successiva.For pull subscriptions, tracer token statistics are gathered from Subscribers only if the Subscriber is SQL Server 2005SQL Server 2005 or later. Se il Sottoscrittore è SQL ServerSQL Server 7.0 o MicrosoftMicrosoft SQL Server 2000SQL Server 2000, le statistiche vengono raccolte solo dal server di pubblicazione e dal server di distribuzione.If the Subscriber is SQL ServerSQL Server 7.0 or MicrosoftMicrosoft SQL Server 2000SQL Server 2000, statistics are gathered only from the Publisher and Distributor.

    È inoltre necessario considerare altre problematiche e limitazioni, ovvero:There are also a number of other issues and restrictions to be aware of:

  • Per poter ricevere un token di traccia, le sottoscrizioni devono essere attive.Subscriptions must be active to receive a tracer token. Una sottoscrizione è attiva se è stata inizializzata.A subscription is active if it has been initialized.

  • La reinizializzazione elimina i token di traccia in sospeso per le relative sottoscrizioni.Reinitialization removes any pending tracer tokens for the relevant subscriptions.

  • I Sottoscrittori ricevono solo i token di traccia creati dopo la sincronizzazione iniziale.Subscribers only receive tracer tokens that were created after their initial synchronization.

  • I token di traccia non vengono inoltrati dai Sottoscrittori di ripubblicazione.Tracer tokens are not forwarded by republishing Subscribers.

  • Dopo il failover a un database secondario, Monitoraggio replica non è in grado di regolare il nome dell'istanza di pubblicazione di SQL ServerSQL Server e continuerà a visualizzare informazioni sulla replica con il nome dell'istanza primaria originale di SQL ServerSQL Server.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. Dopo il failover, non è possibile immettere un token di traccia tramite Monitoraggio replica, nondimeno un token di traccia immesso nel nuovo server di pubblicazione tramite Transact-SQLTransact-SQLè visibile in Monitoraggio replica.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.

Utilizzo di Monitoraggio replica per SQL Server Using SQL Server Replication Monitor

Per informazioni sull'avvio di Monitoraggio replica, vedere Avviare Monitoraggio replica.For information about starting Replication Monitor, see Start the Replication Monitor.

Per inserire un token di traccia e visualizzarne le informazioniTo insert a tracer token and view information on the token

  1. Espandere un gruppo di server di pubblicazione nel riquadro sinistro, espandere un server di pubblicazione e quindi fare clic su una pubblicazione.Expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. Fare clic sulla scheda Token di traccia .Click the Tracer Tokens tab.

  3. Fare clic su Inserisci utilità di traccia.Click Insert Tracer.

  4. Visualizzare il tempo trascorso per il token di traccia nelle colonne Dal server di pubblicazione al server di distribuzione, Dal server di distribuzione al Sottoscrittoree Latenza totale.View elapsed time for the tracer token in the following columns: Publisher to Distributor, Distributor to Subscriber, Total Latency. Il valore In sospeso indica che il token non ha raggiunto un determinato punto.A value of Pending indicates that the token has not reached a given point.

Per visualizzare informazioni su un token di traccia inserito in precedenzaTo view information on a tracer token inserted previously

  1. Espandere un gruppo di server di pubblicazione nel riquadro sinistro, espandere un server di pubblicazione e quindi fare clic su una pubblicazione.Expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. Fare clic sulla scheda Token di traccia .Click the Tracer Tokens tab.

  3. Selezionare un'ora dall'elenco a discesa Ora di inserimento .Select a time from the Time inserted drop-down list.

  4. Visualizzare il tempo trascorso per il token di traccia nelle colonne Dal server di pubblicazione al server di distribuzione, Dal server di distribuzione al Sottoscrittoree Latenza totale.View elapsed time for the tracer token in the following columns: Publisher to Distributor, Distributor to Subscriber, Total Latency. Il valore In sospeso indica che il token non ha raggiunto un determinato punto.A value of Pending indicates that the token has not reached a given point.

    Nota

    Le informazioni sul token di traccia vengono mantenute per lo stesso periodo di tempo degli altri dati cronologici, ovvero in base all'impostazione del periodo di memorizzazione della cronologia del database di distribuzione.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. Per informazioni sulla modifica delle proprietà del database di distribuzione, vedere Visualizzare e modificare le proprietà del server di pubblicazione e del database di distribuzione.For information about changing distribution database properties, see View and Modify Distributor and Publisher Properties.

Utilizzo di Transact-SQL Using Transact-SQL

Per inviare un token di traccia a una pubblicazione transazionaleTo post a tracer token to a transactional publication

  1. (Facoltativo) Nel database di pubblicazione del server di pubblicazione eseguire sp_helppublication (Transact-SQL).(Optional) At the Publisher on the publication database, execute sp_helppublication (Transact-SQL). Verificare che la pubblicazione esista e che lo stato sia attivo.Verify that the publication exists and that the status is active.

  2. (Facoltativo) Nel database di pubblicazione del server di pubblicazione eseguire sp_helpsubscription (Transact-SQL).(Optional) At the Publisher on the publication database, execute sp_helpsubscription (Transact-SQL). Verificare che la sottoscrizione esista e che lo stato sia attivo.Verify that the subscription exists and that the status is active.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_posttracertoken (Transact-SQL) specificando @publication.At the Publisher on the publication database, execute sp_posttracertoken (Transact-SQL), specifying @publication. Tenere presente il valore del parametro di output @tracer_token_id .Note the value of the @tracer_token_id output parameter.

Per determinare la latenza e convalidare le connessioni per una pubblicazione transazionaleTo determine latency and validate connections for a transactional publication

  1. Inviare un token di traccia alla pubblicazione utilizzando la procedura precedente.Post a tracer token to the publication using the previous procedure.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_helptracertokens (Transact-SQL) specificando @publication.At the Publisher on the publication database, execute sp_helptracertokens (Transact-SQL), specifying @publication. Viene restituito un elenco di tutti i token di traccia inviati alla pubblicazione.This returns a list of all tracer tokens posted to the publication. Tenere presente il valore di tracer_id desiderato nel set di risultati.Note the desired tracer_id in the result set.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_helptracertokenhistory (Transact-SQL) specificando @publication e l'ID del token di traccia indicato nel passaggio 2 per @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. Vengono restituite le informazioni sulla latenza per il token di traccia selezionato.This returns latency information for the selected tracer token.

Per rimuovere token di tracciaTo remove tracer tokens

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helptracertokens (Transact-SQL) specificando @publication.At the Publisher on the publication database, execute sp_helptracertokens (Transact-SQL), specifying @publication. Viene restituito un elenco di tutti i token di traccia inviati alla pubblicazione.This returns a list of all tracer tokens posted to the publication. Tenere presente il valore di tracer_id del token di traccia da eliminare nel set di risultati.Note the tracer_id for the tracer token to delete in the result set.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_deletetracertokenhistory (Transact-SQL) specificando @publication e l'ID del token di traccia da eliminare indicato nel passaggio 2 per @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.

Esempio (Transact-SQL) Example (Transact-SQL)

In questo esempio viene inserito un record di token di traccia e viene utilizzato l'ID restituito del token di traccia inviato per visualizzare le informazioni sulla latenza.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
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

Utilizzo di RMO (Replication Management Objects) Using Replication Management Objects (RMO)

Per inviare un token di traccia a una pubblicazione transazionaleTo post a tracer token to a transactional publication

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Creare un'istanza della classe TransPublication .Create an instance of the TransPublication class.

  3. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  4. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto.Call the LoadProperties method to get the properties of the object. Se questo metodo restituisce false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 3 oppure la pubblicazione non esiste.If this method returns false, either the publication properties in step 3 were defined incorrectly or the publication does not exist.

  5. Chiamare il metodo PostTracerToken .Call the PostTracerToken method. Questo metodo inserisce un token di traccia nel log delle transazioni della pubblicazione.This method inserts a tracer token into the publication's transaction log.

Per determinare la latenza e convalidare le connessioni per una pubblicazione transazionaleTo determine latency and validate connections for a transactional publication

  1. Creare una connessione al server di distribuzione tramite la classe ServerConnection .Create a connection to the Distributor by using the ServerConnection class.

  2. Creare un'istanza della classe PublicationMonitor .Create an instance of the PublicationMonitor class.

  3. Impostare le proprietà Name, DistributionDBName, PublisherNamee PublicationDBName , quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.Set the Name, DistributionDBName, PublisherName, and PublicationDBName properties, and set the ConnectionContext property to the connection created in step 1.

  4. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto.Call the LoadProperties method to get the properties of the object. Se questo metodo restituisce false, le proprietà di monitoraggio della pubblicazione sono state definite in modo non corretto nel passaggio 3 oppure la pubblicazione non esiste.If this method returns false, either the publication monitor properties in step 3 were defined incorrectly or the publication does not exist.

  5. Chiamare il metodo EnumTracerTokens .Call the EnumTracerTokens method. Eseguire il cast dell'oggetto ArrayList restituito in una matrice di oggetti TracerToken .Cast the returned ArrayList object to an array of TracerToken objects.

  6. Chiamare il metodo EnumTracerTokenHistory .Call the EnumTracerTokenHistory method. Passare un valore di TracerTokenId per un token di traccia indicato nel passaggio 5.Pass a value of TracerTokenId for a tracer token from step 5. Le informazioni sulla latenza per il token di traccia selezionato vengono restituite come oggetto DataSet .This returns latency information for the selected tracer token as a DataSet object. Se vengono restituite tutte le informazioni sul token di traccia, la connessione tra server di pubblicazione e server di distribuzione e la connessione tra server di distribuzione e Sottoscrittore esistono e la topologia di replica funziona correttamente.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.

Per rimuovere token di tracciaTo remove tracer tokens

  1. Creare una connessione al server di distribuzione tramite la classe ServerConnection .Create a connection to the Distributor by using the ServerConnection class.

  2. Creare un'istanza della classe PublicationMonitor .Create an instance of the PublicationMonitor class.

  3. Impostare le proprietà Name, DistributionDBName, PublisherNamee PublicationDBName , quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.Set the Name, DistributionDBName, PublisherName, and PublicationDBName properties, and set the ConnectionContext property to the connection created in step 1.

  4. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto.Call the LoadProperties method to get the properties of the object. Se questo metodo restituisce false, le proprietà di monitoraggio della pubblicazione sono state definite in modo non corretto nel passaggio 3 oppure la pubblicazione non esiste.If this method returns false, either the publication monitor properties in step 3 were defined incorrectly or the publication does not exist.

  5. Chiamare il metodo EnumTracerTokens .Call the EnumTracerTokens method. Eseguire il cast dell'oggetto ArrayList restituito in una matrice di oggetti TracerToken .Cast the returned ArrayList object to an array of TracerToken objects.

  6. Chiamare il metodo CleanUpTracerTokenHistory .Call the CleanUpTracerTokenHistory method. Passare uno dei valori seguenti:Pass one of the following values:

    • La proprietà TracerTokenId per un token di traccia indicato al passaggio 5.The TracerTokenId for a tracer token from step 5. Vengono eliminate le informazioni per un token selezionato.This deletes information for a selected token.

    • Oggetto DateTime .A DateTime object. Vengono eliminate le informazioni per tutti i token con data e ora precedenti a quelle specificate.This deletes information for all tokens older than the specified date and time.