MySQL Performance Tipp: Trefferquote des Query Cache erhöhen

Der Query Cache ist nicht randvoll gefüllt, die Trefferquote aber eher bescheiden (siehe Auswertug z.B. durch Munin, Cacti, „show status like ‚Qc%‘;“)? Dann ist womöglich der Konfigurationsparameter query_cache_min_res_unit zu hoch eingestellt (default = 4 KB). Hier kann man schrittweise z.B. um 1 KB reduzieren und sich die Entwicklung der Trefferquote in Ruhe anschauen.

In einem aktuellen Fall konnte dadurch die Cache-Hit-Rate von 28% auf 93% gesteigert werden. Selbst hier ist noch Luft nach oben, allerdings kann ich nur dann den MySQL-Dienst neu starten, wenn gerade wenig Betrieb auf dem Server ist. Bei einer mittleren dreistelligen bis niedrigen vierstelligen Anzahl von Abfragen je Sekunde kann durch diese Verdreifachung der Hit-Rate einiges an CPU-Power gespart werden, die dem System so anderweitig zur Verfügung steht. Gleichzeitig erhöht sich die mittlere Ausführungszeit der Datenbankabfragen und im Endeffekt wird so die Webanwendung beschleunigt.

Die Verbesserung der Cache-Hit-Rate ist deutlich zu erkennen.

Die Verringerung der query_cache_min_res_unit sorgt allerdings auch für einen erhöhten Bedarf an Speicher für den Query Cache, da nun die Ergebnisse von deutlich mehr Abfragen zwischengespeichert werden. Aus diesem Grund muss der Wert query_cache_size ggf. hochgesetzt werden, um das Pruning im Query Cache zu unterbinden.

Parallel geht auch die Anzahl von Slow Querys zurück.