MySQL Server konfigurieren und Performance steigern

fehlt wasgeht sogutsehr guthat geholfen (1 votes, average: 2,00 out of 5)
Loading ... Loading ...
Werbung




MySQL ist in vielen Fällen der Flaschenhals der Webseite. Viele Zugriffe auf die Webseite benötigen viele Zugriffe auf den MySQL Server. Dazu kommt, dass meist bei einem Webseitenzugriff mehrere Zugriffe auf die SQL Datenbank getätigt werden. Wenn hier die Performance des MySQL Servers nicht ausreicht oder die Datenbank nicht schnell genug antwortet, verlassen die Besucher schnell die Webseite, da diese nicht schnell genug angezeigt wird.

MySQL Performance steigern

Bereits in einem älteren Beitrag wurde einiges über die intelligente Datenbankgestaltung geschrieben. Aber es hängt auch vieles von der Server-Hardware ab. Ist eine Webseite gut besucht, muss der Server einiges wegstecken können. Hierzu zählt neben dem Prozessor und Hauptspeicher auch die Festplatte. Diese sollte ab einer gewissen Zugriffrate bestenfalls auf einem SCSI/SAS Raid liegen. Diese Festplatten können mehere Schreibzugriffe gleichzeitig durchführen und sind daher für Plattenlastige Anwendungen wie eine SQL Datenbank am Besten geeignet.

Auch der Hauptspeicher muss bei SQL Anwendungen entsprechend gewählt sein. MySQL ist in der Lage, viele wieerkehrende Querys zu cachen und somit den direkten Zugriff auf die Datenbank zu verhindern. MySQL ist in der Lage, Antworten direkt aus dem Cache zu liefern. Allerdings muss hierzu auch der Platz dafür vorhanden sein. Hierzu ist der Parameter

query_cache_size

in der Datei /etc/mysql/my.cnf interessant.
Hier sollte mit dem Tool Tuning-Primer.sh geprüft werden, ob an den Einstellungen von MySQL entsprechend die Performance gesteigert werden kann. Die Auswertung von Tuning-Primer.sh gibt meist sinnvolle Einstellungsmöglichkeiten, die die Performance und Zugriffsgeschwindigkeit enorm steigern.

Auch die Auswertung von slow_querys sollte Beachtung geschenkt werden. MySQL bietet sogar an, diese zu loggen. Mit den Parametern

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

werden die Querys, die zu viel Zeit benötigen, in eine extra Logdatei geschrieben. Diese können ausgewertet werden und entsprechend die Datenbank mit besseren Indexen versehen werden. Dies steigert die Zugriffs-Performance von MySQL.

Einsatz von MySQL Clustern

Ein interessanter Gedanke ist ebenfalls, einen MySQL Server zu entlasten, indem man die Lesezugriffe wegnimmt. Ein MySQL Server ist also nur noch für Schreibzugriffe zuständig.

In diesem Fall kommt ein MySQL Cluster zum Einsatz. In diesem Fall werden Änderungen auf einem Master vorgenommen, der diese an sogenannte Slaves weiterleitet.

Prakisch ist es so, dass INSERT und UPDATE auf dem Master vorgenommen werden. Dieser repliziert diese Änderungen dann an die Slave MySQL Server, die dann diese Daten zum Lesen bereit stellen. SELECT werden dann nur auf den Slave Servern vorgenommen. Da der Master dann nur noch mit den Änderungen der Datenbank beschäftigt ist, und keine lesenden Zugriffe mehr vornehmen muss, kann dieser erheblich entlastet werden.
Die Slave-Server sind dann nur für lesende Operationen zuständig. Hier kann auf 2 oder mehr Slaves zurück gegriffen werden und die Lesezugriffe auf diese Verteilt werden, wodurch auch die Slaves entlastet werden.
Bei Datenbankintensive Anwendungen wird meist schon auf diese Technik zurück gegriffen.

Allerdings stellt sich ein Problem, die Replikation zwischen Master und den Slaves. Hier muss darauf geachtet werden, dass Lesezugriffe auf gerade geänderte Daten erst dann durchgeführt wird, wenn der Master die neuen Daten auch auf die Slaves repliziert hat. Die kann mit LOCK bewerkstelligt werden. Hierfür muss aber in der Webanwendung sauber programmiert werden.



Werbung


Eine Kommentar zu: MySQL Server konfigurieren und Performance steigern

  1. [...] Konfiguration der Performance kann auf diesen Beitrag MySQL Performance verbessern, verwießen werden. Hier wird der SQL Server weiter beschrieben und Tools zur [...]

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>