Frage

Ich habe mehrmals gelesen, dass, nachdem Sie eine Zeile in einer InnoDB-Tabelle in MySQL löschen, sein Platz nicht wiederverwendet wird, so dass, wenn Sie eine Menge von Einfügungen in eine Tabelle machen und dann DELETE regelmäßig einige Zeilen die Tabelle mehr wird verwenden und mehr Platz auf der Festplatte, als ob die Zeilen überhaupt nicht gelöscht wurden.

Vor kurzem habe ich gesagt, aber, dass der Raum, der von gelöschten Zeilen belegt wird wiederverwendet, sondern erst nach einigen Transaktionen abgeschlossen sind und selbst dann - nicht vollständig. Ich bin jetzt verwirrt.

Kann jemand bitte Sinn für dieses mir machen? Ich brauche eine Menge INSERTs in eine InnoDB-Tabelle zu tun, und dann alle X Minuten, die ich brauche Datensätze zu löschen, die mehr als Y Minuten alt sind. Habe ich ein Problem der ständig wachsende InnoDB-Tabelle hier, oder ist es Paranoia?

War es hilfreich?

Lösung

Es ist Paranoia:)

DB wächst nicht unnötig groß, aber für Performance-Probleme Raum ist entweder nicht befreit.

Was haben Sie wahrscheinlich gehört, dass, wenn Sie Datensätze löschen, die Raum nicht gegeben zurück an das Betriebssystem . Stattdessen ist es als ein leerer Raum für die DB danach wieder zu verwenden, gehalten.

Das ist, weil:

  • muss DB einig HD Raum haben, seine Daten zu speichern; wenn es keinen Platz hat, behält sie etwas leeren Raum auf den ersten.
  • Wenn Sie eine neue Zeile einzufügen, ist ein Stück dieses Raumes verwendet.
  • Wenn Sie aus freier Speicherplatz ausführen, wird ein neuer Block reserviert, und so weiter.
  • Jetzt , wenn Sie einige Zeilen löschen, um mehr und mehr Blöcke der Reservierung zu verhindern, wird sein Platz frei, aber nie wieder an das Betriebssystem gegeben gehalten, so dass Sie es später noch einmal verwenden können, ohne keine Notwendigkeit neue Blöcke zu reservieren.

Wie Sie sehen können, Raum ist wieder verwendet, aber nie wieder gegeben. Das ist der entscheidende Punkt, um Ihre Frage.

Andere Tipps

in innodb, gibt es keine praktische Möglichkeit, den Raum frei.

Alle diese Methoden werden unpraktisch, wenn Sie große Tabellen verwenden (in meinem Fall sind sie mehr als 250 GB), und Sie müssen sie zu löschen Aufzeichnungen zu einer besseren Leistung.

Du musst ernsthaft darüber nachdenken, ob Sie auf Ihrer Festplatte genügend Platz haben, eine der oben genannte Funktion auszuführen (in meinem Fall ich glaube nicht, 1TB ist genug für all diese Aktionen)

mit InnoTab Tabelle (und MySQL selbst) ist die Option ziemlich begrenzt, wenn schwerwiegende Datenbankgröße hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top