MySQL Performance auf großen Tabellen
Posted: 2005-03-26 11:36
Hallo,
seit ein paar Tagen habe ich ein Problem mit meinem MySQL Server. DAS System ist ein Art Portal Apache und Datenbank sind 2 voneinander getrennte Systeme. MySQL wurde aus Performancegründen statisch compiliert und enthält nur den latin1 Zeichensatz. Des weiteren ist kein SSL support eingebaut kein INNO und BERKDB Support.
In Spitzenzeiten werden 500-1000 Querys an das Gerät gesendet, es handelt sich um einen Dual Xeon Pentium4 mit 3Ghz.
Solange es sich bei den Abfragen um reine SELECT's handelt ist das auch kein Problem, jedoch gibt es in diesem System ein Nachrichtensystem und dies ist "noch" in einer Tabelle. Dort werden ENUM Felder gesetzt die nach dem Primärschlüssel aufgesucht werden. Teilweise brauchen diese UPDATES recht lange, dazu kommt das in dieser Zeit die Tabelle gesperrt ist und andere UPDATE's warten müssen. Dadurch werden neue Threads kreiirt und das Gerät ist sehr schnell voll ausgelastet und geht komplett in die Knie.
Darauf folgt dann das der Client die Message erhält das keine Prozesse mehr erstellt werden können weil der RAM nicht ausreicht. Ich habe auf dem Gerät auf SWAP verzichtet und der Kernel enthält auch nicht diese Verwaltung dafür, da dies System 2 GB hat an RAM und alles wirklich sehr minal installiert ist es laufen keine anderen Dienste darauf ausser SSH und MySQL.
Ich habe natürlich das MySQL Handbuch mehrere Tage gewälzt und habe etliche Parameter wie ThreadCache und SortBuffer angepasst. Querycache integriert usw. Das tut zwar einiges nur hilft es nicht das Problem zu lösen. Wie kann ich dennoch die Performance von diesen großen Tabellen verbessern?
Vielen Dank für jegliche Inspiration
Daniel
seit ein paar Tagen habe ich ein Problem mit meinem MySQL Server. DAS System ist ein Art Portal Apache und Datenbank sind 2 voneinander getrennte Systeme. MySQL wurde aus Performancegründen statisch compiliert und enthält nur den latin1 Zeichensatz. Des weiteren ist kein SSL support eingebaut kein INNO und BERKDB Support.
In Spitzenzeiten werden 500-1000 Querys an das Gerät gesendet, es handelt sich um einen Dual Xeon Pentium4 mit 3Ghz.
Solange es sich bei den Abfragen um reine SELECT's handelt ist das auch kein Problem, jedoch gibt es in diesem System ein Nachrichtensystem und dies ist "noch" in einer Tabelle. Dort werden ENUM Felder gesetzt die nach dem Primärschlüssel aufgesucht werden. Teilweise brauchen diese UPDATES recht lange, dazu kommt das in dieser Zeit die Tabelle gesperrt ist und andere UPDATE's warten müssen. Dadurch werden neue Threads kreiirt und das Gerät ist sehr schnell voll ausgelastet und geht komplett in die Knie.
Darauf folgt dann das der Client die Message erhält das keine Prozesse mehr erstellt werden können weil der RAM nicht ausreicht. Ich habe auf dem Gerät auf SWAP verzichtet und der Kernel enthält auch nicht diese Verwaltung dafür, da dies System 2 GB hat an RAM und alles wirklich sehr minal installiert ist es laufen keine anderen Dienste darauf ausser SSH und MySQL.
Ich habe natürlich das MySQL Handbuch mehrere Tage gewälzt und habe etliche Parameter wie ThreadCache und SortBuffer angepasst. Querycache integriert usw. Das tut zwar einiges nur hilft es nicht das Problem zu lösen. Wie kann ich dennoch die Performance von diesen großen Tabellen verbessern?
Vielen Dank für jegliche Inspiration
Daniel