2017-11-21 4 views
0

Auf dem gleichen MySQL (V. 5.5) Dienst habe ich mehrere Datenbanken.MySQL 5.5: "Freier Speicherplatz" für Tabelle reserviert?

Eine dieser Datenbanken hat eine Tabelle mit 29'000'000 Datensätzen (3,3 GiB).

Wenn ich einige Datensätze lösche, scheint MySQL den freien Speicherplatz nur für die aktuelle Tabelle zu reservieren. Ich sehe in Tabelle Inspektor (MySQL Workbench): Data Free 1.4 GiB.

enter image description here

Ich bin falsch oder der Raum durch eine Tabelle verwendet wird, nie von anderen Tisch oder einer anderen Datenbank wiederverwendet?

Antwort

1

Im Gegensatz zu einigen anderen Engines beansprucht InnoDB im Allgemeinen keinen freien Speicherplatz, was bedeutet, dass Ihre Tabellen, sobald sie in einer bestimmten Größe sind, ziemlich dauerhaft dort verbleiben. Eine Möglichkeit, diesen Speicherplatz wiederherzustellen, ist der etwas schmerzhafte Befehl OPTIMIZE TABLE, mit dem die Tabelle neu erstellt und neu indiziert werden kann.

Dies sperrt die Tabelle für die Dauer und auf großen Tabellen kann Stunden dauern, also vorsichtig verwenden.

+0

danke für die Antwort. Das passiert auch, wenn ich den Tisch fallen lasse? – ar099968

+0

Wenn Sie die Tabelle löschen und die Option ['file_per_table'] (https://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html) verwenden, sollte sie freigegeben werden der Raum. – tadman

+0

Nein, ich kann file_per_table nicht verwenden ... – ar099968

2

Sie kommentierten, dass Sie nicht innnodb_file_per_table=1 verwenden, sollten Sie wissen, dass die "Daten frei" ist die Menge an freiem Speicherplatz im gesamten Tablespace (ibdata1).

  • Wenn Sie innodb_file_per_table=1 verwenden, dann würde jede Tabelle genau einen Tisch, und der freie Raum berichtete für das Tabelle wäre. In diesem Modus wäre die "Datenfrei" nur für die einzelne Tabelle verfügbar, die in diesem Tablespace gespeichert ist. Wenn Sie innodb_file_per_table=0 verwenden, haben alle Tabellen einen gemeinsamen Systemtabellenbereich (standardmäßig ibdata1 genannt). Die "Daten frei" ist verfügbar, um von jeder Tabelle in diesem Tablespace verwendet zu werden. Wenn Sie beispielsweise eine Tabelle löschen oder löschen, kann der freigewordene Speicherplatz automatisch von einer oder mehreren verschiedenen Tabellen verwendet werden. Sie müssen nichts tun, um den Speicherplatz anderen Tabellen zuzuweisen.

    Auch wenn "Daten frei" für jede Tabelle angezeigt wird, ist der tatsächliche freie Speicherplatz NICHT für jede Tabelle reserviert, noch wird er mit der Anzahl der vorhandenen Tabellen multipliziert.

    Kurz gesagt, es ist freier Speicherplatz per Tablespace, nicht pro Tabelle.

Nur vollständig frei Ausdehnungen in "Data frei" gezählt. Ein Extent ist ein 1-MB-Chunk von Datenseiten. Mit anderen Worten, 64 zusammenhängende Seiten, die standardmäßig jeweils 16 KB groß sind. Es kann andere freie Seiten im Tablespace in kleineren Gruppen geben. Auf einzelnen Seiten kann auch freier Speicherplatz vorhanden sein. Keine davon ist in der Statistik "Daten frei" enthalten.

Verwandte Themen