info@netz-gaenger.de       📞 +49 151 / 28859057

Duplikate von WordPress Meta Keys (Custom Fields) per Datenbank bereinigen

Manchmal läuft der Speicher in WordPress über, weil massenweise duplizierte Einträge von Custom Fields (Meta Keys) in den Beiträgen gespeichert werden. Wenn das passiert, hilft nur noch ein Eingriff in die Datenbank.

Ich hatte gestern den interessanten Fall, dass die Übersichtsseite der Beiträge nicht mehr zu laden war, weil der Speicher, trotz üppiger Ausstattung mit 256MB, übergelaufen ist.

PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 4096 bytes) in /html/wp-includes/wp-db.php on line 1995

Die üblichen Tests auf problematische Plugins oder Themes waren ergebnislos. Blieben eigentlich nur noch die Beiträge selbst, die zu Problemen führen konnten. Das Löschen von ein paar Beiträgen hat das Speicherproblem Problem entschärft, aber nicht behoben. Somit war allerdings klar, dass irgendetwas mit den Beiträgen nicht stimmen konnte.

Auf die heiße Spur hat mich gebracht, dass ich manche Artikel quasi nicht mehr laden konnte, bzw. die Ladezeiten massiv gestiegen waren. Sichtbare Probleme gab es erstmal keine. Das Deaktivieren des Plugins „Advanced Custom Fields“ und des „Gutenberg Editor“ und dazu die Aktivierung der Anzeige der Custom Fields hat dann den Schlamassel zu Tage gebracht: Diese Artikel hatten extrem viele Instanzen von gleichen Custom Fields. Weitere Datenbank-Abfragen haben gezeigt, dass teilweise Beiträge mit über 150.000 Custom Fields die Datenbank zugemüllt haben.

Man konnte in einer Übersicht der Beiträge mit den meisten Custom Fields relativ schnell sehen, dass die Custom Fields quasi immer wieder verdoppelt wurden. Das hat darauf geschlossen, dass das Plugin „Duplicate Posts“ Probleme bereitet hat. Allerdings offenbar ausschließlich in der Kombination mit dem Plugin „Popup Builder“. Kurzerhand wurde das Plugin „Duplicate Posts“ gegen „Duplicate Page“ getauscht. Siehe da…keine Probleme mehr.

Kopien von Post Meta Entries per SQL bereinigen

Blieb nur noch die Bereinigung der Tabelle _postmeta. Wichtig war daran zu denken, dass man nicht einfach alles Meta Keys löschen durfte. Man musste die erste Instanz des Keys erhalten, damit der Post überhaupt noch funktioniert. Hier habe ich mich eines SQLs bedient, den ich bei tieferer Recherche im Netz gefunden habe:

DELETE FROM `wp_postmeta` WHERE `meta_id` NOT IN
(SELECT * FROM (SELECT MAX(`pm`.`meta_id`)
FROM `wp_postmeta` pm GROUP BY `pm`.`post_id`, `pm`.`meta_key`) x)

Mit diesem Befehl ließ sich schnell die Datenbank bereinigen und die Übersichtsseite der Posts war wieder erreichbar.

Hat dir mein Beitrag geholfen?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 1 / 5. Anzahl Bewertungen: 1

Letzte Version vom 5. Dezember 2019 von Netzgänger

Beliebte Artikel

Wie gut ist HostPress, der spezialisierte WP Hoster?

Als WordPress-Entwickler habe ich viel mit Hostern zu tun. Hier liest du meine Erfahrungen zu HostPress und warum ich jetzt selber in einigen Projekten auf den Hosting-Anbieter setze.

Die besten Webhoster im Vergleich

Als WordPress Entwickler kenne ich alle guten Hoster. Hier zeige ich dir die besten WP Hoster und welcher für dich Sinn macht.

Muss WordPress gewartet werden?

Müssen WordPress Sites gewartet werden? Braucht es die regelmäßigen Updates oder kann man sich den Aufwand sparen? Das erkläre ich hier.

Die besten WP Security Plugins

WordPress solltest du immer absichern. Dafür gibt es diverse Plugins, die dich bei den Securitymaßnahmen unterstützen. Meine Empfehlungen.

Die besten Plugins für Auto-Übersetzung

Hier zeige ich dir 4 Plugins, die es ermöglichen WordPress automatisch zu übersetzen. Von wirklich gut bis wirklich schlecht ist alles dabei.

Die besten Plugins für Mehrsprachigkeit

Mit diesen 5 Plugins kannst du WordPress ganz einfach selber mehrsprachig einrichten. Multi-Language Fähigkeit in WP nachrüsten.

Bildnachweise: Freepik - Flaticon

Kommentare

Schreibe einen Kommentar

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