Archive for the ‘MySQL’ Category

MySQL: mysqld.log per syslog (an Splunk senden)

MySQL kann leider erst ab Version 5.1.irgendwas seine Fehlermeldungen bei Syslog abgeben. Damit ich sie schon jetzt dort hin bekomme, habe ich folgenden Befehl verwendet:

tail -f /var/log/mysqld.log | logger &

Das Lässt sich sicher auch in ein initscript verpacken und man müsste dran denken, wenn man für die mysqld.log einen logrotate-Job einrichtet.

MySQL: Query Cache

Wenn die wichtigsten Tuningeinstellungen für MySQL gemacht sind, lohnt es sich, auch einen Blick auf den Query Cache zu werfen. Dieser speichert das Ergebnis von SQL-Abfragen und kann es somit bei Bedarf aus dem Arbeitsspeicher wiedergeben. Gerade für abfragen, die auf Webseiten live ausgeführt und deren Ergebnis aus irgendeinem Grund nicht auf dem Webserver gecacht wird, dürfte das interessant sein. Im Wesentlichen beschränkt sich die Konfiguration auf die folgenden Angaben:


query_cache_type=1
query_cache_size=6M
query_cache_limit=1M

Zuerst wird der cache aktiviert, dann wird die Größe bestimmt und schließlich der maximale Speicherplatz pro zwischengespeicherter Abfrage angegeben.

Um zu sehen, wie sich der query cache macht, kann man diese Abfrage benutzen:

SHOW STATUS LIKE 'Qcache%';

Im Ergebnis bekommt man dann einen Eindruck, wir gut der Cache genutzt wird, indem man das Verhältnis von Hits und inserts betrachtet:

+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      |      81 |
| Qcache_free_memory      | 4412528 |
| Qcache_hits             |    3809 |
| Qcache_inserts          |    1355 |
| Qcache_lowmem_prunes    |       0 |
| Qcache_not_cached       |     309 |
| Qcache_queries_in_cache |     650 |
| Qcache_total_blocks     |    1425 |
+-------------------------+---------+

Übrigens: Einzelne Einträge im query cache werden entfernt, wenn sich in der Datenbank an entsprechende Stelle etwas ändert. Man bekommt also immer frische Ware.