MySQL-Dirty-Pages Aufgrund des WAL-Mechanismus erstellt InnoDB beim Aktualisieren einer Anweisung eine Festplattenoperation namens Schreibprotokoll, bei der es sich um ein Redo-Protokoll handelt. Nachdem das Redo-Protokoll in den Speicher geschrieben wurde, wird es an den Client zurückgegeben, was darauf hinweist, dass das Update erfolgreich war. Der Vorgang des Schreibens von Daten aus dem Speicher auf die Festplatte wird als Leeren bezeichnet. Vor dem Leeren stimmen die tatsächlichen Daten nicht mit den Daten in der Datenbank überein, da die Daten basierend auf dem Redo-Protokoll aktualisiert, aber noch nicht geschrieben wurden und die Datenbank alt ist. Wenn der Inhalt der Speicherdatenseite nicht mit der Festplattendatenseite übereinstimmt, wird die Speicherseite als schmutzige Seite bezeichnet. Nachdem der Speicher geschrieben wurde, ist er konsistent und wird als saubere Seite bezeichnet. Wenn MySQL gelegentlich sehr langsam läuft, werden wahrscheinlich fehlerhafte Seiten gelöscht. Der Prozess zum Auslösen einer Datenbankbereinigung
Daher stellen wir bei der Verwendung der Datenbank manchmal fest, dass die Datenbankleistung plötzlich nachlässt. Dies kann auf die Verarbeitung fehlerhafter Seiten zurückzuführen sein. Kontrollstrategie für das Leeren schmutziger Seiten
Szenariobeispiel: Die Datenbank nimmt zu viel Speicherplatz ein und die Hälfte der Daten in der größten Tabelle wird gelöscht, die Größe der Tabelle bleibt jedoch unverändert. Datenlöschungsprozess Wenn Sie R4 löschen möchten, markiert die InnoDB-Engine nur den Datensatz R4 als gelöscht. Wenn später ein Datensatz mit einer ID zwischen 300 und 600 hinzugefügt wird, wird diese Position erneut verwendet, die Größe der Datenträgerdatei wird jedoch nicht reduziert. Wenn alle Datensätze einer Datenseite gelöscht werden, kann die Datenseite wiederverwendet werden. Hinweis: Die Wiederverwendung von Datenseiten unterscheidet sich von der Wiederverwendung von Datensätzen.
Datenfluss einfügen Wenn die Daten in Indexreihenfolge eingefügt werden, ist der Index kompakt. Werden sie jedoch zufällig eingefügt, führt dies zu einer Paginierung der Indexdatenseiten. Wenn Seite A bereits voll ist, was passiert, wenn Sie eine weitere Datenzeile einfügen? Da A voll ist, wird beim Einfügen von Daten mit der ID 550 eine neue Seite Seite B zum Speichern der Daten angefordert. Nach Abschluss der Teilung bleibt am Ende von Seite A eine Lücke. Durch das Aktualisieren des Indexwerts wird auch der alte Wert gelöscht und ein neuer Wert eingefügt, wodurch ebenfalls eine Lücke entsteht. Schrumpfender Platz Erstellen Sie eine neue Tabelle B mit derselben Struktur wie Tabelle A. Lesen Sie die Daten aus Tabelle A Zeile für Zeile in aufsteigender Reihenfolge der Primärschlüssel-ID und fügen Sie sie in Tabelle B ein. In Tabelle B gibt es keine Lücken und die Auslastungsrate der Datenseiten ist höher. Wenn wir Tabelle B als temporäre Tabelle verwenden, ersetzen wir A durch B, nachdem die Daten von Tabelle A in B importiert wurden, wodurch A auch verkleinert wird. Während des gesamten DDL-Prozesses kann Tabelle A nicht aktualisiert werden, daher ist dieser DDL nicht online. In Versionen nach 5.6 wurde der Prozess geändert: Erstellen Sie eine temporäre Datei und scannen Sie alle Datenseiten in A. Generieren Sie einen B+-Baum mit den Datensätzen von A auf der Datenseite und speichern Sie ihn in einer temporären Datei Protokollieren Sie alle Vorgänge auf A in einer Protokolldatei Nachdem die temporäre Datei generiert wurde, werden die Vorgänge der Protokolldatei auf die temporäre Datei angewendet, um eine Datendatei mit denselben logischen Daten wie Tabelle A zu erhalten. Ersetzen Sie die Datendatei der Tabelle A durch die temporäre Datei Symbol Es ist ersichtlich, dass der Unterschied zum Prozess in Abbildung 3 darin besteht, dass diese Lösung aufgrund der Existenz der Funktion zum Aufzeichnen und Wiedergeben von Protokolldateien während des Neuaufbaus der Tabelle Hinzufügungs-, Lösch- und Änderungsvorgänge an Tabelle A ermöglicht. Verwenden Sie den Befehl „alter table A engine=InnoDB“, um die Tabelle neu zu erstellen. Vor MySQL 5.5 war der Ausführungsprozess dieses Befehls ähnlich dem, den wir oben beschrieben haben. Der einzige Unterschied besteht darin, dass Sie die temporäre Tabelle B nicht selbst erstellen müssen. MySQL führt die Vorgänge zum Übertragen von Daten, zum Austauschen von Tabellennamen und zum Löschen der alten Tabelle automatisch aus. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Implementierung der Benutzerregistrierungsfunktion mit js
>>: Verwendung des Linux-Datumsbefehls
Vorwort 1. Die in diesem Artikel verwendeten Tool...
Systemumgebung: centos7.4 1. Prüfen Sie, ob die D...
Diese Geschichte beginnt heute mit einer unerwarte...
1. Scroll-Ansicht Beim vertikalen Scrollen müssen...
Shopify Plus ist die Enterprise-Version der von u...
1. Befehlseinführung Mit dem Befehl seq (Sequence...
Vorne geschrieben Kürzlich berichtete mir ein Les...
Ich habe eine Produktteiletabelle wie diese: Teil...
Einführung in Struktur und Leistung HTML-Struktur...
Da das Projekt den https-Dienst nutzen muss, habe...
Wenn wir eine automatische Erkennung durchführen,...
Im vorherigen Artikel wurde die MySql-Abfrageanwe...
Das Div+CSS-Layout zur Erzielung einer 2-Enden-Au...
Wenn href zum Übergeben von Parametern benötigt w...
In diesem Artikelbeispiel wird der spezifische Co...