Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Interni di replica transazionale di SQL Server – Parte 2

Replica transazionale di SQL Server è una delle tecniche di replica più comunemente utilizzate per copiare o distribuire dati su più destinazioni. Nell'articolo precedente, abbiamo discusso della replica di SQL Server, dei tipi di replica e degli interni di base sul funzionamento della replica transazionale. Ora ci addentreremo in Advanced Internals su come funziona la replica transazionale di SQL Server.

Architettura di replica transazionale

Prima di iniziare, ti consiglio di aggiornare le tue conoscenze con il mio precedente articolo qui.

Iniziamo esaminando l'architettura di replica transazionale di SQL Server mostrata di seguito dalla documentazione Microsoft.

Nel database degli editori , crea una Pubblicazione che comprende l'elenco di Articoli (Tabelle , Viste , ecc.,) che devi replicare all'Abbonato Banca dati. Una volta che gli articoli sono stati abilitati per la replica, tutte le modifiche apportate a questi articoli verranno contrassegnate per la replica nel database dei registri transazionali del publisher.

La replica transazionale di SQL Server può essere inizializzata da Publisher al Distributore e poi all'Abbonato database tramite Agente Snapshot o Completo Backup . L'agente snapshot può eseguire l'inizializzazione tramite la Configurazione guidata replica . Il backup completo è supportato solo tramite istruzioni T-SQL.

L'Agente per la lettura dei registri esegue la scansione del registro transazionale del database di Publisher per rilevare le modifiche rilevate contrassegnate per la replica. Ignora le altre modifiche acquisite nei registri transazionali e copia le modifiche ai dati dal registro transazionale al database di distribuzione.

Il database di distribuzione può trovarsi in Publisher o Subscriber oppure in un'altra istanza di SQL Server indipendente. Nota le seguenti cose:

  • L'agente di lettura log viene eseguito continuamente dal server di distribuzione per cercare nuovi comandi contrassegnati per la replica. Tuttavia, se non si desidera eseguire continuamente e si desidera invece eseguire in base a una pianificazione, è possibile modificare il processo SQL dell'agente di lettura log che verrà creato.
  • L'agente di lettura log preleva tutti i record contrassegnati per la replica dai batch di log transazionali e li invia al database di distribuzione.
  • L'agente di lettura registro preleva solo le transazioni impegnate dal registro transazionale del database dell'editore. Pertanto, qualsiasi query di lunga durata sul database di Publisher può influire direttamente sulla replica in attesa del completamento della transazione attiva.

L'agente di distribuzione raccoglie tutti i nuovi comandi non distribuiti dal database di distribuzione e li applica al database di sottoscrizione tramite Push o Tira Meccanismo .

  • Abbonamento push – il Distributore assume la proprietà di applicare le modifiche dal database di distribuzione all'abbonato.
  • Ritira abbonamento – l'Abbonato il database assume la proprietà di recuperare le modifiche dal database di distribuzione all'abbonato.

Una volta che i record sono stati distribuiti correttamente dalla distribuzione al database degli abbonati, verranno contrassegnati come Distribuiti e contrassegnato anche per la eliminazione dal database di distribuzione .

Uno dei lavori di manutenzione della replica chiave è Pulizia distribuzione :il processo di distribuzione viene eseguito ogni 10 minuti per eliminare i record distribuiti dal database di distribuzione per mantenere sotto controllo le dimensioni del database di distribuzione.

Pertanto, il nostro obiettivo per l'articolo corrente è esplorare i seguenti argomenti:

  • Database di distribuzione
  • Agenti di replica
    • Agente Snapshot
    • Agente per la lettura dei registri
    • Agente di distribuzione
  • Profili agente di replica
  • Lavori di manutenzione della replica
  • Latenza di replica e token di traccia
  • Utilità TableDiff
  • Avvisi di SQL Server Agent

Database di distribuzione di SQL Server

Un database di distribuzione è un database di sistema creato durante la configurazione della replica. È il cuore della replica poiché la maggior parte del processo esaurisce un database di distribuzione.

A causa della natura del database di distribuzione, possiamo eseguire solo operazioni limitate su di esso, come il backup e il ripristino. Non possiamo rilasciarlo direttamente come i database degli utenti.

Per un database enorme con molti dati da replicare, è necessario adottare alcune misure speciali per migliorare le prestazioni del throughput di replica:

Per impostazione predefinita, il database di distribuzione viene creato nel percorso di installazione predefinito configurato in SQL Server . Se non è configurato, verrà creato su C : unità o nelle cartelle di installazione di SQL Server. Ti consigliamo di spostare il database di distribuzione su uno spazio di archiviazione/disco più veloce per migliorare le prestazioni.

La dimensione del file iniziale e Autocrescita del database di distribuzione verrà impostato in base alle impostazioni di Dimensione file iniziale e Crescita automatica del database modello. Configurare la dimensione del file iniziale su un valore migliore come 10 GB in caso di replica del database con traffico transazionale. Le proprietà Autogrowth devono essere fino a 512 MB o 1 GB sia per i file di dati che per i file di registro. Quindi, non ci sarà molta frammentazione nei dati e nei file di registro.

Configura il Giornaliero o Lavori di backup di routine includere il database di distribuzione a scopo di riferimento o risoluzione dei problemi in caso di danneggiamento o perdita di dati.

Configura la Riorganizzazione giornaliera dell'indice o Manutenzione lavori per includere il database di distribuzione. Il database prevede enormi inserimenti di dati nelle MSrepl_transactions e MSrepl_commands tabelle.

Nota:il polling continuo su queste 2 tabelle ed ELIMINA da esse dopo aver inviato correttamente i dati al database dell'abbonato aumenta il rischio di frammentazione. La ricostruzione di queste tabelle su base pianificata può migliorare le prestazioni del database di distribuzione.

Per visualizzare e modificare qualsiasi attributo del database di distribuzione relativo alla replica, fare clic con il pulsante destro del mouse su Replica > Proprietà del distributore :

Fare clic sui puntini di sospensione pulsante a destra per visualizzare maggiori dettagli sulle singole opzioni elencate.

Prestare attenzione, la modifica di qualsiasi parametro può influire sulle prestazioni del database di distribuzione. Quindi, implementa le modifiche solo dopo aver valutato attentamente tutti i parametri che desideri modificare.

Conservazione delle transazioni specifica la quantità di dati da conservare nel database di distribuzione. I valori minimo e massimo possono essere specificati in ore o giorni.

Il valore di conservazione della transazione impostato su 0 ore indica che una volta che i record sono stati replicati correttamente nel database dell'abbonato, possono essere eliminati dal database di distribuzione. Se si aumenta questo valore, la dimensione del database di distribuzione aumenterà. Quindi, dobbiamo pianificarlo di conseguenza.

Conservazione della cronologia specifica il periodo di conservazione per archiviare i dati della cronologia delle prestazioni della replica transazionale. Per impostazione predefinita, è 48 ore.

Per eliminare un database di distribuzione , dobbiamo Disabilitare la pubblicazione associato a quel particolare database di distribuzione e quindi eliminarlo utilizzando uno dei due metodi. Uno è una combinazione di Disattiva pubblicazione e la procedura guidata di distribuzione. Un altro sta usando sp_dropdistributor o sp_dropdistributiondb procedure. La procedura guidata utilizza internamente queste 2 procedure per disabilitare la distribuzione ed eliminare il database di distribuzione.

Agenti di replica di SQL Server

Agenti di replica sono programmi autonomi responsabili del rilevamento delle modifiche ai dati dall'editore e della propagazione di tali modifiche ai database del distributore e dell'abbonato. Vengono eseguiti come processi di SQL Server Agent.

Per prima cosa, vediamo la posizione di questi programmi autonomi.

Per configurare la replica, è necessario disporre dei componenti di replica installato tramite il programma di installazione di SQL Server. Al termine, possiamo vedere i programmi autonomi relativi all'agente di replica disponibili nel percorso di installazione:

C:\Programmi\Microsoft SQL Server\130\COM

Nel mio caso, la versione della versione di SQL Server è 2016. Pertanto, è inferiore a 130 nel percorso.

Per ogni agente di replica, possiamo vedere il rispettivo programma autonomo disponibile:

  • DISTRIB.exe – Agente di distribuzione
  • Logread.exe – Agente di lettura log
  • Qrdrsvc.exe – Agente del servizio di lettura code
  • Replmerg.exe – Agente di replica unire
  • Snapshot.exe – Agente snapshot
  • Tablediff.exe – Utilità per confrontare le tabelle. Possiamo entrare in maggiori dettagli più avanti in questo articolo.

Ora che sappiamo di cosa sono responsabili questi programmi autonomi e dove si trovano, possiamo capire come vengono eseguiti tramite i processi di SQL Server Agent.

Poiché abbiamo a che fare con la replica transazionale di SQL Server, esamineremo i processi dell'agente snapshot, dell'agente di lettura log e dell'agente di distribuzione (la stessa logica si applica a tutti gli altri agenti).

Agente Snapshot

L'agente snapshot viene eseguito dal server che contiene il database di distribuzione. Prepara lo schema e i dati iniziali di tutti gli articoli inclusi in una pubblicazione su un editore, crea i file snapshot nella cartella snapshot e registra i dettagli di sincronizzazione nel database di distribuzione.

Dalla distribuzione MSSnapshot_agents tabella, possiamo identificare il processo di SQL Server Agent che esegue le attività dell'agente snapshot. Ogni pubblicazione prevede un processo di SQL Server Agent dedicato che deve occuparsi delle responsabilità dell'agente snapshot.

Espandi Agente SQL Server e apri il nome del lavoro menzionato sopra. Verranno visualizzati i dettagli e la Categoria nome – Istantanea REPL

Fai clic sul Passo per vedere le attività eseguite dall'agente Snapshot.

Fare clic su un singolo passaggio per visualizzare le informazioni sul lavoro dell'agente snapshot.

Passaggio 1 registra una voce nella tabella della cronologia ogni volta che l'agente snapshot viene avviato utilizzando sp_MSadd_snapshot_history procedura.

La tabella che contiene la cronologia dei dettagli eseguiti dall'agente Snapshot è MSsnapshot_history tabella nel database di distribuzione.

Corrisponderà a Visualizza lo stato dell'agente snapshot finestra di dialogo.

Passa al Passaggio 2Esegui agente . avvierà il processo di Snapshot Agent .

Sotto il comando , non siamo riusciti a trovare alcuna istruzione o query T-SQL. C'erano solo alcuni parametri elencati. Quindi, la risposta si trova nella sezione evidenziata nell'illustrazione sopra. Mostra che la Fase di lavoroTipo è Istantanea della replica che avvia il programma autonomo snapshot.exe per svolgere le responsabilità di Snapshot Agent.

Per ulteriori dettagli su snapshot.exe, fare riferimento a questo articolo MSDN. Analizzeremo anche i dettagli durante la risoluzione dei problemi relativi alla replica in seguito.

Infine, andremo al Passaggio 3 – l'ultimo passaggio di lavoro. Acquisisce eventuali arresti imprevisti dei lavori agente e li disconnette.

Agente per la lettura dei registri

Ogni volta che la pubblicazione è configurata su un database, tutte le modifiche che si verificano a quegli articoli vengono contrassegnate per la replica nel registro delle transazioni. L'agente di lettura log legge le modifiche ai dati tramite logread.exe e le archivia nel database di distribuzione tramite 2 processi separati:

  • Leggi i log delle transazioni – utilizza sp_replcmds stored procedure estesa per eseguire la scansione delle modifiche ai dati dall'editore. Poiché questa procedura memorizzata fa riferimento ai file DLL, gli elementi interni su come Microsoft legge esattamente i file di registro non vengono identificati. Tuttavia, possiamo provare funzioni non documentate come fn_dblog() e fn_dump_dblog() per capire come funziona il file di Log Transazionale.
  • Scrivi nel database di distribuzione – utilizza sp_MSadd_replcmds stored procedure nel database di distribuzione per scrivere i dati binari letti dai registri transazionali del database di Publisher. Scrive i dettagli della transazione in MSrepl_transactions tabella e singoli comandi a MSrepl_commands tabella.

È disponibile un solo processo di SQL Server Agent di Log Reader per ogni database pubblicato. Puoi identificarne il nome come mostrato di seguito:

Espandere SQL Server Agent e aprire il processo di Log Reader Agent sopra per visualizzare i passaggi. Verrà visualizzata la Categoria del lavoro in Lettore registro di replica.

Fai clic su Passaggi per vedere i singoli passaggi eseguiti dall'agente di lettura log. Come per il lavoro di Snapshot Agent, possiamo vedere 3 passaggi equivalenti per il lavoro di Log Reader Agent.

Passaggio 1 chiama la sp_MSadd_logreader_history procedura per registrare i messaggi della cronologia dello stato di avvio di Log Reader Agent in MSlogreader_history tabella.

Passaggio 2 avvia il processo di Log Reader Agent utilizzando il programma autonomo logread.exe .

Puoi trovare maggiori dettagli su logread.exe nel rispettivo articolo MSDN. Successivamente, esamineremo anche i parametri di configurazione critici dell'agente di lettura log.

Passaggio 3 acquisisce un arresto improvviso del processo di Log Reader Agent.

Agente di distribuzione

L'agente di distribuzione (DISTRIB.exe) è stato utilizzato da Transactional and Snapshot Replication per applicare i file snapshot iniziali e aumentare o applicare le transazioni in sospeso disponibili dal database di distribuzione al database dell'abbonato.

Questo agente viene eseguito dal server del distributore per gli abbonamenti push e dal server dell'abbonato per gli abbonamenti pull. Per trovare il nome del processo di SQL Server Agent che esegue le responsabilità dell'agente di distribuzione, possiamo eseguire la query specifica come mostrato di seguito:

Espandi il processo di SQL Server Agent e aprilo per visualizzare ulteriori informazioni e la categoria assegnata alla distribuzione della replica.

Fai clic su Passaggi – vedrai i passaggi simili ai passaggi precedentemente esposti dei lavori Snapshot e Log Reader Agent.

Passaggio 1 chiama la sp_MSadd_distribution_history procedura per registrare i messaggi della cronologia dello stato di avvio dell'agente di lettura log in MSdistribution_history tabella.

Passaggio 2 avvia il processo dell'agente di distribuzione (DISTRIB.exe) con i parametri predefiniti.

Per ulteriori dettagli su DISTRIB.exe, vedere l'articolo MSDN. Inoltre, esamineremo i parametri di configurazione critici dell'agente di distribuzione nei prossimi articoli.

Passaggio 3 acquisisce i dettagli sull'arresto improvviso del lavoro dell'agente di distribuzione.

Profili agente di replica

Dalle Proprietà del distributore , possiamo avere la possibilità di visualizzare i profili agente di replica . Lascia i profili agente sui valori predefiniti e modifica solo se necessario per la risoluzione dei problemi.

Fai clic su Impostazioni predefinite del profilo per visualizzare i valori predefiniti configurati per tutti gli agenti di replica disponibili nel server.

Seleziona gli Agenti di distribuzione sezione e fai clic sui puntini di sospensione accanto al Profilo agente predefinito per vedere i valori configurati. Vedi l'illustrazione qui sotto:

Visualizza il Profilo agente predefinito degli agenti snapshot agente lettore:

Profilo agente predefinito per il Lettore di log Agente:

Lavori di manutenzione della replica

Oltre agli agenti di replica, abbiamo Lavori di manutenzione della replica .

Si tratta di processi di SQL Server Agent creati durante la configurazione della replica transazionale di SQL Server. Sono disponibili per garantire che la replica transazionale funzioni correttamente.

Alcuni lavori sulla manutenzione della replica sono essenziali per la replica transazionale. Esaminiamoli.

  • Pulizia della distribuzione: Distribuzione – esegue sp_MSdistribution_cleanup procedura per eliminare i comandi di replica da MSrepl_transactions e MSrepl_commands tavoli. La pulizia viene eseguita sul database di distribuzione dopo che i comandi sono stati inviati correttamente al database dell'abbonato in base al valore del periodo di conservazione della transazione configurato nel database di distribuzione. Per impostazione predefinita, questo lavoro viene eseguito ogni 10 minuti nel database di distribuzione. Modifica questi valori solo dopo una valutazione approfondita.
  • Agente Ripulitura della cronologia:distribuzione – esegue sp_MShistory_cleanup procedura nel database di distribuzione per ripulire i record storici precedenti al periodo di conservazione della cronologia configurato in quel database. Per impostazione predefinita, è configurato per 48 giorni ed eseguito ogni 10 minuti. Se desideri modificare questi valori, considera attentamente tutti gli aspetti.
  • Scaduto Ripulitura dell'abbonamento – esegue la sp_expired_subscription_cleanup procedura nel database master per eliminare gli abbonamenti scaduti o inattivi da molto tempo. Per impostazione predefinita, questa procedura viene eseguita una volta al giorno.

Latenza di replica e token di traccia

Latenza di replica è il tempo richiesto dal processo di replica per tenere traccia di eventuali modifiche avvenute sugli articoli pubblicati dal database dell'editore fino a quando non vengono consegnati correttamente all'abbonato tramite il distributore.

La latenza di replica viene misurata in millisecondi. Il valore target da 0 (replica in tempo reale) a un valore molto basso (casi ideali). È una delle misure chiave per monitorare le prestazioni della replica.

Possiamo verificare la latenza di replica utilizzando Replication Monitor o gli sp_replcounters dedicati procedura.

Dal Monitoraggio repliche ha l'aggiornamento tasso, potrebbero esserci leggere deviazioni dai valori osservati. Per superare le lievi deviazioni durante il calcolo della latenza di replica, i token traccianti vengono in nostro soccorso.

Fai clic sui Token traccianti scheda (vedi l'immagine sopra) per inviare una nuova serie di comandi di prova dall'editore. Quindi, misuralo quando raggiunge il database del distributore e quando è stato inviato al database dell'abbonato. Fare clic su Inserisci tracciante per inviare token di traccia dal database del publisher:

Una volta che i record sono stati ricevuti correttamente in Subscriber, possiamo tenere traccia della latenza di replica totale per la nostra configurazione attuale. Nel nostro caso, sono 9 secondi:4 secondi dall'editore al distributore e 5 secondi dal distributore all'abbonato.

Utilità Tablediff

Utility Tablediff(tablediff.exe) verrà installato nel percorso C:\Programmi\Microsoft SQL Server\130\COM una volta installati i componenti di replica.

L'utilità TableDiff confronta 2 tabelle per la non convergenza. Significa che possiamo confrontare 2 tabelle e identificare le differenze tra loro. Quindi sincronizza la tabella di destinazione rispetto alla tabella di origine generando script INSERT/UPDATE/DELETE dedicati. Maggiori dettagli sono disponibili nella documentazione ufficiale.

Poiché la replica transazionale di SQL Server non si preoccupa delle modifiche manuali nel database dell'abbonato, questa utilità può aiutare a sincronizzare questi tipi di tabelle come e quando richiesto. Tuttavia, non ha una procedura guidata o un'interfaccia utente:puoi accedervi solo tramite il prompt dei comandi o da file batch.

Altri strumenti possono semplificare il confronto e la sincronizzazione. Il bundle di confronto dbForge per SQL Server verifica le discrepanze nei database e nelle tabelle specifiche le identifica e le analizza. Genera anche gli script necessari per sincronizzarli. Offre un'interfaccia visiva e una serie di opzioni per eseguire le attività in modo rapido e semplice.

Avvisi di SQL Server Agent

Tutti i componenti chiave relativi agli agenti di replica risiedono mentre i processi risiedono nei processi di SQL Server Agent. Pertanto, è fondamentale monitorare continuamente il funzionamento dei processi di SQL Server Agent per garantire che la replica funzioni senza problemi. I problemi più comuni sono riportati di seguito:

  • Problemi di autorizzazione per l'esecuzione di qualsiasi processo dell'agente di replica
  • Problemi di autorizzazione per l'esecuzione di qualsiasi processo di manutenzione della replica.
  • Problemi con le autorizzazioni di accesso al database dell'editore o della distribuzione o degli abbonati.
  • SQL Server Agent non configurato per l'avvio automatico al riavvio del server.
  • Diversi altri problemi relativi ai dati relativi alla replica come conflitti, dati mancanti e così via.

Ecco perché dovremmo disporre di un adeguato meccanismo di allerta per informare immediatamente il DBA o un'altra persona in merito a qualsiasi problema.

Per avvisare i DBA o altre persone in caso di errori o errori di lavoro, è necessario configurare Database Mail per l'invio di avvisi e-mail. Consente al DBA di rispondere immediatamente e risolvere il problema. Discuteremo come configurare la posta e gli avvisi del database in un articolo separato più avanti.

Durante la configurazione della replica, per impostazione predefinita SQL Server crea il set di avvisi riportato di seguito. Puoi configurarli facilmente per i criteri richiesti. Garantisce inoltre l'invio di notifiche alle persone richieste per un'azione immediata.

Conclusione

Grazie per aver esaminato un altro enorme articolo sulla replica. Spero che abbia aiutato a chiarire gli interni della replica transazionale e i dettagli sul database di distribuzione, sugli agenti di replica e sui programmi autonomi responsabili di questi. Abbiamo anche identificato la latenza di replica, gli avvisi e i token di traccia.

Ora possiamo approfondire e imparare a trattare e risolvere i problemi di replica in modo professionale. Resta sintonizzato per il prossimo articolo!