Salta al contenuto

Come posso risolvere i problemi di ritardo della mia replica in lettura di Amazon RDS per SQL Server?

6 minuti di lettura
0

Ho un'istanza Amazon Relational Database Service (Amazon RDS) per Microsoft SQL Server con replica in lettura. Desidero risolvere il ritardo di replica della mia istanza Amazon RDS per SQL Server.

Breve descrizione

Amazon RDS per SQL Server Enterprise Edition supporta la creazione di repliche in lettura nella stessa Regione AWS e in più Regioni. La replica dei dati è asincrona e utilizza la tecnologiaAlways-On per replicare i dati da un'istanza primaria a un'istanza di replica. RDS per SQL Server non riduce automaticamente un ritardo di replica elevato tra un'istanza database di origine e le relative repliche in lettura.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Verifica l'utilizzo delle risorse

Utilizza Monitoraggio avanzato e Performance Insights in Amazon CloudWatch per verificare l'utilizzo delle risorse da parte delle istanze primaria e di replica a livello dettagliato.

Verifica che l'utilizzo della CPU non sia soggetto a una limitazione (della larghezza di banda della rete). Se utilizzi un tipo di istanza a prestazioni espandibili, assicurati di avere crediti CPU disponibili o di aver attivato la modalità Illimitata.

Assicurati che il valore FreeableMemory sia sufficiente e che ** ReadIOPS** e WriteIOPS soddisfino le quote assegnate. Se utilizzi un volume gp2, verifica di avere un saldo burst disponibile.

Controlla se ReadThroughput e WriteThroughput hanno raggiunto le quote per il tipo di istanza.

Nota: la mancanza di risorse nell'istanza di replica può causare ritardi nella replica. È consigliabile creare le istanze primarie e di replica con lo stesso tipo di istanza, spazio di archiviazione e numero di IOPS. Puoi anche aumentare verticalmente la replica in lettura quando il carico di lavoro è elevato rispetto all'istanza primaria.

Identifica l'intervallo di tempo in cui il ritardo di replica ha iniziato ad aumentare, quindi intraprendi le seguenti azioni:

  • Controlla le metriche WriteIOPS, WriteThroughput, NetworkReceiveThroughput e NetworkTrasmitThroughput dell'istanza primaria. Determina il ritardo è stato causato dall'attività di scrittura. Quindi controlla le stesse metriche nello stesso periodo di tempo per la replica in lettura.
  • Controlla sono presenti transazioni lente nell'istanza primaria. Per verificare lo stato delle transazioni attive, esegui una query simile a questo esempio:
    SELECT *
    FROM sys.sysprocesses
    WHERE open_tran = 1;

Identifica attese e deadlock

Verifica se sono presenti attese di blocchi o deadlock significativi nell'istanza di replica. I deadlock si verificano tra le transazioni Select e DDL/DML e causano ritardi nell'applicazione dei log delle transazioni dall'istanza primaria.

Per verificare i blocchi, esegui una query simile a questo esempio:

SELECT * FROM sys.sysprocesses WHERE blocked > 0;

Per acquisire informazioni su un evento di deadlock nella replica in lettura, utilizza i flag di traccia, una sessione system_health o la sessione xml_deadlock_report extended events per identificare i deadlock.

Verifica il ritardo di replica

Esegui una query sull'istanza primaria per verificare il ritardo di replica e il ritardo massimo di replica.

Ritardo di replica

Esegui questa query:

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;

Nota: sostituisci database_name con nome del tuo database.

Verifica che il valore last_hardened_lsn nella replica in lettura aumenti.

Ritardo massimo di replica

Per SQL Server, la metrica ReplicaLag indica il ritardo massimo dei database che sono indietro, espresso in secondi. Ad esempio, se hai due database con un ritardo rispettivamente di 5 secondi e 10 secondi, il valore di ReplicaLag è 10 secondi. Per calcolare la metrica ReplicaLag, esegui questa query sull'istanza primaria:

SELECT max(secondary_lag_seconds) max_lag
FROM sys.dm_hadr_database_replica_states;

Gestisci la sincronizzazione dei dati e l'integrità dell'istanza

Quando crei una replica in lettura, Amazon RDS acquisisce uno snapshot dall'istanza primaria, dopodiché ripristina lo snapshot per creare un'istanza di replica in lettura. Amazon RDS riproduce i log delle transazioni per sincronizzare i dati con l'istanza primaria. Tuttavia, dopo aver creato una nuova istanza, l'istanza ha un caricamento lento (lazy loading) che causa un ritardo di replica. Si tratta di un comportamento normale. Per ridurre gli effetti del caricamento lento, utilizza un tipo di volume io1 o io2 quando crei la replica in lettura. Dopo aver creato la replica, puoi riconvertirla in un tipo di volume gp2 o gp3.

Esegui le transazioni in batch sull'istanza primaria per evitare transazioni lunghe e mantenere ridotte le dimensioni del file di log delle transazioni. Riavvia l'istanza di replica solo quando richiesto in caso di ritardo di replica elevato. Altrimenti Amazon RDS ritarda la riproduzione dei log delle transazioni e i database potrebbero passare allo stato Ripristino.

Poiché i log vengono elaborati dall'istanza primaria, potrebbe verificarsi un temporaneo ritardo quando modifichi il tipo di istanza nell'istanza primaria o di replica.

Inoltre, quando modifichi il tipo o la dimensione dello spazio di archiviazione, potrebbe verificarsi un temporaneo ritardo fino al completamento dell'ottimizzazione dello spazio di archiviazione. Puoi monitorare i progressi dell'ottimizzazione dello spazio di archiviazione nella Console di gestione AWS o utilizzando il comando AWS CLI describe-db-instances.

Se continui a riscontrare un ritardo di replica, controlla lo stato dei database utenti nell'istanza di replica. Per riprodurre i log, lo stato del database deve essere Online.

Per visualizzare lo stato di avanzamento di un database nello stato RIPRISTINO in una replica in lettura di Amazon RDS per SQL Server, esegui questa query:

SELECT command, percent_complete, estimated_completion_time, start_time  
FROM sys.dm_exec_requests  
WHERE command IN ('RESTORE DATABASE', 'RECOVERY', 'ROLLBACK', 'ROLLFORWARD')

Nota:

  • Amazon RDS include i database appena creati nel calcolo del ritardo solo dopo che sono accessibili nella replica in lettura.
  • ReplicaLag restituisce -1 quando Amazon RDS non è in grado di determinare il ritardo, ad esempio durante la configurazione della replica o quando la replica in lettura è nello stato Errore.

Informazioni correlate

Utilizzo di repliche in lettura per Microsoft SQL Server in Amazon RDS