Mysql Server tunen?
Mysql Server tunen?
Ich habe eine OTRS Installation auf Debian Sarge.
Der Rechner hat 2 Pentium 3 CPU´s mit 733 MHZ und 512 MB RAM.
Das ganze läuft auf ner 40 GB HD mit 8 MB Cache.
Sobald jemand die Suche startet, bricht der Mysql Server ein und normale Anfragen werden erst nach Minuten bearbeitet. Lohnt eine Anpassung der my.cnf oder sollte gleich die Hardware aufgerüstet werden?
Der Rechner hat 2 Pentium 3 CPU´s mit 733 MHZ und 512 MB RAM.
Das ganze läuft auf ner 40 GB HD mit 8 MB Cache.
Sobald jemand die Suche startet, bricht der Mysql Server ein und normale Anfragen werden erst nach Minuten bearbeitet. Lohnt eine Anpassung der my.cnf oder sollte gleich die Hardware aufgerüstet werden?
- seep
- Beiträge: 544
- Registriert: 31.10.2004 14:21:08
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: HSK
Über das Thema Datenbanktuning gibt es meterweise Literatur und eine Antwort kann man sicherlich nicht so einfach geben.
Die Antwort kann daher nur lauten: es kommt darauf an.
Man kann selbst auf der schnellsten Hardware ein DBMS zum Glühen bringen, wenn das Datenbankdesign nicht besonders ist, wenn keine oder falsche Indexe gesetzt sind, wenn man (Redo-)Logfiles aktiviert hat, die man vielleicht nicht braucht, wenn die SQL-Statements falsch, für den DB-Optimizer unpassend formuliert sind oder so formuliert sind, das existierende Indexe nicht verwendet werden können, und und und.
Die Hardware scheint mir erst einmal nicht unterdimensioniert zu sein, höchstens ein halbes Gig RAM sollte man der Kiste noch gönnen. Wenn die Kiste aber eine Dauerlast von mehreren parallelen Requests mit Read und Write zu handlen hat, sollte man vielleicht doch mal die restliche Hardware - insbesondere schnelle Platten einbauen.
Ein Blick auf das DB-Design oder die SQL-Abfragen bergen jedoch meist große Tuning-Potentiale, und hier gewinnt man oft mehr als durch reine Hardware. Ein kaputtes Fahrwerk wird auch durch mehr Hubraum nicht besser.
Die Antwort kann daher nur lauten: es kommt darauf an.
Man kann selbst auf der schnellsten Hardware ein DBMS zum Glühen bringen, wenn das Datenbankdesign nicht besonders ist, wenn keine oder falsche Indexe gesetzt sind, wenn man (Redo-)Logfiles aktiviert hat, die man vielleicht nicht braucht, wenn die SQL-Statements falsch, für den DB-Optimizer unpassend formuliert sind oder so formuliert sind, das existierende Indexe nicht verwendet werden können, und und und.
Die Hardware scheint mir erst einmal nicht unterdimensioniert zu sein, höchstens ein halbes Gig RAM sollte man der Kiste noch gönnen. Wenn die Kiste aber eine Dauerlast von mehreren parallelen Requests mit Read und Write zu handlen hat, sollte man vielleicht doch mal die restliche Hardware - insbesondere schnelle Platten einbauen.
Ein Blick auf das DB-Design oder die SQL-Abfragen bergen jedoch meist große Tuning-Potentiale, und hier gewinnt man oft mehr als durch reine Hardware. Ein kaputtes Fahrwerk wird auch durch mehr Hubraum nicht besser.
bei der Gelegenheit hätte ich eine ähnliche Frage:
ich hab auf meinem alten Server die Wikipedia installiert. Das ist praktisch, da ich mit ISDN keine Flatrate habe und so die Familie dennoch den Luxus eines großen Nachschlagewerks hat.
Mein Wunsch/Problem: es laufen stets mehrere Instanzen von mysql (11 im Moment), obwohl auf die Wikipedia 1, maximal 2 Leute gleichzeitig zugreifen. Kann man ev. ähnlich wie bei dem Indianer die Zahl der Prozesse irgendwie steuern (spare servers oder ähnlich?) Denn der Arbeitsspeicher ist sonst von mysql ausgelastet, jedoch hat der Server noch andere Aufgaben (samba, nfs für mp3s und Bilder, mails, Router, cups-server ...) sozusagen Mädchen für alles ...
grüße
mludwig
ich hab auf meinem alten Server die Wikipedia installiert. Das ist praktisch, da ich mit ISDN keine Flatrate habe und so die Familie dennoch den Luxus eines großen Nachschlagewerks hat.
Mein Wunsch/Problem: es laufen stets mehrere Instanzen von mysql (11 im Moment), obwohl auf die Wikipedia 1, maximal 2 Leute gleichzeitig zugreifen. Kann man ev. ähnlich wie bei dem Indianer die Zahl der Prozesse irgendwie steuern (spare servers oder ähnlich?) Denn der Arbeitsspeicher ist sonst von mysql ausgelastet, jedoch hat der Server noch andere Aufgaben (samba, nfs für mp3s und Bilder, mails, Router, cups-server ...) sozusagen Mädchen für alles ...
grüße
mludwig
- seep
- Beiträge: 544
- Registriert: 31.10.2004 14:21:08
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: HSK
Ja, kann man über die php.ini einstellen, Stichwort mysql.max_links oder mysql.max_links.
Siehe auch: http://php3.de/manual/de/ref.mysql.php
Ob das den gewüschten Effekt bringt, müßtest Du ausprobieren.
Siehe auch: http://php3.de/manual/de/ref.mysql.php
Ob das den gewüschten Effekt bringt, müßtest Du ausprobieren.
danke für die Antwort,
ich habe es gleich mal ausprobiert. Es scheint jedoch so zu sein, dass die Einstellungen in der php.ini nur für die Verbindung apache/php -> mysql zuständig sind. Leider ist es aber so, dass selbst wenn Apache nicht läuft und Mysql frisch gestartet wurde (/etc/init.d/mysql start) bereits 11 Prozesse von mysql laufen. Die haben aber eigentlich nichts zu tun?!
Daher müsste das wohl eher in der my.cnf oder ähnlichem eingestellt werden. Google ist leider keine große Hilfe, vielleicht muss ich gar in die Tiefen der sql-Anweisungen eintauchen, ähnlich wie es bei Oracle der Fall ist ... So wichtig ist es dann doch nicht, es hätte ja sein können es gibt da einen ganz trivialen Schalter, den ich wieder übersehen habe.
tschüss
mludwig
PS.: liegt wohl daran, dass die Wikipedia inzwischen so groß ist, dass sich ein Prozess alleine nicht mehr rantraut
ich habe es gleich mal ausprobiert. Es scheint jedoch so zu sein, dass die Einstellungen in der php.ini nur für die Verbindung apache/php -> mysql zuständig sind. Leider ist es aber so, dass selbst wenn Apache nicht läuft und Mysql frisch gestartet wurde (/etc/init.d/mysql start) bereits 11 Prozesse von mysql laufen. Die haben aber eigentlich nichts zu tun?!
Daher müsste das wohl eher in der my.cnf oder ähnlichem eingestellt werden. Google ist leider keine große Hilfe, vielleicht muss ich gar in die Tiefen der sql-Anweisungen eintauchen, ähnlich wie es bei Oracle der Fall ist ... So wichtig ist es dann doch nicht, es hätte ja sein können es gibt da einen ganz trivialen Schalter, den ich wieder übersehen habe.
tschüss
mludwig
PS.: liegt wohl daran, dass die Wikipedia inzwischen so groß ist, dass sich ein Prozess alleine nicht mehr rantraut
bin außerdem noch am überlegen ob ich das dbms von mysql nach postgresql tausche.
angeblich soll postgre ja ne bessere performance haben?
gibts nen tool mit dem man einfach konvertieren kann oder kann ich nen mysql backup machen, das auch von postgre gelesen werden kann?
@mludwig
es wäre nett, wenn du für dein problem nen eignen thread aufmachen könntest.
angeblich soll postgre ja ne bessere performance haben?
gibts nen tool mit dem man einfach konvertieren kann oder kann ich nen mysql backup machen, das auch von postgre gelesen werden kann?
@mludwig
es wäre nett, wenn du für dein problem nen eignen thread aufmachen könntest.
- dominator
- Beiträge: 790
- Registriert: 26.08.2003 10:05:37
- Wohnort: Neuerdings meistens im Bierparadies Oberfranken
Bei vermuteten Performance-Problemen mit MySQL hilft dir vielleicht mtopmonotek hat geschrieben:bin außerdem noch am überlegen ob ich das dbms von mysql nach postgresql tausche.
angeblich soll postgre ja ne bessere performance haben?
SQLmonotek hat geschrieben: gibts nen tool mit dem man einfach konvertieren kann oder kann ich nen mysql backup machen, das auch von postgre gelesen werden kann?
gruss + viel erfolg
Michael
--
Aus aktuellem Anlass :
"Der Glubb is a Depp" - Fränkische Weisheit
Michael
--
Aus aktuellem Anlass :
"Der Glubb is a Depp" - Fränkische Weisheit
- feltel
- Webmaster
- Beiträge: 10458
- Registriert: 20.12.2001 13:08:23
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Leipzig, Germany
-
Kontaktdaten:
Re: Mysql Server tunen?
Wir betreiben den dfde-Server (XP 3000, 1GB RAM) hier mit den folgenden Settings in der /etc/mysql/my.cnf:monotek hat geschrieben:Ich habe eine OTRS Installation auf Debian Sarge.
Der Rechner hat 2 Pentium 3 CPU´s mit 733 MHZ und 512 MB RAM.
Das ganze läuft auf ner 40 GB HD mit 8 MB Cache.
Sobald jemand die Suche startet, bricht der Mysql Server ein und normale Anfragen werden erst nach Minuten bearbeitet. Lohnt eine Anpassung der my.cnf oder sollte gleich die Hardware aufgerüstet werden?
Code: Alles auswählen
key_buffer = 384M
sort_buffer = 64M
table_cache = 512
myisam_sort_buffer_size = 64M
join_buffer_size = 32M
thread_cache = 128
debianforum.de unterstützen? Hier! | debianforum.de Verhaltensregeln | Bitte keine Supportanfragen per PM
stimmt. allerdings sind die dumps trotzdem nicht kompatibel.dominator hat geschrieben:
SQL
hab aber inzwischen nen perl script gefunden was nen mysql dump in postgre umschreibt...
@ fettel
mod_perl ist natürlich installiert.
werd mal schauen, obs was bringt, deine einstellung in angepaster form zu übernehemn.
Hallo!mludwig hat geschrieben:danke für die Antwort,
ich habe es gleich mal ausprobiert. Es scheint jedoch so zu sein, dass die Einstellungen in der php.ini nur für die Verbindung apache/php -> mysql zuständig sind. Leider ist es aber so, dass selbst wenn Apache nicht läuft und Mysql frisch gestartet wurde (/etc/init.d/mysql start) bereits 11 Prozesse von mysql laufen. Die haben aber eigentlich nichts zu tun?!
Daher müsste das wohl eher in der my.cnf oder ähnlichem eingestellt werden. Google ist leider keine große Hilfe, vielleicht muss ich gar in die Tiefen der sql-Anweisungen eintauchen, ähnlich wie es bei Oracle der Fall ist ... So wichtig ist es dann doch nicht, es hätte ja sein können es gibt da einen ganz trivialen Schalter, den ich wieder übersehen habe.
tschüss
mludwig
PS.: liegt wohl daran, dass die Wikipedia inzwischen so groß ist, dass sich ein Prozess alleine nicht mehr rantraut
Hast du das Problem in Griff bekommen?
cu Deta
Naja, teilweise: ich habe es geschafft, das MySql weniger Speicher je Instanz benötigt, aber es laufen immernoch 11 Prozesse davon.
Ich bin auch dazu übergegangen, bei einem Update der Wikipedia-DB den Suchindex auf einer anderen Maschine erstellen zu lassen. Danach wird einfach rüberkopiert. Auf dem Pentium II 333 Mhz mit 396 MB Ram habe ich nach 48 h abgebrochen, weil abzusehen war das es eine Woche dauern würde. Ein anderer Rechner mit 1 GB Ram schaffte das an einem Abend ...
Inzwischen werde ich wohl keine Updates der Wikipedia mehr machen, weil es den Server wohl doch an seine Grenzen treibt, es ist halt eine große DB für so alte Hardware. Mit DSL und Flatrate bräuchte ich mir die Mühe nicht zu machen ...
grüße
mludwig
Ich bin auch dazu übergegangen, bei einem Update der Wikipedia-DB den Suchindex auf einer anderen Maschine erstellen zu lassen. Danach wird einfach rüberkopiert. Auf dem Pentium II 333 Mhz mit 396 MB Ram habe ich nach 48 h abgebrochen, weil abzusehen war das es eine Woche dauern würde. Ein anderer Rechner mit 1 GB Ram schaffte das an einem Abend ...
Inzwischen werde ich wohl keine Updates der Wikipedia mehr machen, weil es den Server wohl doch an seine Grenzen treibt, es ist halt eine große DB für so alte Hardware. Mit DSL und Flatrate bräuchte ich mir die Mühe nicht zu machen ...
grüße
mludwig
Was hast du gemacht?mludwig hat geschrieben:Naja, teilweise: ich habe es geschafft, das MySql weniger Speicher je Instanz benötigt, aber es laufen immernoch 11 Prozesse davon.
Ich bin auch dazu übergegangen, bei einem Update der Wikipedia-DB den Suchindex auf einer anderen Maschine erstellen zu lassen. Danach wird einfach rüberkopiert. Auf dem Pentium II 333 Mhz mit 396 MB Ram habe ich nach 48 h abgebrochen, weil abzusehen war das es eine Woche dauern würde. Ein anderer Rechner mit 1 GB Ram schaffte das an einem Abend ...
Inzwischen werde ich wohl keine Updates der Wikipedia mehr machen, weil es den Server wohl doch an seine Grenzen treibt, es ist halt eine große DB für so alte Hardware. Mit DSL und Flatrate bräuchte ich mir die Mühe nicht zu machen ...
grüße
mludwig
Wie viel Speicher belegt er bei dir pro Prozess?
cu Deta
Die Ausgabe von top zu mysql(nur mal ein Prozess):
Was ich gemacht habe? In der /etc/mysql/my.cnf die Einträge für key_buffer und thread_stack nach unten korrigiert. (4M und 128K je) Jedenfalls falls ich mich richtig erinnere, es ist schon ne Weile her. Man sollte sich sowas aufschreiben
grüße
mludwig
Code: Alles auswählen
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
704 mysql 9 0 26356 25m 3784 S 0.0 6.8 1:18.23 mysqld
grüße
mludwig
Bei mir siehts so aus, das mein kompletter Speicher überlaufen tut.mludwig hat geschrieben:Die Ausgabe von top zu mysql(nur mal ein Prozess):Was ich gemacht habe? In der /etc/mysql/my.cnf die Einträge für key_buffer und thread_stack nach unten korrigiert. (4M und 128K je) Jedenfalls falls ich mich richtig erinnere, es ist schon ne Weile her. Man sollte sich sowas aufschreibenCode: Alles auswählen
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 704 mysql 9 0 26356 25m 3784 S 0.0 6.8 1:18.23 mysqld
grüße
mludwig
18:19:37 up 7:12, 1 user, load average: 0.14, 0.11, 0.09
45 processes: 44 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 0.1% user, 0.1% system, 0.0% nice, 99.8% idle
Mem: 6196592K total, 6172824K used, 23768K free, 1195192K buffers
Swap: 12586916K total, 5771084K used, 6815832K free, 1222140K cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
8101 root 19 0 948 948 748 R 0.5 0.0 0:00 top
1 root 8 0 484 444 424 S 0.0 0.0 0:00 init
18816 root 9 0 748 708 628 S 0.0 0.0 0:02 syslogd
18914 root 9 0 540 364 364 S 0.0 0.0 0:00 klogd
20290 root 9 0 18940 2088 2068 S 0.0 0.0 0:00 spamd
21313 root 9 0 24300 18M 5580 S 0.0 0.3 0:08 spamd
21347 root 9 0 20996 15M 5480 S 0.0 0.2 0:06 spamd
21764 clamav 9 0 8852 744 744 S 0.0 0.0 0:00 clamd
23619 clamav 9 0 908 860 760 S 0.0 0.0 0:00 freshclam
24040 root 8 0 732 704 676 S 0.0 0.0 0:01 inetd
31939 root 8 0 1128 1012 956 S 0.0 0.0 0:00 master
32352 root 9 0 1120 980 916 S 0.0 0.0 0:00 sshd
1414 nobody 9 0 1348 1128 1088 S 0.0 0.0 0:00 proftpd
1507 root 8 0 684 624 564 S 0.0 0.0 0:00 cron
24778 postfix 9 0 1332 1268 1068 S 0.0 0.0 0:01 qmgr
5025 root 9 0 6344 4944 4292 S 0.0 0.0 0:00 apache
7585 root 9 0 1056 1056 924 S 0.0 0.0 0:00 pipelog.pl
7720 wwwrun 9 0 12132 10M 4348 S 0.0 0.1 0:05 apache
7750 wwwrun 9 0 12636 10M 4484 S 0.0 0.1 0:04 apache
8100 wwwrun 9 0 12044 10M 4344 S 0.0 0.1 0:03 apache
17824 wwwrun 9 0 12084 10M 4340 S 0.0 0.1 0:02 apache
27685 wwwrun 9 0 12156 10M 4484 S 0.0 0.1 0:04 apache
27715 wwwrun 9 0 12280 10M 4368 S 0.0 0.1 0:01 apache
32192 wwwrun 9 0 12488 10M 4360 S 0.0 0.1 0:01 apache
21029 root 9 0 980 980 800 S 0.0 0.0 0:00 mysqld_safe
22529 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
22568 root 9 0 488 488 416 S 0.0 0.0 0:00 logger
23107 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23137 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23172 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23202 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23268 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23461 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23496 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23520 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23557 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:00 mysqld
23622 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:02 mysqld
5122 wwwrun 9 0 10464 8840 4316 S 0.0 0.1 0:01 apache
5190 mysql 9 0 18652 18M 3884 S 0.0 0.3 0:01 mysqld
2531 postfix 9 0 1008 1008 844 S 0.0 0.0 0:00 pickup
cu Deta
Welcher Prozess benötigt bei Dir soviel Speicher? Von den 6 GB RAM sind knapp 5 GB belegt (Rest ist Buffer/Cache), zusätzlich sind noch 5,7 GB vom swap belegt?
Ist das ein 64bit System(weil >4 GB RAM)? Welcher Kernel? Soweit ich weiß gab es mit 2.4 mal starke Probleme mit dem VM-Subsystem, welches dann einfach im nächsten stable-Release ausgetauscht wurde. Diese Diskussionen damals ...
Fragen über Fragen scheint aber nichts mit dem ursprünglichen Thema dieses Threads zu tun zu haben. Dein MySQL sieht ähnlich aus wie bei mir (11 Prozesse, ungefähr der gleiche Speicherverbrauch)
grüße
mludwig
Ist das ein 64bit System(weil >4 GB RAM)? Welcher Kernel? Soweit ich weiß gab es mit 2.4 mal starke Probleme mit dem VM-Subsystem, welches dann einfach im nächsten stable-Release ausgetauscht wurde. Diese Diskussionen damals ...
Fragen über Fragen scheint aber nichts mit dem ursprünglichen Thema dieses Threads zu tun zu haben. Dein MySQL sieht ähnlich aus wie bei mir (11 Prozesse, ungefähr der gleiche Speicherverbrauch)
grüße
mludwig
es ist ein VSERVERmludwig hat geschrieben:Welcher Prozess benötigt bei Dir soviel Speicher? Von den 6 GB RAM sind knapp 5 GB belegt (Rest ist Buffer/Cache), zusätzlich sind noch 5,7 GB vom swap belegt?
Ist das ein 64bit System(weil >4 GB RAM)? Welcher Kernel? Soweit ich weiß gab es mit 2.4 mal starke Probleme mit dem VM-Subsystem, welches dann einfach im nächsten stable-Release ausgetauscht wurde. Diese Diskussionen damals ...
Fragen über Fragen scheint aber nichts mit dem ursprünglichen Thema dieses Threads zu tun zu haben. Dein MySQL sieht ähnlich aus wie bei mir (11 Prozesse, ungefähr der gleiche Speicherverbrauch)
grüße
mludwig
cu Deta
Mit VServern kenne ich mich nicht aus. Vielleicht ist es möglich, dass die RAM-Auslastung des Servers insgesamt so hoch liegt, also einer der anderen VServer des Systems so viel Speicher benötigt. Diesen Falles wäre es nicht dein Problem.
Ich kann mir nicht vorstellen, dass jedem VServer die 6 GB zugeteilt werden, sondern für das gesamte System gelten, aber wie gesagt, dass ist nur eine Vermutung.
grüße
mludwig
Ich kann mir nicht vorstellen, dass jedem VServer die 6 GB zugeteilt werden, sondern für das gesamte System gelten, aber wie gesagt, dass ist nur eine Vermutung.
grüße
mludwig