Mysql Online-Wiederherstellung des Undo-Tabellenbereichs tatsächlicher Kampfdatensätze

Mysql Online-Wiederherstellung des Undo-Tabellenbereichs tatsächlicher Kampfdatensätze

1 MySQL5.6

1.1 Verwandte Parameter

MySQL 5.6 fügt drei Parameter hinzu: innodb_undo_directory, innodb_undo_logs und innodb_undo_tablespaces, die das Undo-Protokoll von ibdata1 verschieben und separat speichern können.

  • innodb_undo_directory: Gibt das Verzeichnis an, in dem der Undo-Tablespace separat gespeichert wird. Der Standardwert ist . (d. h. datadir). Sie können einen relativen oder einen absoluten Pfad festlegen. Obwohl diese Parameterinstanz nach der Initialisierung nicht direkt geändert werden kann, können Sie sie ändern, indem Sie die Datenbank stoppen, die Konfigurationsdatei ändern und dann die Undo-Tablespace-Datei verschieben.

Standardparameter:

mysql> Variablen wie „%undo%“ anzeigen;
+-------------------------+----------+
| Variablenname | Wert |
+-------------------------+----------+
| innodb_undo_verzeichnis | . |
| innodb_undo_logs | 128 |
| innodb_undo_tablespaces | 0 |
+-------------------------+----------+
  • innodb_undo_tablespaces: Gibt die Anzahl der separat gespeicherten Undo-Tablespaces an. Wenn der Wert beispielsweise auf 3 gesetzt ist, lauten die Undo-Tablespaces undo001, undo002 und undo003, und die Anfangsgröße jeder Datei beträgt standardmäßig 10 MB. Wir empfehlen, diesen Parameter größer oder gleich 3 zu setzen. Der Grund wird weiter unten erläutert. Diese Parameterinstanz kann nach der Initialisierung nicht mehr geändert werden

Die Initialisierung der Instanz besteht in der Änderung von innodb_undo_tablespaces:

mysql_install_db ...... --innodb_undo_tablespaces

$ ls
...
undo001 undo002 undo003
  • innodb_rollback_segments: Der Standardwert ist 128. Jedes Rollback-Segment kann 1024 Online-Transaktionen gleichzeitig unterstützen. Diese Rollback-Segmente werden gleichmäßig auf jeden Undo-Tablespace verteilt. Diese Variable kann dynamisch angepasst werden, die physischen Rollback-Segmente werden jedoch nicht reduziert, es wird lediglich die Anzahl der verwendeten Rollback-Segmente gesteuert.

1.2 Nutzung

Bevor wir die Instanz initialisieren, müssen wir nur den Parameter innodb_undo_tablespaces festlegen (empfohlen größer oder gleich 3), um das Undo-Protokoll in einem separaten Undo-Tablespace einzurichten. Wenn Sie das Undo-Protokoll auf einem schnelleren Gerät speichern müssen, können Sie den Parameter innodb_undo_directory festlegen. Im Allgemeinen tun wir dies jedoch nicht, da SSDs mittlerweile sehr beliebt sind. innodb_undo_logs kann standardmäßig auf 128 gesetzt werden.

Undo-Protokolle können außerhalb von ibdata gespeichert werden. Aber diese Funktion ist immer noch nutzlos:

  • Zunächst müssen Sie bei der Installation der Instanz einen unabhängigen Undo-Tablespace angeben. Dieser kann nach Abschluss der Installation nicht mehr geändert werden.
  • Die Space-ID des Undo-Tablespace muss bei 1 beginnen. Der Undo-Tablespace kann nicht hinzugefügt oder gelöscht werden.

1.3 Testen großer Transaktionen

mysql> Tabelle test.tbl erstellen (ID int Primärschlüssel auto_increment, Name varchar (200));
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

mysql> Transaktion starten;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> in test.tbl(Name) Werte einfügen(Wiederholung('1',00));
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

mysql> in test.tbl(Name) einfügen, Namen aus test.tbl auswählen;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
Datensätze: 1 Duplikate: 0 Warnungen: 0

...

mysql> in test.tbl(Name) einfügen, Namen aus test.tbl auswählen;
Abfrage OK, 2097152 Zeilen betroffen (24,84 Sek.)
Datensätze: 2097152 Duplikate: 0 Warnungen: 0

mysql> festschreiben;
Abfrage OK, 0 Zeilen betroffen (7,90 Sek.)

Beachten Sie, dass das Undolog begonnen hat, sich auszudehnen! Der Speicherplatz wird nach der Bestätigung der Transaktion nicht zurückgefordert.

$ du -sh undo*
10M undo001
69M undo002
10M undo003

2 Mysql5.7

5.7 führt Online-Truncate-Undo-Tablespace ein

2.1 Verwandte Parameter

Notwendige Voraussetzungen:

  • innodb_undo_tablespaces: Mindestens zwei, damit einer den anderen während der Bereinigung verwenden kann. Dieser Parameter kann nach der Initialisierung der Instanz nicht mehr geändert werden.
  • innodb_rollback_segments: Die Anzahl der Rollback-Segmente. Dem Systemtabellenbereich ist immer ein Rollback-Segment zugeordnet, und 32 sind für temporäre Tabellenbereiche reserviert. Wenn Sie also den Undo-Tablespace verwenden möchten, muss dieser Wert mindestens 33 betragen. Wenn beispielsweise zwei Undo-Tablespaces verwendet werden, beträgt dieser Wert 35. Wenn Sie mehrere Undo-Tablespaces einrichten, werden die Rollback-Segmente im System-Tablespace inaktiv.

Startparameter:

  • innodb_undo_log_truncate=ein
  • innodb_max_undo_log_size: Tablespaces, die diesen Wert überschreiten, werden als abgeschnitten markiert. Der Standardwert des dynamischen Parameters ist 1G
  • innodb_purge_rseg_truncate_frequency: Gibt an, wie oft der Bereinigungsvorgang aufgerufen wird, bevor die Rollback-Segmente freigegeben werden. Der Undo-Tablespace wird nur gekürzt, wenn die Rollback-Segmente im Undo-Tablespace freigegeben werden. Es ist ersichtlich, dass der Undo-Tablespace umso häufiger gekürzt wird, je kleiner der Parameter ist.

2.2 Reinigungsprozess

  1. Wenn die Größe des Undo-Tablespace innodb_max_undo_log_size überschreitet, wird der Tablespace zur Bereinigung markiert. Um ein mehrfaches Reinigen eines Tabellenplatzes zu vermeiden, wird die Markierung wiederholt.
  2. Das Rollback-Segment im Markierungstabellenbereich wird inaktiv und die laufenden Transaktionen warten auf den Abschluss.
  3. Beginnen Sie mit dem Bereinigen
  4. Nachdem Sie alle Rollback-Segmente im Undo-Tablespace freigegeben haben, führen Sie truncate aus und kürzen den Undo-Tablespace auf seine Anfangsgröße. Die Anfangsgröße wird durch innodb_page_size bestimmt. Die Standardgröße von 16 KB entspricht einem Tablespace von 10 MB.
  5. Rollback-Segmente reaktivieren, damit sie neuen Transaktionen zugewiesen werden können

2.3 Leistungsempfehlungen

Die einfachste Möglichkeit, Leistungseinbußen beim Abschneiden eines Tablespaces zu vermeiden, besteht darin, die Anzahl der Undo-Tablespaces zu erhöhen.

2.4 Testen großer Transaktionen

Konfigurieren Sie 8 Undo-Tablespaces, innodb_purge_rseg_truncate_frequency=10

mysqld --initialisieren … --innodb_undo_tablespaces=8

Testen beginnen

mysql> globale Variablen wie „%undo%“ anzeigen;
+--------------------------+------------+
| Variablenname | Wert |
+--------------------------+------------+
| innodb_max_undo_log_size | 1073741824 |
| innodb_undo_verzeichnis | ./ |
| innodb_undo_log_truncate | EIN |
| innodb_undo_logs | 128 |
| innodb_undo_tablespaces | 8 |
+--------------------------+------------+

mysql> wähle @@innodb_purge_rseg_truncate_frequency;
+----------------------------------------+
| @@innodb_purge_rseg_truncate_frequency |
+----------------------------------------+
| 10 |
+----------------------------------------+

wählen Sie @@innodb_max_undo_log_size;
+----------------------------+
| @@innodb_max_undo_log_size |
+----------------------------+
|10485760|
+----------------------------+

mysql> Tabelle test.tbl erstellen (ID int Primärschlüssel auto_increment, Name varchar (200));
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

mysql> Transaktion starten;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

mysql> in test.tbl(Name) Werte einfügen(Wiederholung('1',00));
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)

mysql> in test.tbl(Name) einfügen, Name aus test.tbl auswählen;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
Datensätze: 1 Duplikate: 0 Warnungen: 0

...

mysql> in test.tbl(Name) einfügen, Namen aus test.tbl auswählen;
Abfrage OK, 2097152 Zeilen betroffen (24,84 Sek.)
Datensätze: 2097152 Duplikate: 0 Warnungen: 0

mysql> festschreiben;
Abfrage OK, 0 Zeilen betroffen (7,90 Sek.)

Der Undo-Tablespace wird nach der Erweiterung auf über 100 MB erfolgreich wiederhergestellt.

$ du -sh undo*
10M undo001
10M undo002
10M undo003
10M undo004
10M undo005
10M undo006
125M undo007
10M undo008

$ du -sh undo*
10M undo001
10M undo002
10M undo003
10M undo004
10M undo005
10M undo006
10M undo007
10M undo008

3 Referenz

https://dev.mysql.com/doc/ref...

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL
  • Analysieren Sie die Ursachen und beseitigen Sie die Fragmentierung in MySQL-Tabellen.
  • Was ist ein MySQL-Tablespace?
  • Analyse der Prinzipien von MySQL Dirty Page Flush und Shrinking Table Space
  • Ausführliche Erläuterung zum Beispiel der MySQL InnoDB-Tablespace-Verschlüsselung
  • Detaillierte Analyse des temporären MySQL 5.7-Tablespace
  • So verwenden Sie das Entladen, Migrieren und Laden von MySQL InnoDB-Tablespaces
  • SQL-Anweisung zum Abfragen des von allen Datenbanken belegten Speicherplatzes und der Größe aller Tabellen in einer einzelnen Datenbank in MySQL
  • Das Konzept der MySQL-Tablespace-Fragmentierung und Lösungen für damit verbundene Probleme

<<:  Implementierungsschritte zum Erstellen eines Webpack5-React-Gerüsts von Grund auf (mit Quellcode)

>>:  Zusammenfassung zum Hinzufügen von Root-Berechtigungen für Benutzer in Linux

Artikel empfehlen

So verwenden Sie Typescript zum Kapseln von lokalem Speicher

Inhaltsverzeichnis Vorwort Szenarien für die Verw...

Installations-JDK-Tutorialanalyse für Linux-System (Centos6.5 und höher)

Artikelstruktur 1. Vorbereitung 2. Installieren S...

Detailliertes Tutorial zur Installation von Docker unter Windows

Da meine lokale MySQL-Version relativ niedrig ist...

Vergleich der JS-Array-Loop-Methode und der Effizienzanalyse

Array-Methoden JavaScript bietet viele Array-Meth...

Die umfassendste Sammlung von Front-End-Interviewfragen

HTML und CSS 1. Verständnis und Kenntnisse von WE...

CSS erzielt farbenfrohe und intelligente Schatteneffekte

Hintergrund Haben Sie sich jemals gefragt, wie Si...

JavaScript zur Implementierung der mobilen Signaturfunktion

In diesem Artikel wird der spezifische JavaScript...

Einige Erkenntnisse und Gedanken zu iframe

Diese Geschichte beginnt heute mit einer unerwarte...

Docker-Dateispeicherpfad, Port-Mapping-Betriebsmodus ändern

So erhalten Sie den Container-Startbefehl Der Con...

So ändern Sie die Zeit in der virtuellen CentOS-Maschine

Das obere Bild zeigt die Systemzeit und das unter...

Grundlegender Installationsprozess von mysql5.7.19 unter winx64 (Details)

1. Herunterladen https://dev.mysql.com/downloads/...

So installieren Sie MySQL 5.7.29 mit einem Klick mithilfe eines Shell-Skripts

Dieser Artikel bezieht sich auf die Arbeit des 51...

So konfigurieren Sie einen Pfadalias für das React-Scaffolding

Die React-Version beim Schreiben dieses Artikels ...

Lösung für MySQL-Verbindungsausnahme und Fehler 10061

MySQL ist ein relationales Datenbankverwaltungssy...