In che modo posso risolvere l'errore "Waiting for the slave SQL thread to free enough relay log space" in Amazon Aurora MySQL?

4 minuti di lettura
0

Ho ricevuto il seguente errore nell'output del comando SHOW SLAVE STATUS che funziona come replica della replica del log binario in Amazon Aurora MySQL: "Waiting for the slave SQL thread to free enough relay log space" Come posso risolvere questo errore?

Breve descrizione

Quando Aurora MySQL è una replica della replica di log binari, esegue il thread I/O e il thread SQL allo stesso modo di MySQL. Il thread I/O legge i log binari dal sistema primario e quindi li salva come relay log nell'istanza database di replica. Il thread SQL elabora gli eventi nei relay log e poi li elimina quando gli eventi al suo interno vengono elaborati.

Se il thread SQL non elabora gli eventi abbastanza velocemente da raggiungere la velocità con cui vengono generati i relay log, la quantità di relay log aumenta.

Quando la variabile globale relay_log_space_limit è impostata su un valore maggiore di 0 e la dimensione totale di tutti i relay log raggiunge il limite, i nuovi relay log non vengono salvati. Finché lo spazio dei relay log non torna nuovamente disponibile, l'output di SHOW SLAVE STATUS mostra il messaggio "Waiting for the slave SQL thread to free enough relay log space" nel campo Slave_IO_State.

In Aurora MySQL, relay_log_space_limit è impostato su 1000000000 (953,6 MiB) e non può essere modificato. In questo modo si evita che il volume del cluster sia eccessivamente ampio. Quando la dimensione totale di tutti i relay log raggiunge 1000000000 byte (953,6 MiB), il thread I/O interrompe il salvataggio dei relay log. Attende che il thread SQL elabori gli eventi ed elimini i log esistenti. Slave_IO_State mostra quindi il messaggio "Waiting for the slave SQL thread to free enough relay log space". Se il thread SQL non viene interrotto, i relay log vengono infine eliminati e il thread I/O riprende a salvare i nuovi relay log.

Ciò causa anche un ritardo di replica perché SQL non è abbastanza veloce da recuperare il ritardo con la generazione di relay log da parte del thread I/O. Anche se relay_log_space_limit viene modificato con un valore maggiore, i relay log si accumulano ulteriormente e il problema non viene risolto finché il thread SQL non recupera il ritardo.

È possibile visualizzare lo spazio corrente dei relay log, lo stato del thread I/O e lo stato del thread SQL nell'output del comando SHOW SLAVE STATUS.

Slave_IO_State: Waiting for the slave SQL thread to free enough relay log space
Master_Log_File: mysql-bin-changelog.237029
Read_Master_Log_Pos: 55356151
Relay_Master_Log_File: mysql-bin-changelog.237023
Exec_Master_Log_Pos: 120
Relay_Log_Space: 1000002403

Master_Log_File e Read_Master_Log_Pos mostrano il nome del file di log binario e la posizione in cui il thread I/O ha completato la lettura e il salvataggio. **Relay_Master_Log_File ** ed Exec_Master_Log_Pos mostrano il nome del file di log binario e la posizione in cui viene elaborato il thread SQL. Sebbene ciò che il thread SQL legge effettivamente siano relay log, vengono visualizzati il nome del file di log binario corrispondente nell'istanza database primaria e la posizione.

Quando Master_Log_File è diverso da Relay_Master_Log_File, il thread SQL non è sufficientemente veloce. Se Master_Log_File e Relay_Master_Log_File sono uguali, il thread I/O potrebbe contribuire al ritardo.

I seguenti fattori possono causare prestazioni insufficienti del thread SQL:

  • Query di lunga durata sull'istanza database primaria
  • Dimensione o archiviazione della classe dell'istanza database insufficiente
  • Query parallele eseguite sull'istanza database primaria
  • Log binari sincronizzati con il disco sull'istanza database di replica
  • Binlog_format sull'istanza database di replica è impostato su ROW

Per ulteriori informazioni sulla risoluzione di questi problemi, consulta Come posso risolvere un elevato ritardo di replica con Amazon RDS per MySQL?

Inoltre, anche i seguenti fattori possono influire sulle prestazioni del thread SQL:

  • Una lunghezza HLL (Transaction History List Length) molto ampia sull'istanza database di replica
  • Operazioni I/O poco efficienti sull'istanza database di replica
  • Tabelle con molti indici secondari sull'istanza database di replica

Soluzione

Finché nella replica si verificano delle scritture, non è necessario preoccuparsi dello spazio per i relay log. Puoi monitorarlo utilizzando la metrica Velocità di trasmissione effettiva in scrittura in Monitoraggio avanzato.

Concentrati invece sulla risoluzione dei problemi relativi alle prestazioni della replica. Per maggiori dettagli, consulta Come posso risolvere un elevato ritardo di replica con Amazon RDS per MySQL e Perché la mia replica di lettura di Amazon Aurora è rimasta indietro e si è riavviata?


Informazioni correlate

Documentazione MySQL su Opzioni e variabili del server di replica

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa