Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Speicherplatz bei InnoDB wieder freigeben

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Questioner, 28 Oktober 2013.

  1. Questioner

    Questioner Neuer Benutzer

    Hi Leute,

    ich betreibe eine Software (keine Eigenentwicklung), die Textdateien aus einem Verzeichnis einließt und in einer Queue-Tabelle für die weitere Verarbeitung zwischenspeichert. Nach der Verarbeitung einer Datei wird diese aus der Queue-Tabelle gelöscht.

    In aller Regel befinden sich nur wenige Dateien in der Tabelle. Sollte das System aber mal stehen bleiben füllt sich das Verzeichnis kontinuierlich weiter und der Speicherplatz der Queue-Tabelle explodiert etwas, sobald die Dateien dann geballt eingelesen werden.

    Die InnoDB gibt den Speicherplatz aber nach dem Löschen der Datensätze nicht wieder frei... Nach einiger Recherche und viel Zeit habe ich die Datenbank jetzt veranlasst, für jede Tabelle einen eigenen Tablespace anzulegen. Jedoch zeigt sich hier das gleiche Verhalten.

    Gibt es keine Möglichkeit den Speicherplatz wieder freizugeben ohne die gesamte Tabelle zu löschen und einen Dump neu einzuspielen?! Das ist bei derartigen Datenmengen kaum zu bewältigen, zumal ja nochmal zusätzlicher Speicherplatz für den jeweiligen Dump erforderlich ist...

    Liebe Grüße
    Questioner
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du suchst innodb_file_per_table. Das hast scheinbar (noch immer) nicht gesetzt.

    Und ja: Willkommen in der tollen Welt von MySQL!
     
  3. akretschmer

    akretschmer Datenbank-Guru

  4. Questioner

    Questioner Neuer Benutzer

    Hallo akretschmer,

    vielen Dank für die rasche Antwort.
    Doch ich habe innodb_file_per_table gesetzt und das funktioniert soweit auch. Für jede Tabelle wurde eine ibd-Datei erstellt. Wenn ich die Datenbank nun etwas füttere, so wachsen die entsprechenden Dateien, die ibdata1 bleibt jedoch konstant.
    Soweit so gut.

    Doch sobald ich Daten aus einer Tabelle wieder lösche wird die zugehörige ibd-Datei trotzdem nicht wieder kleiner. Fakto bleibt der Speicherplatz belegt. Auch hier müsste ich jetzt wieder hergehen, die Tabelle dumpen, löschen und neu einspielen. Der einzig erkennbare Vorteil ist, dass ich das jetzt mit jeder Tabelle einzeln machen kann/muss und nicht immer mit der ganzen Datenbank und dass ich hierfür den OPTIMIZE-Befehl nutzen kann, was die Arbeit etwas erleichtert.

    Das Grundproblem bleibt aber erhalten: Wenn das System zum stehen kommt, weil der Speicherplatz voll ist (und vorher meldet sich keiner), habe ich auch keinen Platz mehr für einen Dump. Auch OPTIMIZE TABLE macht im Grunde nichts anderes, als die Tabelle in eine Temp-Tabelle zu kopieren, die eigentliche Tabelle zu löschen und anschließend die Daten aus der Temp-Tabelle wieder herzustellen. Somit braucht auch OPTIMIZE-Table zusätzliche Speicherkapazitäten.

    Ich hatte gehofft, die Dateien würden selbständig wieder verkleinert werden, was jedoch ein großer Irrtum war. Und selbst manuell lassen sich die Dateien nicht verkleinern ohne weiteren Speicherplatz zu belegen.

    Liebe Grüße
    Questioner
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Tja, MySQL halt. Ich nutze es nicht und kann Dir hier mangels Wissen / Erfahrung auch nicht weiterhelfen.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden