Datenbank: wp_commentmeta Aufgrund der wachsenden Zahl an Beiträgen und Kommentaren habe ich mich bislang nie über die ebenfalls ansteigende Größe der MySQL Datenbank dieses Blogs gewundert. Da ich mich nach ein paar Ausfällen meines alten Hosters aber genauer über Backup-Möglichkeiten und Caching-Plugins informiert habe, ist mir kürzlich aufgefallen, dass von rund 110 MB Gesamtgröße über 70 MB allein von der Tabelle wp_commentmeta belegt wurden.

wp_comments in der sich aktuell 1.132 Kommentare befinden, ist dagegen noch nicht mal 1 MB groß und auch wp_posts und wp_postmeta belegen zusammen weniger als 5 MB. Insgesamt verbraucht WordPress also eigentlich recht wenig MySQL Datenbank Speicherplatz.

Eine kurze Google-Suche offenbarte dann, dass die Version 2.5.1 vom Akismet Plugin (welches Kommentar-Spam bekämpfen soll) die wp_commentmeta Tabelle anscheinend nicht mehr richtig geleert hat. Dieser Fehler sorgte dafür, dass die Metadaten von Kommentaren selbst dann nicht gelöscht wurden, wenn die entsprechenden Kommentare schon gar nicht mehr vorhanden waren. Und selbst obwohl ich zwischenzeitlich auf “Antispam Bee” von Sergej Müller gewechselt bin, blieben die alten Einträge von Akismet noch erhalten.

In einem weiteren Thread auf wordpress.org sind einige Lösungsvorschläge gemacht und erklärt worden, wie man die Datenbank und die wp_commentmeta Tabelle selektiv bereinigen kann. Der Großteil der Einträge sollte aus “akismet_result”, “akismet_history”, “akismet_as_submitted”, “akismet_user_result” oder “akismet_user” bestehen, da Akismet offenbar drei Einträge in der wp_commentmeta Tabelle für jeden Kommentar anlegt und sogar fünf Einträge für jeden manuell als Spam markierten Kommentar. Um die Einträge zu finden, die sich auf Kommentare beziehen, die längst gelöscht wurden, kann man in phpMyAdmin Folgendes ausführen:

select count(*) from wp_commentmeta where comment_ID not in
(select comment_ID from wp_comments)

delete from wp_commentmeta where comment_ID not in
(select comment_ID from wp_comments)

Alternativ kann man die wp_commentmeta Tabelle auch einfach komplett leeren. Dies lässt sich entweder ebenfalls über phpMyAdmin bewerkstelligen:

select count(*) from wp_commentmeta where meta_key like ‘%akismet%’

delete from wp_commentmeta where meta_key like ‘%akismet%’

WP-DBManager Screenshotoder man benutzt einfach ein Plugin, wie zum Beispiel “WP-DBManager” von Lester Chan, das auch für Backups und das automatische Optimieren der Datenbank sinnvoll ist. Nach der Installation und Aktivierung, findet sich der Punkt “Database” in der linken Dashboard-Spalte. Dort kann man dann den Unterpunkt “Empty/Drop Tables” auswählen und bei wp_commentmeta “Empty” markieren. Während “Drop” dafür sorgt, dass die ganze Tabelle gelöscht wird, leert “Empty” nur die Inhalte der Tabelle und lässt sie bestehen.

Selbstverständlich sollte man vor allen Änderungen an der Datenbank ein Backup anlegen, was dank WP-DBManager aber leicht und schnell möglich ist.

Seit ich die wp_commentmeta Tabelle dieses Blogs bereinigt habe, ist die Größe nicht mehr übermäßig angewachsen, da der Fehler bei den neuen Versionen des Akismet Plugins behoben wurde. So habe ich nicht nur 70 Megabyte Speicherplatz in meiner MySQL Datenbank gespart, sondern auch die Größe meiner Backups signifikant verringert.

Aufgrund dieses Vorfalls habe ich mir aber vorgenommen, die Tabellen und den Speicherverbrauch der Datenbank nun wenigstens einmal pro Quartal zu überprüfen. Im Normalfall verbraucht WordPress selbst nur wenig Speicherplatz, doch insbesondere Statistik-Plugins oder Plugins mit eingebauter Statistikfunktion(!) häufen schnell größere Datenmengen an, die regelmäßig bereinigt werden sollten.

Tagged with →  
Share →

One Response to Datenbank: wp_commentmeta bereinigen

  1. Markus sagt:

    Wird die Tabelle eigentlich noch von was anderem benutzt außer von Akismet? Bei mir wurde da noch nie was eingetragen und ich ärger mich immer über unnützes Zeug in der DB. Weißt Du da näheres drüber? Hatte Dir damals ja auch im WP Forum geantwortet, aber auch da ist nie jemand drauf eingegangen.

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>