Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Der MySQL Query-Cache

Mitglied: Frank

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.


back-to-topDie 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:
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.


back-to-topPermanente 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.
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]

Content-Key: 820

Url: https://administrator.de/contentid/820

Ausgedruckt am: 29.11.2021 um 20:11 Uhr

Mitglied: Frank
Frank 24.02.2005 um 14:51:57 Uhr
Goto Top
Kleine Ergänzung:

Mann kann den Query-Cache auch mit:
prüfen.

Um alle Ergebnisse anzuzeigen:


Mitglied: Frank
Frank 26.05.2007 um 12:33:35 Uhr
Goto Top
Hi ,

eine paar Änderungen:

Tragen sie dazu in die MySQL Konfigdatei: "/etc/my.cnf" die Zeile: "set-variable =
query_cache_size=1000000" ein.

seit der MySQL Version 5 kann man in der "/etc/my.cnf" das "set-variable =" weglassen (ich habe es im Original-Beitrag schon korrigiert).
Es reicht also:
Hier die Erklärung zu den zusätzlichen Parameter:

Mitglied: 49880
49880 21.06.2007 um 11:07:04 Uhr
Goto Top
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
Mitglied: bennos
bennos 16.02.2008 um 16:25:46 Uhr
Goto Top
Ja das ist normal.

Der Query Cache liegt im RAM und ist logischerweise nach einem reboot leer.

als ergänzung kann ich immer empfehlen
http://www.mysqlperformanceblog.com

gute infos über performance einzelner STorage Engines, sowie benchmark und Standard Konfig von DB's.

bennos
Heiß diskutierte Beiträge
question
Adminpasswort löschenaleks08Vor 1 TagFrageWindows 79 Kommentare

Bei einem Kollegen hat jemand den Rechner eingerichtet und dabei ein Adminpasswort vergeben. Das Adminpasswort kennt er aber nicht und der Einrichter ist nicht mehr ...

question
Medienwandler für Glasfaser gelöst Reamer76Vor 1 TagFrageHardware9 Kommentare

Guten Tag liebe Admins, ich bräuchte mal Eure Hilfe für die Anschaffung eines Medienwandlers. Wir werden nächsten Monat freigeschaltet, Anbieter ist Wemacom. Ich habe die ...

question
Ethernet-LAN und DSL über Telefonkabel gelöst 150103Vor 1 TagFrageNetzwerke10 Kommentare

Hallo Administrator-Forum, ich habe hier ein ungewöhnliches Szenario, dass ich euch gerne näher bringen würde. Auf einem Grundstück gibt 2 Häuser (H1 und H2). Im ...

question
AD Server von 2012 R2 auf Server 2019 R2 hochgesetzt. Domänenlevel noch 2012 Aber nun geht kein LDAPS . LDAP geht gelöst itititVor 20 StundenFrageWindows Server13 Kommentare

Hallo zusammen, wir haben die Server 2012 R2 mit Server 2019 R2 ersetzt. Neue Server kein Inplace. Die neuen DCs haben IP und Name gleich ...

question
"Nicht identifiziertes Netzwerk" bei VPN VerbindungKatachi29Vor 1 TagFrageDSL, VDSL5 Kommentare

Hallo zusammen, ich habe seit einiger Zeit das Problem, dass, wenn ich mich daheim bei meinem Sophos SSL VPN Client anmelde, immer die Meldung: "Nicht ...

question
Euro Zeichen geht nicht mehrGwaihirVor 17 StundenFrageWindows 1013 Kommentare

Hallo zusammen, bei einem User geht das Euro-Zeichen nicht mehr. Er kann es nur noch über Copy&Paste aus der Zeichentabelle einfügen. Auch STRG+ALT+E klappt nicht. ...

question
Dauernd gesperrter User in der ADChristianIT2021Vor 23 StundenFrageWindows Server3 Kommentare

Hallo zusammen, Ich habe ein riesen Problem ich habe einen User der wird immer wieder gesperrt. Über die Eventlgs habe ich schon herausgefunden aus welcher ...

question
Bitlockerpartition versehentlich gelöscht Läppi findet nach Partitiosformatierung mbr gpt die Partition nicht wiederPCChaosVor 16 StundenFrageWindows 1010 Kommentare

Hallo zusammen, Ich habe ein riesen Problem, das mir sonst einfach erschien. Ich hatte eine Bitlocker Partition D: auf meinem C: Laufwerk installiert. Weil Windows ...