Heim  >  Artikel  >  Datenbank  >  Detailliertes Beispiel für die Behebung der Tabellenbereichsfragmentierung in MySQL

Detailliertes Beispiel für die Behebung der Tabellenbereichsfragmentierung in MySQL

小云云
小云云Original
2017-12-08 12:00:352139Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn