Opkuisen van je wordpress database

Voor vele bloggers is het onderhouden van hun WordPress blogsoftware niet meer, dan zo nu en dan eens de nieuwste versie van wordpress eropzetten en alle plugins updaten.

Dat je ook eens even naar de achterliggende mysql database dient te gaan kijken, is mijn toptip voor dit aankomende verlengde weekend.

Een tijdje geleden was ik mijn database even aan het analyseren en merkte ik dat de database van deze blog maar liefst 400MB groot was geworden met enkele tabellen met vele honderduizenden records… Euhm hallo slechte performance!

Tijd dus om wat te tweaken en op te kuisen!

Spamcomments en post revisions opkuisen

Wanneer je een anti-spam plugin, zoals bijvoorbeeld, Akismet, dan gaan spamcomments mooi apart geplaatst worden. Dit kan na verloop van tijd een groot aantal aan spamcomments worden. Als je ziet dat op deze blog alleen al Akismet door de jaren heen bijna 200.000 spamcomments heeft tegengehouden.
Akismet

Een andere bron van groeiende databasevervuiling zijn de post revisions. Telkens je een blogpost begint/bewerkt, gaat wordpress automatisch post revisions hiervan bijhouden. Super handig als je per ongeluk je browser afsluit, maar ook weer na verloop van tijd een groeiende database.

Je kan deze 2 zaken manueel gaan opkuisen, maar ik gebruik hiervoor de Managewp remote wordpress tool, om dit ineens over al mijn wordpress websites te gaan opkuisen.
managewp

Log tabellen van plugins

Een andere bron van een groeiende database vervuiling , zijn logtabellen van plugins.

Plugins met logtabellen op deze blog, die zorgde voor vele duizenden logrecords:

  • Redirection plugin: deze heeft een logtabel met alle 404’s op je website
  • Pretty link plugin: Deze plugin heeft ook een logtabel met alle hits op aangemaakt “pretty” links.

Check dus zeker even de plugins, die je gebruikt over er hier geen door de jaren groeiende logtabel achterzit, die zorgt voor een vollopende database.
Weet je nog een dergelijke plugin, laat dit dan zeker in de comments achter.

Akismet bug die zorgde voor duizenden wees-records

Via het hostingpaneel van je blog, kan je normaal via de tool phpmyadmin de database van je blog gaan bekijken en onderhouden. Op deze manier kan je dan ook gaan bekijken welke en hoeveel records er in elke tabel te vinden zijn.

Tijdens het nakijken en opkuisen van mijn database, zag ik dat er zich vooral een probleem stelde met de commentmeta-tabel, die maar liefst 160.000 records had, terwijl de comments-tabel maar 3800 records had.
commentmeta

Dit blijkt een bug geweest te zijn in de Akismet anti-spam plugin enkele jaren geleden. De Akismet anti-spam plugin, ging wel spam-comments verwijderen in de comments-tabel, maar niet het bijhorende record in de commentmeta-tabel, waardoor deze is blijven aangroeien.

Heb je dus een wordpressblog, die reeds enkele jaren draait en gebruik je de Akismet plugin, dan zal je vermoedelijk eenzelfde databaseprobleem gaan aantreffen tussen deze 2 tabellen.

Hoe kan je dit oplossen?
In de databasetool phpmyadmin, kan je ook sql-statements gaan uitvoeren op je mysql wordpressdatabase. Een overzicht van enkele handige en leuke sql-statements kan je reeds in een blogpost vinden op dailybits.

LET op! Het uitvoeren van sql-commando’s op je database, kan voor serieuze fuckups zorgen. Een goede raad is om altijd eerst een export te doen van je mysql-database, zodat je een backup van je database hebt.

We gaan nu eerst eens nakijken hoe groot de impact is van deze Akismet-bug op jou database, door het uitvoeren van volgende sql-commando:

Select * FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments)

In mensentaal: Geef alle records uit de commentmeta tabel, waar er geen link meer bestaat met een record in de comments tabel (zogenaamde orphan records).

In mijn geval kwamen er 158.000 records uit deze databasequery. Deze kan je dan verwijderen door dit statement te gaan uitvoeren:

DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments)

phpmyadmin - akisimet cleanup

Nadat je deze records hebt verwijderd, zal de vrijgekomen plaats in je database nog steeds toegewezen zijn aan die tabel (dat is die laatste overhead kolom in het tabellen overzicht). Via het selecteren van de tabel en het uitvoeren van een optimalisatie-actie, kan je deze overhead ruimte ook daadwerkelijk gaan verwijderen (in mijn geval dus maar liefst 367MB!).
optimaliseer mysql

Het resultaat

Het resultaat van deze actie om mijn mysql database eens te gaan opkuisen was direct zichtbaar. Kijk maar eens naar de wekelijkse backupfile (met mijn themebestanden, de belangrijke configbestanden en mysql database van mijn blog), die door BackWPup wordt aangemaakt.
phpmyadmin backup

De backup is gevoelig verkleind, de database draait beter en ik heb bijna 400MB in hostingruimte vrijgemaakt.

 

Dus je weet wat doen dit aankomende verlengde weekend… 😉 Als je nood aan support hebt, dan contacteer je me maar.


Gerelateerde berichten

Herman Maes - online marketeer seo freelancer

Herman Maes

Online marketeer en (tech)blogger sinds 2002. Zelfstandige in bijberoep met Daily Bits sinds 2012. Overdag SEO/Hubspot/Marketing Technology Teamlead en thuis de papa van een zoon en een dochter.

5 comments

Submit a comment

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *