Die Serversystemvariable have_query_cache
gibt an, ob der Abfrage-Cache verfügbar ist:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | YES |
+------------------+-------+
Wenn Sie eine MySQL-Standardbinärdatei verwenden, ist der Wert
immer YES
– und zwar auch dann, wenn die
Zwischenspeicherung von Abfragen deaktiviert ist.
Mehrere andere Systemvariablen steuern den Betrieb des
Abfrage-Caches. Diese können in einer Optionsdatei oder über
die Befehlszeile beim Start von mysqld
angegeben werden. Die Namen aller Systemvariablen für den
Abfrage-Cache beginnen stets mit
query_cache_
. Sie sind in
Abschnitt 5.2.2, „Server-Systemvariablen“, kurz beschrieben. An
dieser Stelle sollen zusätzliche Konfigurationsinformationen
erläutert werden.
Die Größe des Abfrage-Caches stellen Sie mit der
Systemvariable query_cache_size
ein. Die
Einstellung 0 deaktiviert den Abfrage-Cache. Standardwert ist 0,
d. h. der Abfrage-Cache ist vorgabeseitig deaktiviert.
Wenn Sie query_cache_size
auf einen Wert
ungleich Null setzen, beachten Sie, dass der Abfrage-Cache eine
Mindestgröße von ca. 40 Kbyte benötigt, um seine Strukturen
zuzuweisen. (Der exakte Wert hängt von der Systemarchitektur
ab.) Wenn Sie den Wert zu niedrig ansetzen, erhalten Sie eine
Warnung wie im folgenden Beispiel:
mysql>SET GLOBAL query_cache_size = 40000;
Query OK, 0 rows affected, 1 warning (0.00 sec) mysql>SHOW WARNINGS\G
*************************** 1. row *************************** Level: Warning Code: 1282 Message: Query cache failed to set size 39936; new query cache size is 0 mysql>SET GLOBAL query_cache_size = 41984;
Query OK, 0 rows affected (0.00 sec) mysql>SHOW VARIABLES LIKE 'query_cache_size';
+------------------+-------+ | Variable_name | Value | +------------------+-------+ | query_cache_size | 41984 | +------------------+-------+
Ist die Größe des Abfrage-Caches größer als 0, dann
beeinflusst die Variable query_cache_type
die
Wirkungsweise. Die Variable kann auf die folgenden Werte gesetzt
werden:
Der Wert 0
oder OFF
verhindert das Speichern von Abfragen im und das Abrufen aus
dem Cache.
Der Wert 1
oder ON
gestattet das Speichern von Abfragen im Cache. Ausgenommen
sind Anweisungen, die mit SELECT
SQL_NO_CACHE
beginnen.
Der Wert 2
oder DEMAND
speichert nur diejenigen Anweisungen im Cache, die mit
SELECT SQL_CACHE
beginnen.
Die Einstellung des GLOBAL
-Wertes
query_cache_type
bestimmt das Verhalten des
Abfrage-Caches für alle Clients, die nach Durchführung der
Änderung eine Verbindung herstellen. Einzelne Clients können
das Verhalten des Caches bezüglich ihrer eigenen Verbindung
steuern, indem Sie den SESSION
-Wert
query_cache_type
einstellen. So kann ein
Client beispielsweise die Verwendung des Abfrage-Caches für
eigene Abfragen wie folgt deaktivieren:
mysql> SET SESSION query_cache_type = OFF;
Um die maximale Größe einzelner Abfrageergebnisse zu steuern,
die im Cache gespeichert werden können, stellen Sie die
Systemvariable query_cache_limit
ein. Der
Vorgabewert ist 1 Mbyte.
Wenn eine Abfrage im Cache abgelegt werden soll, wird ihr
Ergebnis (d. h. die Daten, die an den Client gesendet werden)
während des Abrufens des Ergebnisses im Abfrage-Cache abgelegt.
Dies bedeutet, dass die Daten nicht am Stück verwaltet werden.
Der Abfrage-Cache reserviert Blöcke zur Speicherung dieser
Daten nach Bedarf, d. h. wenn ein Block voll ist, wird der
nächste zugewiesen. Da der Speicherreservierungsvorgang (in
zeitlicher Hinsicht) aufwändig ist, reserviert der
Abfrage-Cache die Blöcke mit einer Mindestgröße, die durch
die Systemvariable query_cache_min_res_unit
festgelegt wird. Wird eine Abfrage ausgeführt, dann wird der
letzte Ergebnisblock auf die tatsächliche Datengröße
zugeschnitten, sodass unbenutzter Speicher freigegeben wird. Je
nach Typ der von Ihrem Server ausgeführten Abfragen kann es
für Sie hilfreich sein, den Wert von
query_cache_min_res_unit
zu optimieren:
Der Vorgabewert von
query_cache_min_res_unit
beträgt 4
Kbyte. Dies sollte für die meisten Fälle ausreichend sein.
Wenn Sie viele Abfragen mit kleinen Ergebnissen haben, kann
die standardmäßige Blockgröße zur Speicherfragmentierung
führen, wie durch eine große Anzahl freier Blöcke zu
erkennen ist. Die Fragmentierung wiederum kann das Entfernen
(Löschen) von Abfragen aus dem Abfragen aufgrund von
Speichermangel erforderlich machen. In diesem Fall sollten
Sie den Wert von query_cache_min_res_unit
verringern. Die Anzahl freier Blöcke und entfernter
Abfragen wird durch die Werte der Statusvariablen
Qcache_free_blocks
bzw.
Qcache_lowmem_prunes
angegeben.
Weist die Mehrzahl Ihrer Abfragen hingegen große Ergebnisse
auf (dies können Sie mit den Statusvariablen
Qcache_total_blocks
und
Qcache_queries_in_cache
überprüfen),
dann können sie die Leistung steigern, indem Sie
query_cache_min_res_unit
erhöhen.
Allerdings sollten Sie den Wert nicht zu groß wählen
(siehe obige Beschreibung).
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.