Salta al contenuto

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

5 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 nella 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 tecnologia Always-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

Verifica l'utilizzo delle risorse

Utilizza Amazon CloudWatch Enhanced Monitoring and Performance Insights per verificare l'utilizzo delle risorse sulle tue istanze primarie e replicate a un livello dettagliato.

Verifica che l'utilizzo della CPU non sia limitato. Se utilizzi un tipo di istanza burstable, assicurati di avere crediti CPU disponibili o di aver attivato la modalità Illimitata.

Assicurati che ci sia FreeableMemory 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, tipo di archiviazione e numero di IOPS.  È inoltre possibile aumentare o diminuire la replica in lettura quando l'utilizzo è minimo 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 sull'istanza primaria. Determina se l'attività di scrittura ha causato il ritardo. Quindi controlla le stesse metriche nello stesso periodo di tempo sulla replica in lettura.
  • Controlla se ci sono transazioni di lunga durata sull'istanza primaria. Per verificare lo stato delle transazioni attive, esegui una query simile all'esempio seguente:
    SELECT *
    FROM sys.sysprocesses
    WHERE open_tran = 1;

Identifica attese e deadlock

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

Per verificare il blocco, esegui una query simile all'esempio seguente:

SELECT * FROM sys.sysprocesses WHERE blocked > 0;

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 la seguente 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 a database_name il nome del tuo database.

Verifica che il valore last_hardened_lsn nella replica in lettura progredisca.

**Ritardo massimo di replica **

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

SELECT max(secondary_lag_seconds) max_lag
FROM sys.dm_hadr_database_replica_states;

Gestisci la sincronizzazione dei dati e lo stato 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 subisce un caricamento lento che causa un ritardo di replica. È un comportamento previsto. Per ridurre gli effetti del caricamento lento, utilizza il 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 Recupero.

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

Inoltre, quando modifichi il tipo o la dimensione dello spazio di archiviazione, potrebbe verificarsi temporaneamente un ritardo di replica fino al completamento dell'ottimizzazione dello spazio di archiviazione. Non è possibile monitorare l'avanzamento dell'ottimizzazione dello spazio di archiviazione.

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

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 è in stato Errore.

Informazioni correlate

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