La lunghezza dell'elenco della cronologia di InnoDB è aumentata in modo significativo - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

La lunghezza dell'elenco della cronologia di InnoDB è aumentata in modo significativo

A partire dalla data, l'elenco della cronologia delle modifiche alle righe è aumentato in modo significativo, fino alla lunghezza di db-instance. Questo aumento influisce sulle prestazioni di chiusura delle query e arresto del database.

Versioni del motore supportate

Queste informazioni approfondite sono supportate per tutte le versioni di Aurora MySQL.

Context

Il sistema di transazioni InnoDB gestisce il controllo della concorrenza multiversione (MVCC). Quando una riga viene modificata, la versione precedente alla modifica dei dati da modificare viene archiviata come record di annullamento in un log di annullamenti. Ogni record di annullamento ha un riferimento al record di ripristino precedente, formando un elenco collegato.

L'elenco della cronologia di InnoDB è un elenco globale dei log di annullamento per le transazioni sottoposte a commit. MySQL utilizza l'elenco della cronologia per eliminare i record e le pagine di log quando le transazioni non richiedono più la cronologia. La lunghezza dell'elenco della cronologia è il numero totale di log di annullamento che contengono modifiche nell'elenco della cronologia. Ogni log contiene una o più modifiche. Se la lunghezza dell'elenco della cronologia di InnoDB aumenta in modo significativo, indicando un numero elevato di precedenti versioni di riga, la chiusura delle query e l'arresto del database diventano più lenti.

Probabili cause di questo problema

Le cause tipiche di un lungo elenco della cronologia sono:

  • Transazioni di lunga durata, in lettura o scrittura

  • Carico elevato in scrittura

Azioni

Consigliamo azioni diverse a seconda delle cause degli approfondimenti.

Non iniziare alcuna operazione che comporti l'arresto del database finché non diminuiscono le dimensioni dell'elenco della cronologia di InnoDB

Poiché un lungo elenco della cronologia di InnoDB rallenta l'arresto del database, riduci le dimensioni dell'elenco prima di iniziare le relative operazioni. Queste operazioni includono gli aggiornamenti della versione principale del database.

Identificare e terminare le transazioni di lunga durata

Puoi individuare le transazioni di lunga durata eseguendo la query information_schema.innodb_trx.

Nota

Assicurati anche di cercare transazioni di lunga durata nelle repliche di lettura.

Per identificare e terminare le transazioni di lunga durata
  1. Nel client SQL esegui la seguente query:

    SELECT a.trx_id, a.trx_state, a.trx_started, TIMESTAMPDIFF(SECOND,a.trx_started, now()) as "Seconds Transaction Has Been Open", a.trx_rows_modified, b.USER, b.host, b.db, b.command, b.time, b.state FROM information_schema.innodb_trx a, information_schema.processlist b WHERE a.trx_mysql_thread_id=b.id AND TIMESTAMPDIFF(SECOND,a.trx_started, now()) > 10 ORDER BY trx_started
  2. Termina ogni transazione di lunga durata con il comando COMMIT o ROLLBACK.

Usa Approfondimenti sulle prestazioni per individuare i principali host e i migliori utenti.

Ottimizza le transazioni in modo che un numero elevato di righe modificate venga immediatamente sottoposto a commit.

Parametri rilevanti

A questo approfondimento è correlato il seguente parametro: