28
Mai

MySQL Query Cache

Seit MySQL 4.0.1 steht der so genannte Query Cache zur Verfügung. Sinn und Zweck des Query Caches von MySQL ist es, die Geschwindigkeit von Zeit intensiven Querys (SQL Abfragen) zu erhöhen. Zunächst gilt es zu wissen wie MySQL vom Empfang eines Querys bis zum senden des Ergebnisses vorgeht. Bevor ein Query von MySQL analysiert und ausgeführt wird, versucht MySQL diesen aus dem Query Cache abzurufen. Dazu wird die Query gehasht um mit dem Hash-Wert das entsprechende Ergebnis aus dem Query Cache abzurufen. MySQL ist hierbei sehr penibel was das Hashen des Querys angeht. Dabei sind die folgenden Querys nicht identisch.

'SELECT spalte FROM tabelle'
'select spalte from tabelle'

Da die meisten wiederkehrenden Querys allerdings von Scripten automatisch erstellt werden stellt dies kaum ein Problem dar. Wichtig ist auch zu wissen, dass MySQL nur SELECT Abfragen zwischenspeichert.

Query Cache aktivieren und konfigurieren:

Der Query Cache kann ganz einfach in der my.cnf des MySQL Servers aktiviert werden. Dazu fügt man einfach folgende Zeile in die my.cnf ein.

query_cache_type = 1

Mit dieser Einstellung wird jede MySQL SELECT Abfrage im Cache gespeichert. Um nur als solche gekennzeichnete Query im Cache zu speichern verwendet man den ondemand-Modus.

query_cache_type = 2

Als nächstes muss noch eingestellt werden wie viel Speicher MySQL für den Query Cache verwenden darf. Dies erledigt man mit folgender Einstellung.

query_cache_size = 128M

Zu deutsch, MySQL darf 128 MB zum cachen von SELECT Abfragen verwenden.

Zusätzlich kann noch eingestellt werden wie viel Speicher pro Query verwendet werden darf.

query_cache_limit = 8M

Hiermit erlauben wir MySQL Querys zwischen zu speichern die nicht größer als 8 MB sind.

Query Cache im ondemand Modus

Wenn man MySQL im ondemand-Modus konfiguriert hat (query_cache_type = 2) muss man MySQL mitteilen welches SELECT abfragen im Cache gespeichert werden sollen. Hier zwei Beispiele.

SELECT SQL_CACHE spalte FROM tabelle

Wenn SQL_CACHE im Query angegeben wird weist man MySQL darauf hin das dieser Query im Cache gespeichert werden soll. Um einen Query explizit nicht im Cache zu Speichern verwendet man folgende Abfrage.

SELECT SQL_NO_CACHE spalte FROM tabelle

Tip: SQL_NO_CACHE kann auch verwendet werden wenn die Variable query_cache_type = 1 gesetzt ist, um MySQL explizit zu verbieten diese Abfrage im Query Cache zu speichern.

weiter Links zum Thema MySQL Performance:

hinterlasse eine Nachricht