Come posso risolvere i problemi relativi ai ritardi nella mia replica di lettura di RDS per SQL Server?
Ho un'istanza Amazon Relational Database Service (Amazon RDS) per Microsoft SQL Server con replica di lettura. Nella mia istanza database vedo uno dei seguenti elementi:
C'è un improvviso aumento del ritardo di replica. La modifica dell'istanza ha iniziato a causare un ritardo nella replica. Il database nell'istanza di replica di lettura non è accessibile.
Come posso risolvere questi problemi?
Breve descrizione
Amazon RDS per SQL Server Enterprise Edition supporta la creazione di una replica di lettura all'interno della stessa Regione. La replica dei dati è asincrona e utilizza la tecnologia Always-On per replicare i dati da un'istanza master a un'istanza di replica. RDS per SQL Server non interviene per ridurre il ritardo di replica elevato tra un'istanza database di origine e le relative repliche di lettura.
Risoluzione
1. Verifica l'utilizzo delle risorse sull'istanza master e sull'istanza di replica utilizzando Amazon CloudWatch. Utilizza le funzionalità di Monitoraggio avanzato e Approfondimenti sulle prestazioni per controllare l'utilizzo delle risorse a livello granulare.
Considerazioni importanti per le metriche sulle istanze master e di replica:
- Assicurati che l'utilizzo della CPU non sia limitato. Se stai eseguendo una classe di istanze a prestazioni espandibili, assicurati che i crediti CPU siano disponibili o che sia in esecuzione la modalità Illimitata.
- Assicurati che la memoria FreeableMemory sia sufficiente. Inoltre, assicurati che ReadIOPS e WriteIOPS stiano raggiungendo i limiti previsti. Verifica che sia disponibile un saldo di espansione sufficiente se stai usando un volume GP2. Per ulteriori informazioni, consulta la pagina Come posso risolvere i problemi relativi alla scarsa memoria che è possibile liberare nella mia istanza RDS per SQL Server?
- Assicurati che ReadThroughput e WriteThroughput non raggiungano i limiti della classe di istanza.
2. È consigliabile creare le istanze master e di replica con la stessa classe di istanza e lo stesso tipo di archiviazione e numero di IOPS. In questo modo si evitano i ritardi di replica dovuti alla mancanza di risorse nell'istanza di replica. Inoltre, a seconda del carico di lavoro, la replica di lettura può essere aumentata o ridotta se l'utilizzo è minimo rispetto all'istanza master.
3. Identifica l'intervallo di tempo in cui il ritardo di replica ha iniziato ad aumentare e quindi procedi come segue:
Controlla le metriche WriteIOPS, WriteThroughput, NetworkReceiveThroughput e NetworkTrasmitThroughput sull'istanza master in base all'ora di inizio del ritardo di replica. Determina se il ritardo è dovuto all'attività di scrittura. Controlla le stesse metriche nello stesso periodo di tempo sulla replica di lettura.
Verifica se sono presenti transazioni di lunga durata nell'istanza master. Di seguito è riportato un esempio di query per verificare lo stato delle transazioni attive:
SELECT * FROM sys.sysprocesses WHERE open_tran = 1;
4. Sull'istanza di replica, controlla se sono presenti attese di blocco o deadlock significativi. I deadlock si verificano tra le transazioni Select e DDL/DML e causano ritardi nell'applicazione dei registri delle transazioni dell'istanza master.
Di seguito è riportato un esempio di query per verificare l'eventuale presenza di blocchi:
SELECT * FROM sys.sysprocesses WHERE blocked > 0;
5. Query per verificare il ritardo di replica e il ritardo di replica massimo.
SELECT AR.replica_server_name , DB_NAME (ARS.database_id) 'database_name' , AR.availability_mode_desc , ARS.synchronization_health_desc , ARS.last_hardened_lsn , ARS.last_redone_lsn , ARS.secondary_lag_seconds FROM sys.dm_hadr_database_replica_states ARS INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id --WHERE DB_NAME(ARS.database_id) = 'database_name' ORDER BY AR.replica_server_name;
Verifica che il valore 'last_hardened_lsn' stia procedendo sulla replica di lettura.
Ritardo di replica massimo
Per SQL Server, la metrica ReplicaLag indica, in secondi, il ritardo massimo dei database che sono rimasti indietro. Ad esempio, se si dispone di due database con un ritardo rispettivamente di 5 e 10 secondi, ReplicaLag è di 10 secondi. La metrica ReplicaLag restituisce il valore della seguente query. Esegui la query sull'istanza master.
select max(secondary_lag_seconds) max_lag from sys.dm_hadr_database_replica_states;
6. Dopo aver avviato la creazione della replica di lettura, viene acquisito uno snapshot dell'istanza master e quindi ripristinato per creare un'istanza di replica di lettura. I registri delle transazioni vengono riprodotti per sincronizzare i dati con l'istanza master. Tuttavia, dopo aver creato una nuova istanza, tale istanza subisce un caricamento lento, che causa un ritardo nella replica. Questo è il comportamento previsto. Per ridurre al minimo l'effetto del caricamento lento, utilizza l'archiviazione di tipo IO1 durante la creazione della replica di lettura e quindi riconvertila in GP2, se necessario.
7. Esegui transazioni in batch sull'istanza master. Ciò evita l'esecuzione di transazioni lunghe e riduce al minimo le dimensioni del file di registro delle transazioni. Non riavviare l'istanza di replica a meno che non sia necessario durante un ritardo di replica elevato, poiché ciò ritarda ulteriormente la riproduzione dei registri delle transazioni.
8. La modifica della classe dell'istanza sull'istanza master o di replica potrebbe causare un ritardo temporaneo della replica. Questo è il comportamento previsto perché i registri vengono elaborati dall'istanza master.
La modifica del tipo di archiviazione o delle dimensioni dell'archiviazione ha un impatto più lungo sul ritardo della replica, fino al completamento dell'ottimizzazione dell'archiviazione. Non è possibile determinare la percentuale di ottimizzazione dell'archiviazione completata sulle istanze RDS.
9. Se la replica di lettura raggiunge lo stato di archiviazione completa, i registri delle transazioni dell'istanza master non vengono elaborati e il ritardo di replica aumenta.
Se sospetti che lo spazio di archiviazione sia dovuto a TempDB o a tabelle temporanee, riavvia l'istanza di replica per liberare temporaneamente spazio.
10. Se non si verifica alcun progresso nello stato del ritardo di replica, controlla lo stato dei database utente sull'istanza di replica. Per riprodurre i registri, lo stato del database deve essere Online.
Tieni presente quanto segue:
- I nuovi database creati non vengono inclusi nel calcolo del ritardo finché non sono accessibili sulla replica di lettura.
- ReplicaLag restituisce -1 se RDS non è in grado di determinare il ritardo, ad esempio durante la configurazione della replica o quando la replica di lettura è in stato di errore.
Informazioni correlate
Utilizzo di repliche di lettura per Microsoft SQL Server in Amazon RDS
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa