Misurare la latenza e convalidare le connessioni per la replica transazionale

Si applica a: SQL Server e Istanza gestita di SQL di Azure

Questo argomento descrive come misurare le connessioni di convalida e latenza per la replica transazionale in SQL Server tramite Monitoraggio replica, Transact-SQL o RMO (Replication Management Objects). 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. 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:

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

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

I risultati ottenuti da questi calcoli consentono all'utente di rispondere a una serie di domande, incluse le seguenti:

  • Quali Sottoscrittori hanno richiesto più tempo per ricevere una modifica dal server di pubblicazione?

  • Tra i Sottoscrittori destinati a ricevere il token di traccia, quali non lo hanno eventualmente ricevuto?

Contenuto dell'articolo

Prima di iniziare

Limitazioni e restrizioni

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. Per altre informazioni, vedere Come mettere una topologia di replica in stato di inattività (programmazione Transact-SQL della replica).

Per usare i token di traccia, sono necessarie alcune versioni di Microsoft SQL Server:

  • Il server di distribuzione deve essere Microsoft SQL Server 2005 (9.x) o versione successiva.

  • Il server di pubblicazione deve essere SQL Server 2005 (9.x) o versione successiva, oppure deve essere un server di pubblicazione Oracle.

  • 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 è Microsoft SQL Server 7.0 o versione successiva.

  • Per le sottoscrizioni pull, le statistiche dei token di traccia vengono raccolte dai soli Sottoscrittori se il Sottoscrittore è SQL Server 2005 (9.x) o versione successiva. Se il Sottoscrittore è SQL Server 7.0 o Microsoft SQL Server 2000 (8.x), le statistiche vengono raccolte solo dal server di pubblicazione e dal server di distribuzione.

È inoltre necessario considerare altre problematiche e limitazioni, ovvero:

  • Per poter ricevere un token di traccia, le sottoscrizioni devono essere attive. Una sottoscrizione è attiva se è stata inizializzata.

  • La reinizializzazione elimina i token di traccia in sospeso per le relative sottoscrizioni.

  • I Sottoscrittori ricevono solo i token di traccia creati dopo la sincronizzazione iniziale.

  • I token di traccia non vengono inoltrati dai Sottoscrittori di ripubblicazione.

  • Dopo il failover su una secondaria, Monitoraggio replica non è in grado di regolare il nome dell'istanza di pubblicazione di SQL Server e continuerà a visualizzare le informazioni sulla replica con il nome dell'istanza primaria originale di SQL Server. Dopo il failover non è possibile immettere un token di traccia tramite Monitoraggio replica, ma un token di traccia immesso nel nuovo server di pubblicazione tramite Transact-SQL è visibile in Monitoraggio replica.

Utilizzo di Monitoraggio replica per SQL Server

Per informazioni sull'avvio di Monitoraggio replica, vedere Avviare Monitoraggio replica.

Per inserire un token di traccia e visualizzarne le informazioni

  1. Espandere un gruppo di server di pubblicazione nel riquadro sinistro, espandere un server di pubblicazione e quindi fare clic su una pubblicazione.

  2. Fare clic sulla scheda Token di traccia .

  3. Fare clic su Inserisci utilità di traccia.

  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. Il valore In sospeso indica che il token non ha raggiunto un determinato punto.

Per visualizzare informazioni su un token di traccia inserito in precedenza

  1. Espandere un gruppo di server di pubblicazione nel riquadro sinistro, espandere un server di pubblicazione e quindi fare clic su una pubblicazione.

  2. Fare clic sulla scheda Token di traccia .

  3. Selezionare un'ora dall'elenco a discesa Ora di inserimento .

  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. Il valore In sospeso indica che il token non ha raggiunto un determinato punto.

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

Utilizzo di Transact-SQL

Per inviare un token di traccia a una pubblicazione transazionale

  1. (Facoltativo) Nel database di pubblicazione del server di pubblicazione eseguire sp_helppublication (Transact-SQL). Verificare che la pubblicazione esista e che lo stato sia attivo.

  2. (Facoltativo) Nel database di pubblicazione del server di pubblicazione eseguire sp_helpsubscription (Transact-SQL). Verificare che la sottoscrizione esista e che lo stato sia attivo.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_posttracertoken (Transact-SQL) specificando publication. Tenere presente il valore del parametro di output @tracer_token_id .

Per determinare la latenza e convalidare le connessioni per una pubblicazione transazionale

  1. Inviare un token di traccia alla pubblicazione utilizzando la procedura precedente.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_helptracertokens (Transact-SQL) specificando @publication. Viene restituito un elenco di tutti i token di traccia inviati alla pubblicazione. Tenere presente il valore di tracer_id desiderato nel set di risultati.

  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. Vengono restituite le informazioni sulla latenza per il token di traccia selezionato.

Per rimuovere token di traccia

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helptracertokens (Transact-SQL) specificando @publication. Viene restituito un elenco di tutti i token di traccia inviati alla pubblicazione. Tenere presente il valore di tracer_id del token di traccia da eliminare nel set di risultati.

  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.

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

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

Utilizzo di RMO (Replication Management Objects)

Per inviare un token di traccia a una pubblicazione transazionale

  1. Creare una connessione al server di pubblicazione tramite la classe ServerConnection .

  2. Creare un'istanza della classe TransPublication.

  3. Impostare le proprietà Name e DatabaseName per la pubblicazione, quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.

  4. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto. Se questo metodo restituisce false, le proprietà della pubblicazione sono state definite in modo non corretto nel passaggio 3 oppure la pubblicazione non esiste.

  5. Chiamare il metodo PostTracerToken . Questo metodo inserisce un token di traccia nel log delle transazioni della pubblicazione.

Per determinare la latenza e convalidare le connessioni per una pubblicazione transazionale

  1. Creare una connessione al server di distribuzione tramite la classe ServerConnection .

  2. Creare un'istanza della classe PublicationMonitor.

  3. Impostare le proprietà Name, DistributionDBName, PublisherNamee PublicationDBName , quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.

  4. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto. 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.

  5. Chiamare il metodo EnumTracerTokens . Eseguire il cast dell'oggetto ArrayList restituito in una matrice di oggetti TracerToken .

  6. Chiamare il metodo EnumTracerTokenHistory . Passare un valore di TracerTokenId per un token di traccia indicato nel passaggio 5. Le informazioni sulla latenza per il token di traccia selezionato vengono restituite come oggetto DataSet . 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.

Per rimuovere token di traccia

  1. Creare una connessione al server di distribuzione tramite la classe ServerConnection .

  2. Creare un'istanza della classe PublicationMonitor.

  3. Impostare le proprietà Name, DistributionDBName, PublisherNamee PublicationDBName , quindi impostare la proprietà ConnectionContext sulla connessione creata nel passaggio 1.

  4. Chiamare il metodo LoadProperties per recuperare le proprietà dell'oggetto. 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.

  5. Chiamare il metodo EnumTracerTokens . Eseguire il cast dell'oggetto ArrayList restituito in una matrice di oggetti TracerToken .

  6. Chiamare il metodo CleanUpTracerTokenHistory . Passare uno dei valori seguenti:

    • La proprietà TracerTokenId per un token di traccia indicato al passaggio 5. Vengono eliminate le informazioni per un token selezionato.

    • Oggetto DateTime. Vengono eliminate le informazioni per tutti i token con data e ora precedenti a quelle specificate.