Warum die WordPress-Tabelle wp_postmeta so groß wird

Warum die WordPress-Tabelle wp_postmeta so groß wird

Ihre wp_postmeta-Tabelle ist groß, weil einige wenige Meta-Schlüssel groß sind. Fast nie liegt es an „WordPress allgemein“, und selten an den verwaisten Zeilen, mit denen viele Anleitungen beginnen. Finden Sie zuerst die Schlüssel. Die Abfrage dauert eine Sekunde und zeigt Ihnen, ob Sie es mit einem Page-Builder, einem Shop, einer Mediathek oder einem Plugin zu tun haben, das Sie vor zwei Jahren entfernt haben.

Jeder dieser Fälle verlangt eine andere Antwort. Nur ein Teil davon ist Löschen.

Inhaltsverzeichnis

  1. Erst messen, dann bereinigen
  2. Welche Schlüssel meist am schwersten sind
  3. Verwaiste Zeilen: Metadaten ohne Beitrag
  4. Auch Revisionen tragen Metadaten
  5. Altlasten entfernter Plugins
  6. Einen Schlüssel löschen, ohne Nebenwirkungen
  7. Warum die Tabelle auf der Festplatte nicht schrumpft
  8. Überprüfung
  9. AIOWS Database Cleaner
  10. Häufige Fragen
  11. Quellen

Erst messen, dann bereinigen

Sie brauchen zwei Abfragen, und beide lesen nur. Sie führen sie in phpMyAdmin oder Adminer aus. Bei den meisten Hostern öffnen Sie phpMyAdmin aus dem Kundenbereich, beim Datenbank-Eintrag Ihrer WordPress-Installation. Dort wählen Sie links Ihre Datenbank, öffnen den Reiter SQL, fügen die Abfrage ein und klicken auf OK.

Prüfen Sie zuerst Ihr Tabellenpräfix. Es steht als $table_prefixin Ihrer wp-config.phpund ist oft nicht wp_. Alle Abfragen hier verwenden wp_; setzen Sie Ihr eigenes ein.

Wie groß ist die Tabelle, und wie viel davon ist freier Platz?

SELECT table_name,
       ROUND(data_length / 1048576, 1)  AS daten_mb,
       ROUND(index_length / 1048576, 1) AS index_mb,
       ROUND(data_free / 1048576, 1)    AS frei_mb,
       table_rows
FROM information_schema.tables
WHERE table_schema = DATABASE()
  AND table_name = 'wp_postmeta';

Bei InnoDB ist table_rowseine Schätzung. Nutzen Sie den Wert für die Größenordnung, nicht für Ihren Vorher-nachher-Vergleich.

Welche Schlüssel belegen den Platz?

SELECT meta_key,
       COUNT(*)                                    AS zeilen,
       ROUND(SUM(LENGTH(meta_value)) / 1048576, 2) AS wert_mb
FROM wp_postmeta
GROUP BY meta_key
ORDER BY wert_mb DESC
LIMIT 25;

Notieren Sie sich die ersten fünf Schlüssel mit Zeilenzahl und Größe. Am Ende vergleichen Sie damit.

Zeigt jede Zeile 0.00, ist auch das eine Antwort: Ihr Platz steckt nicht in wp_postmeta. Die kleine Testseite für diesen Artikel hatte 136 Zeilen, und jeder Schlüssel ergab gerundet 0.00 MB.

Welche Schlüssel meist am schwersten sind

Das Präfix eines Schlüssels verrät Ihnen, wer ihn geschrieben hat. Ein Unterstrich am Anfang blendet ihn in Ihrer Box „Benutzerdefinierte Felder“ aus. Er sagt Ihnen nicht, dass der Schlüssel unwichtig ist.

SchlüsselmusterGeschrieben vonInhaltLöschen?
_elementor_data, _elementor_*ElementorDas ganze Seitenlayout als JSON, je Seite und je RevisionNein. Das ist Ihre Seite.
_wp_attachment_metadataWordPressGrößen und Dateinamen jeder BildgrößeNein. Ihre Bilder verlieren ihre Größen.
_oembed_, _oembed_time_WordPressZwischengespeichertes HTML eingebetteter LinksJa. WordPress holt es beim nächsten Aufruf neu.
_edit_lock, _edit_lastWordPressWer gerade bearbeitet, wer zuletzt bearbeitet hatEgal, und winzig.
_yoast_wpseo_, rank_math_SEO-PluginsTitel, Beschreibungen, BewertungenNein, solange Sie das Plugin nutzen.
_price, _regular_price, _sku, _stockWooCommerceProduktdatenNein.
_billing_, _order_, _customer_ip_addressWooCommerce, nur bei der alten BestellspeicherungBestellungen und KundendatenNein. Siehe den Hinweis unten.
Schlüssel eines entfernten Pluginsdieses Pluginseine Einstellungen je BeitragErst nach der Prüfung unter Altlasten.

Ist Ihr größter Schlüssel der eines Page-Builders, ist Ihre Tabelle groß, weil Ihre Seiten groß sind. Löschen hilft Ihnen dann nicht, weniger Revisionen vielleicht schon. Steht _oembed_*oben, können Sie den Cache gefahrlos leeren. Kennen Sie den Schlüssel nicht, lesen Sie den Abschnitt über Altlasten, bevor Sie ihn anfassen.

Wo WooCommerce Ihre Bestellungen ablegt, sehen Sie unter WooCommerce› Einstellungen› Erweitert› Funktionen, bei „Datenspeicher für Bestellungen“. Auf der Testseite mit WooCommerce 11.2.1: – mit Speichern als WordPress-Beiträge (alt)schrieb eine Bestellung 25 Zeilen in wp_postmeta, sechs davon _billing_*; – mit Leistungsstarke Speicherung von Bestellungenschrieb eine neue Bestellung keine. Ihre Anschrift landete in der Tabelle wc_order_addresses.

Produkte behalten ihre Meta-Daten in jedem Fall in wp_postmeta. Der Wechsel auf die neue Speicherung ließ die Zeilen der alten Bestellung liegen, und WooCommerce führte sie als zu bereinigen.

Ein Hinweis für Shops.Speichert Ihr Shop Bestellungen noch als WordPress-Beiträge, halten Zeilen wie _billing_*und _customer_ip_addressNamen, Anschriften und IP-Adressen Ihrer Kunden. Das sind personenbezogene Daten im Sinne der DSGVO. Löschen Sie sie nicht nebenbei bei einer Bereinigung, und behalten Sie sie nicht länger, als Ihre Aufbewahrungspflichten es verlangen. Diese Entscheidung gehört zu Ihrer Datenschutz- und Buchhaltungspraxis, nicht zur Datenbankpflege.

Verwaiste Zeilen: Metadaten ohne Beitrag

Eine verwaiste Zeile hat eine post_id, die es in wp_postsnicht mehr gibt. WordPress erzeugt solche Zeilen nicht selbst: Wenn Sie einen Beitrag löschen, entfernt wp_delete_post()seine Metadaten gleich mit. Verwaiste Zeilen stammen aus Beiträgen, die jemand per SQL gelöscht hat, aus abgebrochenen Importen und aus Plugins, die ihre eigenen Beitragstypen falsch löschen.

Zählen Sie nach, bevor Sie annehmen, dass Sie welche haben:

SELECT COUNT(*) AS verwaiste_zeilen,
       ROUND(SUM(LENGTH(pm.meta_value)) / 1048576, 2) AS verwaiste_mb
FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;

Sind es ein paar hundert Zeilen und ein Bruchteil eines Megabytes, ist das nicht Ihr Problem. Entfernen Sie sie ruhig, aber kehren Sie dann zu Ihrer Schlüsselliste zurück. Ist es ein großer Teil der Tabelle, haben Sie Ihre Ursache gefunden.

Wenn Sie auch die anderen Meta-Tabellen prüfen möchten, führt Sie verwaiste Metadaten in WordPress sicher findendurch alle.

Auch Revisionen tragen Metadaten

Jede Revision, die Sie speichern, ist eine Zeile in wp_postsmit post_type = 'revision'. Page-Builder legen zu vielen dieser Revisionen eine Kopie ihrer Layout-Daten ab. Hat Ihre Seite 60 Revisionen, kann sie 60 Kopien ihres _elementor_datamit sich tragen.

Zählen Sie je Beitrag, bevor Sie etwas löschen:

SELECT p.post_parent, COUNT(*) AS revisionen
FROM wp_posts p
WHERE p.post_type = 'revision'
GROUP BY p.post_parent
ORDER BY revisionen DESC
LIMIT 10;

Löschen Sie Revisionen über WordPress, ein Plugin oder WP-CLI, nicht mit einem nackten DELETE FROM wp_posts. Der WordPress-Weg nimmt ihre Metadaten mit. Der SQL-Weg lässt sie als verwaiste Zeilen zurück, und Sie stehen wieder im vorigen Abschnitt.

Damit die Tabelle nicht weiter wächst, begrenzen Sie die Revisionen in Ihrer wp-config.php:

define( 'WP_POST_REVISIONS', 10 );

Das ganze Vorgehen finden Sie unter alte WordPress-Beitragsrevisionen sicher bereinigen.

Altlasten entfernter Plugins

Hier können Sie sich wehtun. Ein Schlüssel, den Sie nicht kennen, sieht nach Abfall aus. Manchmal gehört er zu etwas, das bei Ihnen noch läuft: zu einer Theme-Option, einem Snippet in Ihrer functions.phpoder einem Plugin, dessen Name mit dem Schlüssel nichts zu tun hat.

Bevor Sie einen Schlüssel löschen, klären Sie drei Dinge:

  1. Wer ihn geschrieben hat.Suchen Sie den Namen im installierten Code. Mit WP-CLI oder Shell-Zugang: grep -r "ihr_meta_key" wp-content/. Findet die Suche in wp-contentnichts, liest ihn sehr wahrscheinlich nichts Aktives mehr.
  2. Dass ihn nichts liest.Ein Treffer in einem Plugin, das Sie nicht mehr nutzen, ist in Ordnung. Ein Treffer in Ihrem aktiven Theme oder in einem Must-Use-Plugin heißt: aufhören.
  3. Wie viele Beiträge ihn tragen.Ein Schlüssel an jedem Ihrer Beiträge ist eine Einstellung. Ein Schlüssel an zwölf Beiträgen aus 2019 ist eine Altlast.

Ein deaktiviertes Plugin entfernt seine Metadaten nicht. Löschen Sie es über die Plugin-Seite, läuft seine Deinstallationsroutine, sofern es eine hat. Viele haben keine.

Einen Schlüssel löschen, ohne Nebenwirkungen

Erstellen Sie zuerst ein Datenbank-Backup, und stellen Sie sicher, dass Sie es zurückspielen können. Dieser Schritt macht jeden anderen Fehler hier umkehrbar. Wie Sie ein Backup erstellen und prüfen, zeigt WordPress-Datenbank sichern und den SQL-Export prüfen.

Arbeiten Sie dann Schlüssel für Schlüssel. Führen Sie Ihr SELECTaus und lesen Sie die Zahl. Danach Ihr DELETEmit genau demselben WHERE:

SELECT COUNT(*) FROM wp_postmeta WHERE meta_key = 'alter_plugin_key';

DELETE FROM wp_postmeta WHERE meta_key = 'alter_plugin_key' LIMIT 5000;

Wiederholen Sie das DELETE, bis es 0 betroffene Zeilen meldet. Das LIMIThält jede Anweisung kurz, damit das Zeitlimit Ihres Hosters sie nicht mitten im Lauf abbricht. Bricht ein langer Lauf trotzdem ab, hilft Datenbankbereinigung hängt oder endet mit einem Timeout.

Für den Embed-Cache nehmen Sie ein Muster statt einer Liste:

DELETE FROM wp_postmeta WHERE meta_key LIKE '\_oembed\_%' LIMIT 5000;

Sie brauchen die Backslashes. In LIKEsteht ein Unterstrich ohne Backslash für ein beliebiges Zeichen, und '_oembed_%'trifft dann auch Schlüssel, die Sie nicht gemeint haben.

Warum die Tabelle auf der Festplatte nicht schrumpft

Nach einem großen Löschvorgang bleibt die Datengröße oft gleich. InnoDB behält die frei gewordenen Seiten zur Wiederverwendung, statt sie an Ihr Dateisystem zurückzugeben. Die erste Abfrage oben zeigt sie Ihnen als frei_mb.

OPTIMIZE TABLE wp_postmeta;baut die Tabelle neu auf und gibt den Platz zurück, wenn Ihr Server jede Tabelle in einer eigenen Datei speichert. Bei aktuellem MySQL und MariaDB ist das die Voreinstellung. Bei einer großen Tabelle dauert der Neuaufbau und kann Schreibzugriffe sperren. Wählen Sie dafür eine ruhige Stunde. Mehr dazu unter WordPress-Datenbanktabellen sicher optimieren.

Sie müssen nicht nach jeder Bereinigung optimieren. Freier Platz in der Tabelle wird von Ihren nächsten Einträgen wieder genutzt. Wichtig wird er erst, wenn Sie den Speicher zurückbrauchen, etwa weil ein Backup am vollen Speicher scheitert.

Überprüfung

Ihre Bereinigung ist fertig, wenn sich die Zahlen bewegt haben und Ihre Website nicht.

PrüfungErwartet
Schlüssel-Abfrage erneut ausführenDie gelöschten Schlüssel fehlen. Alle anderen haben dieselbe Zeilenzahl wie vorher.
Verwaisten-Zählung erneut ausführen0, wenn Sie verwaiste Zeilen bereinigt haben.
Drei Seiten öffnen: eine mit dem Page-Builder gebaute, eine mit Bildern, ein Produkt, falls Sie einen Shop betreibenAlle drei sehen aus wie vorher.
Einen Schlüssel eines lebenden Beitrags, den Sie nicht bereinigt haben, vorher und nachher zählenDarf sich nicht ändern.Ist die Zahl gesunken, war Ihr WHEREweiter gefasst als gedacht. Spielen Sie das Backup zurück.

Auf die letzte Zeile kommt es an. Eine Bereinigung, die die richtigen Zeilen entfernt, beweist für sich nichts. Sie muss die falschen Zeilen auch stehen lassen, und das zeigt Ihnen nur der Vorher-nachher-Vergleich eines Schlüssels, den Sie nicht angefasst haben.

Auf der Testseite hielt die vierte Zeile beide Male. Nach einem Lauf der Datenbankbereinigung blieb der nicht betroffene Schlüssel bei 7 Zeilen, und ein Köder-Schlüssel, den ein Muster ohne Backslashes träfe, blieb bei 1. Nach dem manuellen DELETEoben, genau so eingegeben, verschwanden 3 Zeilen, der nicht betroffene Schlüssel blieb bei 14 und der Köder bei 2. Ohne Backslashes traf dasselbe Muster 5 Zeilen, die Köder eingeschlossen.

Wie AIOWS unterstützt:

AIOWS Database Cleaner

Database Cleaner, in der deutschen Oberfläche „Datenbankbereinigung“, nimmt Ihnen den Routineteil dieses Artikels ab, damit Ihre Aufmerksamkeit bei dem Teil bleibt, der sie braucht.

Er übernimmt die Löschungen ohne Ermessensfrage.Zwei seiner elf Aufgaben sind die sicheren aus diesem Artikel. Verwaiste Beitragsmetadaten entfernt die Zeilen in wp_postmeta, deren Beitrag nicht mehr existiert, und sonst nichts. oEmbed-Cache entfernt die _oembed_-Schlüssel mit maskiertem Unterstrich, die LIKE-Falle von oben kann Sie also nicht treffen. Beitragsrevisionen löscht über WordPress selbst, das die Metadaten jeder Revision mitnimmt, und kann die neuesten Revisionen jedes Beitrags behalten.

Er zeigt Ihnen zuerst die Zahl.Jede Aufgabe zeigt, wie viele Zeilen sie entfernen würde, gezählt mit denselben Bedingungen wie das Löschen. Eine Aufgabe ohne Treffer können Sie nicht auswählen. Bevor die verwaisten Metadaten gehen, listet die Bestätigung die Schlüssel mit den meisten verwaisten Zeilen und die Beitrags-IDs, auf die sie zeigten. Das ist Ihr letzter Blick darauf, was die Waisen einmal waren.

Er sichert zuerst, jedes Mal.Jede Bereinigung beginnt mit einem Backup der betroffenen Tabellen. Lässt es sich nicht schreiben, wird nichts gelöscht.

Optimieren bleibt getrennt.Tabellen optimieren ist eine eigene Schaltfläche. Sie bereinigen, vergleichen Ihre Zahlen und geben den Platz zurück, wann Sie wollen.

Die Aufgabenliste der Datenbankbereinigung mit der Anzahl je Aufgabe; Aufgaben ohne Treffer sind ausgegraut.
Jede Aufgabe zeigt ihre Anzahl, bevor Sie sie auswählen.

Die Bestätigung für verwaiste Beitragsmetadaten lautete wörtlich:

Dieser Vorgang erstellt zuerst ein Datenbank-Backup und löscht dann die ausgewählten Elemente dauerhaft. Sind Sie sicher?

Verwaiste Beitragsmetadaten, die gelöscht werden, nach Schlüssel:
orphan_test_0 ×17
orphan_test_1 ×17
orphan_test_2 ×16
Beitrags-IDs 100.007–100.011, 5 Objekte

Seine Grenzen, offen gesagt. Er entscheidet nicht, welche Meta-Schlüssel Ihrer lebenden Beiträge Altlasten sind. Schlüssel entfernter Plugins, doppelte Zeilen und verwaiste Term- oder Benutzer-Metadaten gehören nicht zu seinen Aufgaben. Die bleiben bei Ihnen, Schlüssel für Schlüssel, wie im Abschnitt über Altlasten beschrieben. Medien im Papierkorb löscht er nicht, weil ein Datenbank-Backup die Dateien nicht zurückbringt. Den Papierkorb der Mediathek leeren Sie selbst. Und er sagt Ihnen nicht, warum Ihre Tabelle gewachsen ist. Das zeigt Ihnen die Schlüssel-Abfrage am Anfang, und die lohnt sich vor jedem Werkzeug.

AIOWS Database Cleaner ansehenAIOWS-Pläne vergleichen

Häufige Fragen

Ist eine wp_postmeta-Tabelle mit 500 MB ein Problem?Nicht für sich genommen. Wichtig wird es, wenn Ihre Abfragen auf diese Tabelle langsam werden oder Ihre Backups und Ihr Speicher leiden. Die Schlüsselliste zeigt Ihnen, ob die Größe Inhalt ist, den Sie brauchen, oder Daten, die weg können.

Kann ich alle Schlüssel mit Unterstrich löschen?Nein. Der Unterstrich blendet einen Schlüssel nur in Ihrer Box für benutzerdefinierte Felder aus. Ihre Bilder, Layouts und Shopdaten liegen alle in solchen Schlüsseln.

Macht das Löschen verwaister Metadaten etwas kaputt?Nein, wenn Ihre Abfrage wie oben mit wp_postsverknüpft. Eine verwaiste Zeile gehört zu keinem Beitrag, Ihre Website kann sie also nirgends anzeigen.

Warum ist die Tabelle nach der Bereinigung gleich groß?InnoDB behält den frei gewordenen Platz in der Datei. OPTIMIZE TABLEgibt ihn zurück. Siehe Warum die Tabelle nicht schrumpft.

Macht eine große wp_postmeta-Tabelle meine Website langsam?Sie kann Ihre Abfragen verlangsamen, die nach Meta-Werten filtern, etwa manche Shop- und Suchabfragen. Seiten aus Ihrem Cache betrifft das nicht. Messen Sie, bevor Sie es annehmen.

Quellen

Ähnliche Beiträge

All in One WP Settings holenZum Plugin