Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL

Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL

Detailliertes Beispiel zum Beheben der Tablespace-Fragmentierung in MySQL

Ursachen der Fragmentierung

(1) Der Speicher der Tabelle wird fragmentiert. Immer wenn eine Zeile gelöscht wird, wird der Speicherplatz leer und bleibt leer. Eine große Anzahl von Löschvorgängen über einen bestimmten Zeitraum hinweg führt dazu, dass der leere Speicherplatz größer wird als der Speicherplatz, der zum Speichern des Tabelleninhalts verwendet wird.

(2) Bei der Ausführung von Einfügevorgängen versucht MySQL, leeren Speicherplatz zu verwenden. Wenn ein leerer Speicherplatz jedoch nicht mit Daten der entsprechenden Größe belegt ist, kann er dennoch nicht vollständig belegt werden, was zu einer Fragmentierung führt.

(3) Wenn MySQL Daten scannt, scannt es tatsächlich die Obergrenze des Kapazitätsbedarfs der Tabelle, dh den Spitzenbereich des Bereichs, in den die Daten geschrieben werden.

Zum Beispiel:

Eine Tabelle hat 10.000 Zeilen, jede Zeile ist 10 Byte groß und belegt 100.000 Byte Speicherplatz. Wenn ein Löschvorgang ausgeführt wird, bleibt nur eine Zeile übrig und der eigentliche Inhalt beträgt nur 10 Byte. Wenn MySQL sie jedoch liest, behandelt es sie immer noch als 100.000-Byte-Tabelle. Je mehr Fragmente vorhanden sind, desto stärker wird die Abfrageleistung beeinträchtigt.

Überprüfen Sie die Größe von Tabellenfragmenten

(1) Überprüfen Sie die Fragmentgröße einer Tabelle

mysql> ZEIGE TABELLENSTATUS WIE 'Tabellenname';

Der Wert der Spalte „Data_free“ im Ergebnis ist die Fragmentgröße

(2) Liste aller Tabellen, die fragmentiert wurden

mysql> wähle table_schema db, table_name, data_free, engine   
aus information_schema.tables 
wobei table_schema nicht in ('information_schema', 'mysql') und data_free > 0 ist;

Klare Tabellenfragmentierung

(1) MyISAM-Tabelle

mysql> Tabelle Tabellenname optimieren

(2) InnoDB-Tabelle

mysql> Tabelle ändern Tabellenname Engine = InnoDB

Die Funktionsweise von OPTIMIZE ist bei verschiedenen Engines unterschiedlich. Da Index und Daten von MyISAM getrennt sind, kann OPTIMIZE die Datendateien sortieren und den Index neu anordnen.

Der OPTIMIZE-Vorgang sperrt die Tabelle vorübergehend. Je größer die Datenmenge, desto länger dauert es. Schließlich handelt es sich nicht um einen einfachen Abfragevorgang. Daher ist es nicht sinnvoll, den Optimize-Befehl in das Programm einzufügen. Unabhängig davon, wie niedrig die Trefferquote eingestellt ist, steigt mit zunehmender Anzahl der Besuche auch die Gesamttrefferquote, was sich definitiv stark auf die Ausführungseffizienz des Programms auswirkt. Eine bessere Möglichkeit besteht darin, eine Shell zu erstellen und regelmäßig das Feld information_schema.TABLES in MySQL zu überprüfen. Überprüfen Sie das Feld DATA_FREE. Wenn es größer als 0 ist, bedeutet dies, dass eine Fragmentierung vorliegt.

Anregung

Der Löschvorgang sperrt die Tabelle vorübergehend. Je größer die Datenmenge, desto länger dauert es. Sie können ein Skript erstellen und es regelmäßig während der Zeiten mit geringem Zugriff ausführen. Überprüfen Sie beispielsweise jeden Mittwoch im Morgengrauen das Feld DATA_FREE. Wenn es größer ist als der von Ihnen vermutete Warnwert, bereinigen Sie es einmal.

Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht oder kommen Sie zur Diskussion in die Community. Vielen Dank fürs Lesen und ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Das Konzept der MySQL-Tablespace-Fragmentierung und Lösungen für damit verbundene Probleme
  • Analysieren Sie die Ursachen und beseitigen Sie die Fragmentierung in MySQL-Tabellen.
  • Methoden zum Defragmentieren und Freigeben von Speicherplatz in MySQL-Tabellen

<<:  Natives JS zur Implementierung eines Klickzahlenspiels

>>:  Zusammenfassung der Methoden zum Erstellen, Auflisten und Löschen von Docker-Containern unter Linux

Artikel empfehlen

So können Sie lange Vue-Listen schnell laden

Inhaltsverzeichnis Hintergrund Hauptinhalt 1. Kom...

Schwebendes Menü, kann einen Bildlaufeffekt nach oben und unten erzielen

Der Code kann noch weiter optimiert werden. Aus Z...

Einführung in Who-Befehlsbeispiele in Linux

Über wen Zeigt die am System angemeldeten Benutze...

So überprüfen Sie die Festplattengröße und mounten die Festplatte in Linux

Es gibt zwei Arten von Festplatten in Linux: gemo...

Implementierung der Docker-Bereitstellung von Django+Mysql+Redis+Gunicorn+Nginx

I. Einleitung Die Docker-Technologie erfreut sich...

Detaillierte Erklärung der Destrukturierungszuweisung in JavaScript

Inhaltsverzeichnis Konzept Array-Destrukturierung...

Eine kurze Analyse der Verwendung der Zero-Copy-Technologie in Linux

In diesem Artikel werden mehrere wichtige Zero-Co...

Lösung für das Problem ungültiger Breiteneinstellungen für Label und Span

Standardmäßig ist die Einstellung der Breite für B...

Beispiel für eine Methode zum Festlegen von MySQL-Fremdschlüsseln

1. Methode zum Festlegen des Fremdschlüssels 1. U...

VMware Workstation-Installation unter Linux

Vom Einsteiger bis zum Neueinsteiger ist das Linu...

js-Methode zur Realisierung der Warenkorbberechnung

In diesem Artikelbeispiel wird der spezifische Co...