MySQL Query Cache – Datenbank Abfragen cachen

Wer viele dynamische Webseiten auf seinem Server laufen hat oder Anwendungen mit komplexen Datenbankabfragen ausführt, für den dürfte sich der MySQL Query Cache anbieten, welcher seit MySQL-Version 4.0.1 und höher implementiert ist.

Häufig genutzte Datenbank-Abfragen werden damit im Cache vorgehalten, was die Performance der Anwendungen optimiert und unter Umständen auch die Festplatten-Zugriffe auf dem Server verringern kann.

Etwas tricky: Der Query Cache ist bei einer MySQL Installation häufig standardmäßig aktiviert, allerdings in den meisten Fällen mit einer voreingestellten Größe des Cache von “0″.

Da in meiner “my.cnf” nun standardmäßig überhaupt kein Eintrag für die Cache-Größe angelegt war, ist mir das anfangs auch nicht aufgefallen und ich dachte fälschlicherweise, dass der Cache aktiv sei (was theoretisch auch stimmt) und funktioniert (was leider nicht stimmt).

Entscheidend ist also das zusätzliche Setzen eines Eintrags wie
query_cache_size = 8M
in der my.cnf, welcher die Größe des Cache bestimmt. Anschließend den MySQL-Server neu starten.

Überprüfen kann man die Funktion des Cache dann nach einigen Abfragen über Statusvariablen wie “Qcache_free_memory” oder “Qcache_queries_in_cache” mit dem MySQL Befehl “SHOW STATUS”.

Über das Statement “SQL_NO_CACHE” kann man übrigens auch einzelne Datenbankabfragen vom Caching ausschließen, was z.B. bei einer gut frequentierten Suchfunktion mit sehr unterschiedlichen Begriffen Sinn machen könnte.
SELECT SQL_NO_CACHE xyz FROM tabelle

Sinn macht der Cache natürlich nur bei identischen Abfragen, dynamische Queries belegen unnötig Speicherplatz.

Setzt man

query_cache_type = 2

dreht sich das ganze um. Abfragen werden standardmäßig nicht gecacht, mit dem Statement “SQL_CACHE” innerhalb der Abfrage können nun aber gezielt einzelne Queries für den Cache ausgewählt werden.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *