WordPress Datenbank entschlacken

WordPress Logo

Die Versionsverwaltung von WordPress ist eigentlich eine gute Sache. Jedoch werden gerade geöffnete Artikel und Seiten alle 60 Sekunden automatisch gespeichert. Auch bei jeder nachträglichen Bearbeitung wird jedes mal eine neue Revision des Artikels erstellt. Dadurch wird die Datenbank mit der Zeit ganz schön zugemüllt.

Mit zwei kleinen Einträgen in der wp-config.php lässt sich dies jedoch leicht anpassen.

// Limitiert die Anzahl der gespeicherten Versionen je Artikel
define('WP_POST_REVISIONS', 5);
// Intervall der automatischen Speicherung in Sekunden
define('AUTOSAVE_INTERVAL',300);

Setzt man WP_POST_REVISIONS auf false, wird die Versionsverwaltung komplett abgeschaltet.

Um die Datenbank von Hand zu säubern, kann man alle alten Versionen löschen. Dazu verwendet man am besten phpMyAdmin. Einfach folgende SQL-Befehle direkt auf der Datenbank ausführen:

DELETE FROM wp_posts WHERE post_type = "revision";
DELETE FROM wp_posts WHERE post_status = "auto-draft"

Alle gespeicherten Versionen (bis auf die aktuelle) werden somit gelöscht. Je nach Situation spart man dadurch einiges an Platz. Mein WordPress Datenbankbackup benötigt seit der Säuberung nur noch rund 0,9 MByte – vorher 1,5 MByte.

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter, Facebook, Google+ und Google+ (privat) folgt.

12 Antworten

  1. Didi sagt:

    Hi, beim Veröffentlichen bzw. beim Aktualisieren eines Artikels wird dieser ja gespeichert. Manchmal erscheint bei mir eine hellrote Leiste mit dem Hinweis, dass schon eine andere Version automatisch gespeichert worden sei. Das nervt. An sich reicht es doch aus, wenn der betreffende gerade erstellte oder auch der nachträglich bearbeitete Artikel ein paar wenige Male gespeichert wird. Lohnt sich dafür nicht die automatische oben beschriebene minimalisierte Speicherung?
    Andererseits ist der Unterschied zwischen 1,5 und 0,9 MB ja nun auch nicht gerade groß. Das dürfte Deine Speicherkapazität nicht gerade überfordern, es sei denn, ältere Artikel-Versionen verlangsamten die Performance insgesamt. Ist das so?

  2. Tobi sagt:

    Im Prinzip hast du recht. Ich habe bei mir auch festgelegt, dass maximal 10 Versionen eines Artikels gespeichert werden dürfen. Zudem habe ich auch die automatische Speicherung auf fünf Minuten erhöht.
    Ich sollte noch anmerken, dass sich die Größe des Backups auf den komprimierten Zustand bezieht. Da ich mir täglich ein Backup per Mail zuschicken lasse ist die Größenreduktion recht hilfreich für mich.
    Performanceeinbrüche durch viele Versionen wird es wenn dann nur im Backend geben. Bei einigen Artikeln hatte ich teilweise über 30 Versionen, was wirklich nicht sein muss. Darum habe ich einfach mal klar Schiff gemacht 😉

  3. Didi sagt:

    Könntest Du bitte noch mitteilen, an welcher Stelle der Datei ich die o .g. Zeilen am Besten einfüge? Vielleicht gleich oben bei den anderen Zeilen, die mit „define“ beginnen?

  4. Tobi sagt:

    Am besten direkt unterhalb der define-Statements, aber unbedingt oberhalb von:
    /* That’s all, stop editing! Happy blogging. */

  5. Didi sagt:

    Ok, das scheint zu klappen.
    Bei der Säuberung erhalte ich allerdings nach Eingabe in das Feld unter „SQL-Befehl(e) in Datenbank „datenbank“ ausführen:“ folgende Fehlermeldung:

    Fehler
    SQL-Befehl:

    DELETE FROM wp_posts WHERE post_type = „revision“

    MySQL meldet:

    #1146 – Table ‚datenbank.wp_posts‘ doesn’t exist

  6. Tobi sagt:

    Vermutlich hast du ein anderes Prefix für die Tabellen. Das Prefix findest du auch in der wp-config.php. Dann musst du den Befehl entsprechend dem richtigen Prefix ändern.

    Beispielsweise:
    DELETE FROM wordpress_posts WHERE post_type = “revision”

  7. Didi sagt:

    Ähem, jetzt wird’s etwas schwieriger. Ich nutze die deutsche WordPress-Version. In der Datei fand ich folgende Angabe:
    * WordPress Datenbanktabellen-Präfix.
    *
    * Wenn du verschiedene Präfixe benutzt, kannst du innerhalb einer Datenbank
    * verschiedene WordPress-Installationen betreiben. Nur Zahlen, Buchstaben und Unterstriche bitte!
    */
    $table_prefix = ‚wp_1‘;

    Wie müsste, vorausgesetzt, ich habe das Richtige gefunden, der Befehl lauten?

  8. Tobi sagt:

    DELETE FROM wp_1posts WHERE post_type = “revision”

  9. Didi sagt:

    Leider nicht gewonnen. Aber ich will Dich nicht weiter nerven. Vielen Dank für die geopferte Zeit.
    SQL-Befehl:

    DELETE FROM wp_1posts WHERE post_type = “revision”

    MySQL meldet:

    #1054 – Unknown column ‚“revisionâ€

    • Tobi sagt:

      So wie ich das sehe ist der Befehl nun richtig, nur die Anführungszeichen machen noch Probleme. Falls du den Befehl kopiert hast, kannst du versuchen ihn einfach abzuschreiben, dann sollte es klappen!

  10. Marco sagt:

    Oh ja, meine Seite „Cinematic“ in meinem Blog ändere ich auch sehr häufig. Sodass dort im laufe der Zeit (seit 2007) bestimmt ca. 130 Revision angelaufen sind.

  11. Didi sagt:

    @Tobi: Das war der Elektriktrick. Hat geklappt! Von 3,0 MB auf 1,09 MB. Vielen Dank noch einmal!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.