Warum der Speicherplatz nach dem Löschen von Daten in MySQL nicht freigegeben wird

Warum der Speicherplatz nach dem Löschen von Daten in MySQL nicht freigegeben wird

Problembeschreibung

Nach dem Löschen von Daten mithilfe der Löschanweisung in MySQL hat sich der verfügbare Speicherplatz in der Überwachungsansicht nicht erhöht, die Festplattennutzung hat sich nicht verringert usw.

Lösung

Der Grund, warum beim Löschen kein Speicherplatz freigegeben wird, liegt im MySQL-eigenen Mechanismus. Sie müssen die Tabelle neu erstellen, um Speicherplatz freizugeben. Sie können sich auf die folgenden Vorgänge beziehen:

  1. Führen Sie die Optimierung der Tabelle ${table_name} aus.
  2. Wenn es sich um eine InnoDB-Tabelle handelt, führen Sie „alter table ${table_name} engine = innodb“ aus.

Dabei sind zwei Punkte zu beachten:

Beide Befehle erstellen die Tabelle neu. Versuchen Sie, den Vorgang nicht auszuführen, wenn der Speicherplatz knapp ist (> 90 %). Erweitern Sie zuerst die Festplatte und verkleinern Sie sie nach dem Vorgang.
Beide Befehle versuchen am Anfang und am Ende, eine Metadatensperre zu erwerben. Führen Sie sie daher möglichst nicht während der Hauptgeschäftszeiten aus.

Problemanalyse

Im MySQL-Mechanismus werden die durch Löschen gelöschten Zeilen nur als gelöscht markiert. Wenn viele Zeilen gelöscht werden und alle Zeilen der gesamten Datenseite (innodb_page) gelöscht werden, wird die Datenseite nur als gelöscht markiert. Sie wird nicht physisch gelöscht, sondern bleibt die ganze Zeit belegt und wartet auf ihre Wiederverwendung.

Zum Beispiel:

Es ist ersichtlich, dass sich data_length vor und nach dem Löschen nicht ändert, data_free jedoch stark zunimmt. Dies bedeutet, dass die Daten zwar gelöscht, aber nicht freigegeben wurden und noch von der Tabelle test1 belegt sind, aber als frei angezeigt werden. Wenn in Zukunft neue Daten geschrieben werden, können sie direkt wiederverwendet werden, ohne neuen Speicherplatz zu beantragen.

Verwenden Sie zu diesem Zeitpunkt alter table test1 engine = innodb um den Effekt zu sehen:

Sie können sehen, dass data_length und data_free beide zu leeren Tabellen mit nur einer innodb_page (Standard 16 KB) geworden sind.

PS: data_free selbst kann auch verwendet werden, um die Speicherplatzfragmentierung einer Tabelle zu bewerten. Wenn diese Zahl sehr hoch ist, können Sie dieselbe Methode verwenden, um die Tabelle neu zu erstellen und Speicherplatz freizugeben.

Oben finden Sie Einzelheiten dazu, warum der Speicherplatz nicht freigegeben wird, nachdem MySQL Delete Daten gelöscht hat. Weitere Informationen dazu, warum der Speicherplatz nicht freigegeben wird, nachdem MySQL Daten gelöscht hat, finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • MySQL verwendet frm-Dateien und ibd-Dateien, um Tabellendaten wiederherzustellen
  • MySQL-Export ganzer oder einzelner Tabellendaten
  • Beheben Sie das Problem, dass die MySQL-Datenbank unerwartet abstürzt, wodurch die Tabellendatendatei beschädigt wird und nicht gestartet werden kann
  • Lösung für den Fehler beim Starten von MySQL aufgrund unzureichenden Speicherplatzes in Ubuntu
  • Häufige Probleme mit der MySQL-Speicher-Engine MyISAM (Tabellenbeschädigung, Unzugänglichkeit, unzureichender Speicherplatz)
  • So deaktivieren Sie das MySQL-Protokoll, um Speicherplatz unter lnmp zu schützen
  • Mehrere Vorschläge zum Verkleinern von MySQL, um Speicherplatz zu sparen
  • So geben Sie Speicherplatz frei, nachdem Sie Daten in Mysql InnoDB gelöscht haben
  • Warum ist der Speicherplatz nach dem Löschen von Tabellendaten in MySQL immer noch belegt?

<<:  ElementUI implementiert kaskadierenden Selektor

>>:  Rastersysteme im Webdesign

Artikel empfehlen

Zusammenfassung zur Verwendung des MySQL-Autorisierungsbefehls „grant“

So verwenden Sie den MySQL-Autorisierungsbefehl „...

Beispielanalyse der Verwendung gespeicherter MySQL-Prozeduren

Dieser Artikel beschreibt die Verwendung gespeich...

Lösung für den Fehler, dass IE6 select nicht durch div abgedeckt werden kann

Verwenden Sie div, um eine Maske zu erstellen oder...

Detaillierte Erklärung der node.js-Installation und HbuilderX-Konfiguration

Tutorial zur npm-Installation: 1. Laden Sie das N...

Schaltflächen und Dropdown-Menüs für Studiennotizen in Bootstrap 3.0

Der vorherige Artikel war eine einfache Überprüfu...

Detaillierte Erklärung des Flex-Layouts in CSS

Flex-Layout wird auch elastisches Layout genannt....

So aktivieren Sie die MySQL-Remoteverbindung auf einem Linux-Server

Vorwort Lernen Sie MySQL, um frühere Nicht-MK-Dat...

CentOS 7.2 erstellt einen Nginx-Webserver zum Bereitstellen des Uniapp-Projekts

Panther begann als Anfänger und ich bin immer noc...

Win10 Installation Linux System Tutorial Diagramm

Um eine virtuelle Maschine auf einem Windows-Syst...

So implementieren Sie die King of Glory-Personal-Ladeseite mit CSS3

Wer King of Glory gespielt hat, sollte mit der Wi...

Detaillierte Erklärung des CSS3-Rotationswürfelproblems

3D-Koordinatenkonzept Wenn sich ein Element dreht...

Erläuterung des Arbeitsmechanismus von Namenode und SecondaryNameNode in Hadoop

1) Prozess 2) FSImage und Bearbeitungen Nodenode ...