Mysql Server tunen?

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Mysql Server tunen?

Beitrag von monotek » 23.05.2005 15:59:27

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?

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 23.05.2005 18:33:13

Ü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. ;-)

mludwig
Beiträge: 807
Registriert: 30.01.2005 19:35:04

Beitrag von mludwig » 23.05.2005 18:55:34

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

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 23.05.2005 19:26:46

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.

mludwig
Beiträge: 807
Registriert: 30.01.2005 19:35:04

Beitrag von mludwig » 23.05.2005 19:51:26

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 :-)

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 23.05.2005 21:25:57

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.

Benutzeravatar
dominator
Beiträge: 790
Registriert: 26.08.2003 10:05:37
Wohnort: Neuerdings meistens im Bierparadies Oberfranken

Beitrag von dominator » 24.05.2005 09:30:44

monotek 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?
Bei vermuteten Performance-Problemen mit MySQL hilft dir vielleicht mtop :idea:
monotek 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?
SQL :?:
gruss + viel erfolg

Michael
--
Aus aktuellem Anlass :
"Der Glubb is a Depp" - Fränkische Weisheit

Benutzeravatar
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?

Beitrag von feltel » 24.05.2005 09:42:01

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?
Wir betreiben den dfde-Server (XP 3000, 1GB RAM) hier mit den folgenden Settings in der /etc/mysql/my.cnf:

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
OTRS ist doch in Perl geschrieben. mod_perl wäre da sicherlich nicht verkehrt.

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 24.05.2005 23:25:33

dominator hat geschrieben:
SQL :?:
stimmt. allerdings sind die dumps trotzdem nicht kompatibel.
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.

Maj0r
Beiträge: 476
Registriert: 08.12.2003 14:52:39
Wohnort: Jüchen, Ne
Kontaktdaten:

Beitrag von Maj0r » 25.05.2005 08:35:32

Hatte postgre gegenüber mysql nicht früher den Vorteil (und die dazugehörigen Nachteile), dass es keine Transaktionen kannte und daher eine gute Ecke fixer war ?
Warum sollte/ist es heute schneller als mysql oder schmeiss ich da was durcheinander ?

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 25.05.2005 13:16:29

MysqL konnte keine Transaktionen.
Das Postgre schneller ist, kann ich auch nicht sicher sagen, da meine Infos da auch nur auf hören / sagen beruhen...

deta1
Beiträge: 978
Registriert: 23.07.2003 17:11:11

Beitrag von deta1 » 08.10.2005 12:20:11

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 :-)
Hallo!

Hast du das Problem in Griff bekommen?

cu Deta

mludwig
Beiträge: 807
Registriert: 30.01.2005 19:35:04

Beitrag von mludwig » 08.10.2005 15:29:30

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

deta1
Beiträge: 978
Registriert: 23.07.2003 17:11:11

Beitrag von deta1 » 08.10.2005 16:00:20

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
Was hast du gemacht?
Wie viel Speicher belegt er bei dir pro Prozess?

cu Deta

mludwig
Beiträge: 807
Registriert: 30.01.2005 19:35:04

Beitrag von mludwig » 08.10.2005 16:40:07

Die Ausgabe von top zu mysql(nur mal ein Prozess):

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
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

deta1
Beiträge: 978
Registriert: 23.07.2003 17:11:11

Beitrag von deta1 » 08.10.2005 18:21:59

mludwig hat geschrieben:Die Ausgabe von top zu mysql(nur mal ein Prozess):

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
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
Bei mir siehts so aus, das mein kompletter Speicher überlaufen tut.

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

mludwig
Beiträge: 807
Registriert: 30.01.2005 19:35:04

Beitrag von mludwig » 08.10.2005 19:45:54

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

deta1
Beiträge: 978
Registriert: 23.07.2003 17:11:11

Beitrag von deta1 » 08.10.2005 20:15:02

mludwig 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
es ist ein VSERVER

cu Deta

mludwig
Beiträge: 807
Registriert: 30.01.2005 19:35:04

Beitrag von mludwig » 08.10.2005 23:57:50

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

Antworten