Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Die Länge der InnoDB-Verlaufsliste wurde deutlich erhöht
Ab dem Datum
wurde Ihre Verlaufsliste für Zeilenänderungen erheblich erweitert, bis hin zur Länge
auf der DB-Instance
. Dieser Anstieg wirkt sich auf die Leistung beim Herunterfahren von Abfragen und Datenbanken aus.
Themen
Unterstützte Engine-Versionen
Diese Insight-Informationen werden für alle Versionen von unterstützt.
Kontext
Das InnoDB-Transaktionssystem behält die Multiversion Concurrency Control (MVCC) bei. Wenn eine Zeile geändert wird, wird die Version der geänderten Daten vor der Änderung als Undo-Datensatz in einem Undo-Protokoll gespeichert. Jeder Undo-Datensatz hat einen Verweis auf seinen vorherigen Redo-Datensatz, wodurch eine verknüpfte Liste entsteht.
Die InnoDB-Verlaufsliste ist eine globale Liste der Undo-Protokolle für übernommene Transaktionen. MySQL verwendet die Verlaufsliste, um Datensätze und Protokollseiten zu löschen, wenn Transaktionen den Verlauf nicht mehr benötigen. Die Länge der Verlaufsliste ist die Gesamtzahl der Undo-Protokolle, die Änderungen in der Verlaufsliste enthalten. Jedes Protokoll umfasst eine oder mehrere Änderungen. Wenn die Länge der InnoDB-Verlaufsliste zu groß wird, was auf eine große Anzahl alter Zeilenversionen hinweist, werden Abfragen und Datenbankabschaltungen langsamer.
Mögliche Ursachen für dieses Problem
Zu den typischen Ursachen einer langen Verlaufsliste gehören die folgenden:
-
Transaktionen mit langer Laufzeit, entweder beim Lesen oder Schreiben
-
Eine hohe Schreiblast
Aktionen
Abhängig von den Ursachen Ihres Einblicks empfehlen wir verschiedene Aktionen.
Themen
Beginnen Sie keine Operation, die ein Herunterfahren der Datenbank beinhaltet, bis die InnoDB-Verlaufsliste kürzer wird
Da eine lange InnoDB-Verlaufsliste das Herunterfahren von Datenbanken verlangsamt, sollten Sie die Listengröße reduzieren, bevor Sie Operationen einleiten, die ein Herunterfahren der Datenbank beinhalten. Zu diesen Vorgängen gehören Datenbank-Upgrades der Hauptversionen.
Identifizieren und beenden Sie lang andauernde Transaktionen
Sie können Transaktionen mit langer Laufzeit finden, indem Sie information_schema.innodb_trx
abfragen.
Anmerkung
Achten Sie auch auf lang andauernde Transaktionen auf Lesereplikaten.
So identifizieren und beenden Sie lang andauernde Transaktionen
-
Führen Sie das folgende Skript in Ihrem SQL-Client aus:
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
-
Beenden Sie jede lang laufende Transaktion mit einem
COMMIT
- oderROLLBACK
-Befehl.
Verwenden Sie Performance Insights, um die Top-Hosts und Top-Benutzer zu identifizieren.
Optimieren Sie Transaktionen, so dass eine große Anzahl geänderter Zeilen sofort bestätigt wird.
Relevante Metriken
Die folgenden Metriken beziehen sich auf diesen Einblick:
-
trx_rseg_history_len
Weitere Informationen finden Sie in der Metriktabelle InnoDB INFORMATION_SCHEMA
im MySQL 5.7-Referenzhandbuch.