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

HTML-strukturierte Implementierungsmethode

DIV+CSS-Struktur Lernen Sie CSS-Layout? Sie beherr...

Methode zur Verhinderung von SSH-Cracking auf Linux-Servern (empfohlen)

1. Der Linux-Server konfiguriert /etc/hosts.deny ...

Erstellen Sie in 5 Minuten einen WebRTC-Videochat

Im vorherigen Artikel habe ich den detaillierten ...

Lösen Sie das Installationsproblem der mysql8.0.19 Winx64-Version

MySQL ist ein kleines relationales Open-Source-Da...

Das Vue-CLI-Framework implementiert eine Timer-Anwendung

Technischer Hintergrund Diese Anwendung verwendet...

Vollbild-Drag-Upload-Komponente basierend auf Vue3

In diesem Artikel wird hauptsächlich die Vollbild...

React führt antd-mobile+postcss ein, um ein mobiles Terminal zu erstellen

Installieren Sie antd-mobile Globaler Import npm ...

Eine detaillierte Einführung in die Tomcat-Verzeichnisstruktur

Öffnen Sie das dekomprimierte Verzeichnis von Tom...