Ich habe schon länger das Problem, dass sich die Seite „Beitrag schreiben“ in WordPress extrem langsam aufbaut. Auf dem alten Server dauerte das deutlich über 60 Sekunden. Auf dem neuen Server hier nur noch ca. 20 Sekunden. Heute habe ich mir mal Zeit genommen um zu untersuchen warum das so ist. Ich habe mir das Tool mytop
installliert und ausgeführt. Beim Aufruf der Seite erschien für ca. 20 Sekunden die folgende SQL-Query:
mysql> SELECT meta_key FROM wp_postmeta GROUP BY meta_key ORDER BY meta_id DESC LIMIT 10;
Als erste Maßnahme habe ich mal den MySQL Query-Cache in der my.cnf
hochgeschaltet, da mein Webserver 2 GB RAM hat und davon noch nicht alles genutzt wird:
#
# * Query Cache Configuration
#
query_cache_limit = 1M
query_cache_size = 128M
Das brachte dann den Effekt, dass innerhalb eines relativ kurzen Zeitraums die Abfrage sehr schnell ablief. Nach ein paar Minuten (wenn überhaupt) war der Geschwindigkeitsgewinn aber wieder weg.
Also habe ich mal geschaut, was die SQL-Abfrage überhaupt macht:
mysql> SELECT meta_key FROM wp_postmeta GROUP BY meta_key ORDER BY meta_id DESC LIMIT 10;
+----------------------+
| meta_key |
+----------------------+
| podPressPostSpecific |
| _wp_page_template |
| _utw_tags_0 |
| _utw_tags_ |
| related_id |
| podPressMedia |
+----------------------+
6 rows in set (25.67 sec)
mysql> SELECT meta_key FROM wp_postmeta GROUP BY meta_key ORDER BY meta_id DESC LIMIT 10;
+----------------------+
| meta_key |
+----------------------+
| podPressPostSpecific |
| _wp_page_template |
| _utw_tags_0 |
| _utw_tags_ |
| related_id |
| podPressMedia |
+----------------------+
6 rows in set (0.00 sec)
Die Query erzeugt also unter „Ein neues benutzerdefiniertes Feld hinzufügen“ eine Liste mit 10 Werten für den setzbaren Schlüssel. Ein Feature das ich bisher nie benutzt habe. Also habe ich mich auf die Suche nach der Query gemacht. Ich wurde in wp-admin/admin-functions.php
in der Funktion meta_form()
fündig. Also schnell das folgende auskommentiert und mit 0,8 Sekunden Seiteladezeit (als über 20 Mal schneller :-)) glücklich werden:
/* $keys = $wpdb->get_col("
SELECT meta_key
FROM $wpdb->postmeta
GROUP BY meta_key
ORDER BY meta_id DESC
LIMIT 10");*/