Der MySQL Query-Cache
Kurz gesagt: Der MySQL Query-Cache beschleunigt in den meißten Fällen die Abfragen. Er ist ab der Version 4 von MYSQL enthalten.
In dem Query-Cache werden Querys und deren Ergebnismengen gespeichert. Wenn das gleiche Statement mehrmals benutzt wird und die betroffenen Datensätze sich nicht verändert haben, wird das Ergebnis aus dem Cache geliefert. Bei einem kleinen Cache kann es allerdings sehr schnell vorkommen, dass ältere Statements überschrieben werden.
In Szenarien, in denen häufig auf Bestandsdaten zugegriffen wird, kann dieser Cache enmorme Geschwindigkeitssteigerungen bewirken. Besonders bei komplexen Statements kann der Query-Cache sehr wirkungsvoll sein, da das zeitaufwendige Parsen der Statements entfällt. Bei Bewegungsdaten, dürften die Geschwindigkeitssteigerungen ehere gering sein.
Das Ergebins sieht bei den meißten dann so aus:
Als default query_cache_size Wert steht dort 0. Ihr Cache ist also noch nicht eingeschaltet.
Mit dem Wert 'query_cache_size' reservieren Sie in MySQL einen bestimmten Speicherbereich, um einmal beantwortete 'select'-Anfragen temporär zwischenzuspeichern. Das bringt ab der zweiten Abfrage ganz massiv schnellere Resultate, weil die Informationen direkt aus dem Speicher kommen.
Schalten Sie den Cache nun in der Laufzeit ein (die Größe ist hier in Byte angegeben, kann aber auch in MB angegeben werden z.B. 100M):
Zum Testen nun den Befehl:
Die query_cache_size steht jetzt auf etwa 9999360 Bytes. Die Differenz von einigen Bytes sollte Sie nicht weiter beunruhigen, letztlich braucht die Verwaltung auch noch einige Bytes.
Mit dem Befehl:
initialisieren Sie den Cache auf Ihre aktuellen Daten. Der Befehl bewirkt eine defragmentation des Caches und kann jederzeit zur Optimierung ausgeführt werden.
Mit dem Befehl:
löschen Sie alle gespeicherten Cache Ergebnisse aus den Query-Cache.
Tragen sie dazu in die MySQL-Konfigurationsdatei: "/etc/my.cnf" die Zeile: "query_cache_size=128M" und "query_cache_type = 1" ein. Überprüfen Sie den Eintrag danach per Mysql-Console mit dem Befehl "show variables like 'query_cache_size';". Fertig.
Man kann die Effiezienz des Query-Cache auch sehr leicht bewerten. Mit dem Befehl:
bekommen sie alle Laufzeit-Informationen zum Query-Cache angezeigt: (hier ein Beispiel unseres gerade frisch aktivierten Query-Cache)
Einen weiteren interessanten (kostenpflichtigen) Artikel dazu finden Sie auch unter der IX Webseite: http://www.heise.de/ix/artikel/2003/02/040/
Die MySQL Dokumentation (Version 5.1) finden Sie unter dem Link: http://dev.mysql.com/doc/refman/5.1/de/query-cache.html
Viel Spaß noch beim Optimieren. Sie können uns und den Lesern ja mal Ihrer Erfahrungen über die Vor- oder Nachteile des Query-Caches schreiben. Auf Feedback sind wir immer neugierig. [FS]
In dem Query-Cache werden Querys und deren Ergebnismengen gespeichert. Wenn das gleiche Statement mehrmals benutzt wird und die betroffenen Datensätze sich nicht verändert haben, wird das Ergebnis aus dem Cache geliefert. Bei einem kleinen Cache kann es allerdings sehr schnell vorkommen, dass ältere Statements überschrieben werden.
In Szenarien, in denen häufig auf Bestandsdaten zugegriffen wird, kann dieser Cache enmorme Geschwindigkeitssteigerungen bewirken. Besonders bei komplexen Statements kann der Query-Cache sehr wirkungsvoll sein, da das zeitaufwendige Parsen der Statements entfällt. Bei Bewegungsdaten, dürften die Geschwindigkeitssteigerungen ehere gering sein.
Die Cache-Parameter:
Um mit den Cache-Parametern herumspielen zu können, müssen Sie sich mit 'root'-Rechten einloggen. Zunächst identifizieren Sie die eingestellten Optionen der MySQL Datenbank. Sie können dazu einfach 'show variables' eingeben. Allerdings erhalten Sie dabei eine Riesenliste, und müssten die interessanten Werte mühsam heraussuchen. Einfacher geht es mit dem Mysql-Befehl:mysql> show variables like '%cache%';
query_cache_limit | 1048576 |
query_cache_size | 0 |
query_cache_type | ON
Mit dem Wert 'query_cache_size' reservieren Sie in MySQL einen bestimmten Speicherbereich, um einmal beantwortete 'select'-Anfragen temporär zwischenzuspeichern. Das bringt ab der zweiten Abfrage ganz massiv schnellere Resultate, weil die Informationen direkt aus dem Speicher kommen.
Schalten Sie den Cache nun in der Laufzeit ein (die Größe ist hier in Byte angegeben, kann aber auch in MB angegeben werden z.B. 100M):
mysql> set global query_cache_size = 10000000;
Zum Testen nun den Befehl:
mysql> show variables like 'query_cache_size';
Mit dem Befehl:
mysql> FLUSH QUERY CACHE;
Mit dem Befehl:
mysql> RESET QUERY CACHE;
Permanente Eintrag in die Mysql-Konfigurationsdatei: my.cnf
In Ihrer Laufzeitumgebung ist der Query-Cache nun erfolgreich eingeschaltet. Fehlt nur noch der permanente Eintrag in die Datei my.cnf (diese Konfigurations-Datei finden sie meist im "/etc/ Verzeichnis Ihrer Linux Distribution, unter Ubuntu z.B. im Verzeichnis /etc/mysql/), damit die Einstellung nach einem Neustart der MySQL auch weiterhin bestehen bleiben.Tragen sie dazu in die MySQL-Konfigurationsdatei: "/etc/my.cnf" die Zeile: "query_cache_size=128M" und "query_cache_type = 1" ein. Überprüfen Sie den Eintrag danach per Mysql-Console mit dem Befehl "show variables like 'query_cache_size';". Fertig.
query_cache_limit = 16M
query_cache_size = 128M
query_cache_type = 1
mysql> SHOW STATUS LIKE 'Qcache%';;
Qcache queries in cache 2
Qcache inserts 3888
Qcache hits 1797
Qcache lowmem prunes 3376
Qcache not cached 185
Qcache free memory 924784
Qcache free blocks 9
Qcache total blocks 24
Die MySQL Dokumentation (Version 5.1) finden Sie unter dem Link: http://dev.mysql.com/doc/refman/5.1/de/query-cache.html
Viel Spaß noch beim Optimieren. Sie können uns und den Lesern ja mal Ihrer Erfahrungen über die Vor- oder Nachteile des Query-Caches schreiben. Auf Feedback sind wir immer neugierig. [FS]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 820
Url: https://administrator.de/contentid/820
Ausgedruckt am: 21.11.2024 um 12:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
ich habe meine my.cnf folgendermaßen geändert.
Der Cache funktioniert soweit auch. Allerdings ist der Cache nach einem Neustart wieder leer. Ist das normal? Kann man das so konfigurieren, das der Cache erhalten bleibt?
Vielen Dank für das Tut und Viele Grüße
bitverdreher
ich habe meine my.cnf folgendermaßen geändert.
query_cache_limit = 16M
query_cache_size = 128M
query_cache_type = 1
Vielen Dank für das Tut und Viele Grüße
bitverdreher