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.
Argomenti
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.
Argomenti
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
-
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
-
Termina ogni transazione di lunga durata con il comando
COMMIT
oROLLBACK
.
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:
-
trx_rseg_history_len
Per ulteriori informazioni, consulta Tabella dei parametri InnoDB INFORMATION_SCHEMA
nel Manuale di riferimento MySQL 5.7.