it-swarm.com.de

Langsame Abfrage von wp_term_relationships

Ich führe eine große WP -Instanz aus (derzeit sind 28.000 Posts in benutzerdefinierten Typen vorhanden) und habe einige merkwürdige Verlangsamungen festgestellt. Bei der Analyse des langsamen MySQL-Abfrageprotokolls ist eine der Problemabfragen:

SELECT COUNT(*) FROM wp_term_relationships, wp_posts 
WHERE 
    wp_posts.ID = wp_term_relationships.object_id 
    AND post_status = 'publish' 
    AND post_type IN ('s5_video', 's5_post', 's5_one_liner', 's5_image') 
    AND term_taxonomy_id = 1498

(s5_video, s5_post, s5_one_liner und s5_image sind unsere benutzerdefinierten Typen)

Wenn Sie eine Erklärung für die Abfrage abgeben, erhalten Sie Folgendes:

 enter image description here 

Jetzt sind 23.000 analysierte Zeilen eine Menge, aber nicht schrecklich, insbesondere für eine Abfrage, die nicht zu häufig ausgeführt wird. Tatsächlich dauert die Ausführung der Abfrage in meinen manuellen Tests die meiste Zeit nur etwa 50 ms (vermutlich, weil sie sich noch im Abfrage-Cache von MySQL befindet). Manchmal dauert es jedoch 12-16 Sekunden , bis die Abfrage ausgeführt wird.

Ich habe vermutlich zwei Fragen:

  1. Unser VPS der Mittelklasse verfügt über ausreichend Leistung, um diese Art von Abfragen zu verarbeiten (8 CPUs, 4 GB RAM). Das SQL EXPLAIN-Ergebnis zeigt, dass MySQL tatsächlich die Schlüssel verwendet, um das Ergebnis zu generieren. Ist es angesichts der Kapazität unseres Servers und der Verwendung der Schlüssel nicht etwas extrem, 24-KB-Zeilen in 12 bis 16 Sekunden zu analysieren? (Das sind ungefähr 1500 Zeilen pro Sekunde . Yuck!) Warum passiert das? Ist dies in den großen WP Instanzen eines anderen passiert?

  2. Irgendwelche Vorschläge, was zu tun ist? Normalerweise würde ich in einer solchen Situation Indizes hinzufügen, um die Dinge zu beschleunigen, aber MySQL verwendet bereits die richtigen Schlüssel. Und soweit ich das beurteilen kann, ist diese Abfrage in den Wordpress-Kern integriert (nicht Teil unseres benutzerdefinierten Codes) und so einfach, dass ich mir nicht vorstellen kann, wie ich sie weiter optimieren kann ...?

5
rinogo

Bereiten Sie sich auf eine unbefriedigende Antwort vor ...

Nach mehreren Tagen des Testens ist die Schlussfolgerung, die ich gekommen bin, einfach gesagt, das ist nicht Wordpress '"Fehler". Ich glaube, ein anderes verwandtes Problem auf dem Server hat das System übermäßig belastet. Dies war einfach eine der langsameren Abfragen, die, da der Server überlastet war, mit Zeiten zwischen 12 und 16 Sekunden schnell an die Spitze unseres Protokolls für langsame Abfragen gelangten.

Das bedeutet nicht, dass ich mit der Join-Größe von 23,608 (VERY BAD, VERY SLOW) zufrieden bin. Dies bedeutet jedoch, dass für andere, die diese Frage besuchen, die Lösung für Ihr spezifisches Problem möglicherweise darin besteht, Ihr System als Ganzes zu untersuchen, um festzustellen, warum diese (oder eine andere) Abfrage so schlecht ausgeführt wird.

Viel Spaß beim Codieren!

0
rinogo