Heim >Datenbank >MySQL-Tutorial >Detailliertes Beispiel für die Behebung der Tabellenbereichsfragmentierung in MySQL
Ursache der Fragmentierung
Immer wenn eine Zeile mit Inhalten gelöscht wird, wird der Speicherplatz dieses Segments fragmentiert Wird leer, bleibt leer und eine große Anzahl von Löschvorgängen über einen bestimmten Zeitraum führt dazu, dass dieser Leerraum größer wird als der zum Speichern des Inhalts der Liste verwendete Speicherplatz. MySQL versucht, den Leerraum zu verwenden Wenn jedoch ein bestimmter leerer Speicherplatz nicht durch Daten mit angemessener Größe belegt wurde und dieser immer noch nicht vollständig belegt werden kann, wird er fragmentiert, wenn MySQL die Daten scannt. Das gescannte Objekt stellt tatsächlich die Obergrenze der Kapazitätsanforderungen dar In der Liste, dem Teil des geschriebenen Bereichs, der in diesem Artikel an erster Stelle steht, teilen wir Ihnen hauptsächlich die relevanten Informationen zu MySQL-Clearing-Tabellenraumfragmentierungsbeispielen mit. Wir hoffen, dass dieser Artikel allen helfen kann , und Freunde in Not können sich darauf beziehen.
Empfohlene MySQL-Video-Tutorials: „MySQL-Tutorial“
Zum Beispiel:
Eine Tabelle hat 10.000 Zeilen, jede Zeile hat 10 Wörter Der Abschnitt belegt 100.000 Byte Speicherplatz. Wenn der Löschvorgang ausgeführt wird, bleibt nur eine Zeile übrig. Wenn MySQL ihn jedoch liest, wird er weiterhin als 100.000-Byte-Tabelle behandelt Daher gilt: Je größer die Fragmentierung, desto stärker wirkt sich dies auf die Abfrageleistung aus.
Überprüfen Sie die Fragmentgröße der Tabelle
(1) Überprüfen Sie die Fragmentgröße einer bestimmten Tabelle
mysql> SHOW TABLE STATUS LIKE '表名';
Der Wert der Spalte „Data_free“. im Ergebnis steht die Fragmentgröße
(2) Alle fragmentierten Tabellen auflisten
mysql> select table_schema db, table_name, data_free, engine from information_schema.tables where table_schema not in ('information_schema', 'mysql') and data_free > 0;
Tabellenfragmente löschen
(1) MyISAM-Tabelle
mysql> optimize table 表名
(2) InnoDB-Tabelle
mysql> alter table 表名 engine=InnoDB
Die Engine ist unterschiedlich, und die Funktionsweise von OPTIMIZE ist ebenfalls unterschiedlich, da der Index und die Daten getrennt sind und OPTIMIZE organisieren kann und den Index der Datendateien 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 Um den Befehl „Optimieren“ in das Programm einzufügen, unabhängig davon, wie niedrig die Trefferquote eingestellt ist, steigt mit zunehmender Anzahl von Besuchen auch die Gesamttrefferquote, was definitiv einen großen Einfluss auf die Laufeffizienz des Programms hat Eine bessere Möglichkeit besteht darin, eine Shell zu sein und regelmäßig das MySQL-Feld information_schema.TABLES zu überprüfen. Überprüfen Sie das Feld DATA_FREE. Wenn es größer als 0 ist, bedeutet dies, dass eine Fragmentierung vorliegt
Empfehlung
Durch das Löschen der Fragmentierung wird die Tabelle vorübergehend gesperrt. Je größer der Wert, desto länger dauert es. Sie können beispielsweise ein Skript erstellen und es regelmäßig ausführen. Überprüfen Sie am frühen Morgen jedes Mittwochs das Feld DATA_FREE. Wenn es größer als der von Ihnen vermutete Warnwert ist, bereinigen Sie es einmal.
Verwandte Empfehlungen:
mysql-MySQL-Problem beim Löschen des Tabellenbereichs (Version 5.6)
Mysql-Abfrage-Cache-Fragmentierung, Cache Trefferquote und Nagios-Überwachung
Analyse der Ursachen der Fragmentierung in MySQL-Tabellen und Bereinigung_PHP-Tutorial
Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für die Behebung der Tabellenbereichsfragmentierung in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!