Leistung und Monitoring
SQL-Abfragen zum Bereinigen verwaister Daten in der WordPress-Datenbank
Eine alte WordPress-Datenbank kann Metadaten ohne zugehöriges Objekt, Revisionen und temporäre Daten ansammeln. Alt oder groß heißt nicht entbehrlich. Diese Anleitung hilft, Kandidaten zu finden und eine begrenzte Bereinigung vorzubereiten; sie ist keine Sammlung von Befehlen zum Einfügen in die Produktivumgebung.
Ein Backup vorbereiten und die Website abgrenzen
Prüfen Sie in wp-config.php die tatsächliche Datenbank und das Präfix. Die Beispiele verwenden wp_. In einer Multisite können die Benutzertabellen gemeinsam genutzt werden und jede Website hat ihren eigenen Satz Tabellen: Wenden Sie diese Beispiele nicht an, ohne diese Struktur zu prüfen.
Proben Sie auf einem Klon. Bevor Sie die Produktivumgebung bereinigen, erstellen Sie ein aktuelles Backup und kontrollieren Schreibvorgänge durch Besuche, Cron, Warteschlangen und Integrationen. Eine Wartungsseite stoppt nicht unbedingt alle diese Schreibvorgänge.
Exportieren Sie aus der WordPress-Installation in einen privaten Pfad außerhalb der Web-Stammverzeichnisse. Legen Sie in diesem Beispiel vorher ~/copias-docs mit den Rechten 700 an und prüfen Sie, dass es nicht öffentlich erreichbar ist:
umask 077 wp db export "$HOME/copias-docs/antes-limpieza.sql" && sha256sum "$HOME/copias-docs/antes-limpieza.sql" > "$HOME/copias-docs/antes-limpieza.sql.sha256"
Wenn der Export fehlschlägt, kann die Datei unvollständig sein: Fahren Sie nicht fort. Verwenden Sie neue Dateinamen, um kein früheres Backup zu überschreiben, laden Sie das Backup herunter und prüfen Sie eine Wiederherstellung in einer temporären Datenbank. Die Prüfsumme bestätigt die Integrität, beweist aber nicht, dass die Wiederherstellung funktioniert.
Verwaiste Beitrags-Metadaten untersuchen
Führen Sie zuerst die Zählung und eine Stichprobe in phpMyAdmin aus:
SELECT COUNT(*) AS filas_afectadas FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL; SELECT pm.meta_id, pm.post_id, pm.meta_key FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL LIMIT 50;
Prüfen Sie, warum sie existieren und ob es unvollständige Importe oder Prozesse gibt. Wenn Sie bestätigt haben, dass sie entbehrlich sind, ist dies die entsprechende Löschung:
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL;
Bei großen Tabellen muss der Entwickler begrenzte Stapel vorbereiten und Sperren kontrollieren; führen Sie keine Massenlöschung aus, nur weil die Stichprobe klein ist.
Verwaiste Benutzer-Metadaten untersuchen
SELECT COUNT(*) AS filas_afectadas FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL; SELECT um.umeta_id, um.user_id, um.meta_key FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL LIMIT 50;
Erst nachdem Sie die Treffer, den Multisite-Kontext und das Backup geprüft haben, lautet die entsprechende Löschung:
DELETE um FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL;
Transaktionen und Caches
Wenn alle geänderten Tabellen InnoDB sind, können Sie eine einzelne geprüfte Löschung innerhalb einer Transaktion in derselben Datenbanksitzung proben:
START TRANSACTION;
-- Führen Sie ein einziges geprüftes DELETE aus und kontrollieren Sie die Anzahl.
ROLLBACK;
Verwenden Sie COMMIT erst, wenn die vorgesehenen Prüfungen abgeschlossen sind. MyISAM und Strukturänderungen bieten diese Rückkehrmöglichkeit nicht; konvertieren Sie keine Tabellen als improvisierten Schritt einer Bereinigung. Eine offene Transaktion kann Sperren halten.
Direktes SQL führt die WordPress-APIs nicht aus und aktualisiert nicht alle Caches. Invalidieren Sie nach einer geprüften Bereinigung die betroffenen Caches mit bekanntem Umfang, ohne den Redis anderer Websites wahllos zu leeren.
Leere Schlagwörter
Listen Sie die Schlagwörter einschließlich der leeren auf und prüfen Sie die Spalte count:
wp term list post_tag --hide_empty=0 --fields=term_id,name,count
Ein Wert von null ist ein Kandidat zur Prüfung, kein Löschauftrag: Es kann unveröffentlichte Inhalte oder einen redaktionellen Grund geben, das Schlagwort zu behalten. Um ein bestätigtes Schlagwort zu löschen, verwenden Sie die API über WP-CLI und ersetzen den Platzhalter durch die tatsächliche ID:
wp term delete post_tag ID_REVISADO
Löschen Sie Taxonomie-Beziehungen nicht direkt per SQL. Prüfen Sie anschließend Links, Navigation und verwandte Inhalte.
Beiträge, deren Autor nicht mehr existiert
Löschen Sie sie nicht und weisen Sie nicht alle Inhaltstypen ungeprüft neu zu. Mit dieser Abfrage finden Sie Kandidaten:
SELECT p.ID, p.post_type, p.post_status, p.post_title, p.post_author FROM wp_posts p LEFT JOIN wp_users u ON p.post_author = u.ID WHERE u.ID IS NULL LIMIT 50;
Manche Einträge können legitim den Autor 0 verwenden. Für einen Beitrag, dessen Autorschaft korrigiert werden muss, wählen Sie einen gültigen Benutzer und verwenden die Bearbeitung in WordPress oder wp post update mit den geprüften IDs. So laufen die Vorgänge der Anwendung, die ein direktes UPDATE auslassen würde.
Revisionen und Transients
Um alte Revisionen zu prüfen, verwenden Sie ein UTC-Datum, das zur Spalte passt:
SELECT ID, post_parent, post_modified_gmt FROM wp_posts WHERE post_type = 'revision' AND post_modified_gmt < DATE_SUB(UTC_TIMESTAMP(), INTERVAL 10 DAY) ORDER BY ID LIMIT 50;
Zehn Tage sind nur ein Beispiel. Legen Sie die Aufbewahrung nach Ihrem Bedarf fest und löschen Sie ausgewählte Revisionen mit einem Werkzeug, das die WordPress-APIs verwendet, statt Zeilen aus wp_posts en bloc zu löschen und ihre Metadaten zurückzulassen.
So prüfen Sie Transients, ohne ihre Werte anzuzeigen, und entfernen anschließend nur die abgelaufenen:
wp transient list --fields=name,expiration
wp transient delete --expired
Die Liste enthält auch nicht abgelaufene Transients; prüfen Sie deren Ablaufzeit. Bei persistentem Cache oder Multisite prüfen Sie den Wirkungsbereich des Werkzeugs, bevor Sie interpretieren, was in den Tabellen erscheint.
Prüfen Sie zum Abschluss Frontend, Backend, Benutzer, Bestellungen und Aufgaben. Bewahren Sie das Backup während der Beobachtungszeit auf. Wenn Sie wiederherstellen müssen, koordinieren Sie neue Schreibvorgänge, damit keine Bestellungen oder Änderungen nach dem Backup verloren gehen.
Das könnte Ihnen auch helfen
- Die Leistung der WordPress-Datenbank mit Index WP MySQL For Speed verbessern Bewerten Sie WordPress-Indizes mit Index WP MySQL For Speed, prüfen Sie die Änderungen vor dem Anwen...
- Die Tabelle wp_options und die Autoload-Daten optimieren SQL-Abfragen, um die Autoload-Daten von wp_options zu messen, die Optionen mit dem größten Platzbeda...
- Langsame LEFT-JOIN-Abfragen in WordPress diagnostizieren Analysieren Sie langsame Taxonomie-Abfragen mit LEFT JOIN, vergleichen Sie Pläne und Alternativen au...
- Langsame SQL-Abfragen vom Typ „SELECT SQL_CALC_FOUND_ROWS“ Diagnostizieren Sie langsame WordPress-Abfragen mit SQL_CALC_FOUND_ROWS, finden Sie ihren Ursprung u...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.