Page 1 of 1

DualCore Server + MySQL

Posted: 2006-06-13 18:58
by theomega
Hallo Leute,
ich bin gerade am überlegen ob mein neuer Server ein AMD Athlon 64
3700+ oder einen AMD Athlon 64 X2 4200+ Dual Core enthalten soll.
RAM-Ausstattung wäre beides mal 2GB.
Einsatzzweck der Sache: Datenbank-Server mit hauptsächlich InnoDB-Tabellen.

Meine Frage:
Kann X2 bei einem puren Datenbank-Server genutzt werden bzw ist das sinvoll?

Danke
TO

Re: DualCore Server + MySQL

Posted: 2006-06-13 19:41
by Joe User
Nimm den Dual-Core und ein 32bit OS.

Re: DualCore Server + MySQL

Posted: 2006-06-13 20:40
by theomega
Das mit den 32bit war klar, hatten wir beide (und noch einige andere Elite-Members hier) schonmal diskutiert bzw. besprochen.
Das Problem ist doch wenn ich es richtig sehe folgendes: Kann man den mysql-Prozess davon überzeugen sich an beide cpus zu binden bzw beide auszulasten. Weil wenn die Leistung von einem CPU nacher bracht liegt dann hab ich wenig davon.
Anders wäre natürlich die Situation wenn ich noch einen Webserver dort laufen hätte, aber dem ist nicht so, ich will also das der mysqld beide CPUs komplett benutzt!

Danke
TO

Re: DualCore Server + MySQL

Posted: 2006-06-13 21:03
by Joe User
Per Google: http://forums.mysql.com/read.php?24,9787,9869#msg-9869
Sollte Deine Frage ausreichend beantworten ;)
Andernfalls kannst Du ja noch warten bis isotopp über diesen Thread stolpert.

Re: DualCore Server + MySQL

Posted: 2006-06-14 00:08
by theomega
Hy,
also irgendwie bin ich nach Lesen des Links nicht schlauer als vorher. Aber wie du bereits sagtes: Warten wir auf den Spezialisten!

Gruß und Danke
TO

Re: DualCore Server + MySQL

Posted: 2006-06-15 10:47
by knebb
theomega wrote: Das Problem ist doch wenn ich es richtig sehe folgendes: Kann man den mysql-Prozess davon überzeugen sich an beide cpus zu binden bzw beide auszulasten. Weil wenn die Leistung von einem CPU nacher bracht liegt dann hab ich wenig davon.
MySQL nutzt beide CPUs. Voraussetzung ist natürlich ein SMP-Kernel.

Auf einem MySQL-Server unter meiner Fittiche sind zwei Dual-Core Opterons drauf. Ein "top" sieht interessant aus.
Der mysql-Prozess liegt immer bei 99% CPU-Last. Drücke ich "1", zeigt er eine ziemlich gleichmäßige Auslastung aller CPUs an.

MySQL scheint also nur einen Prozess aufzumachen, aber mehrere Threads, die dann die zusätzlichen CPUs nutzen. Der Apache macht ja mehrere Prozesse auf.

Nimm den CualCore, nimm ein SMP-Kernel und (solange Du Dir sicher bist, den RAM nicht erweitern zu wollen) ein 32bit OS.

Grüße

Re: DualCore Server + MySQL

Posted: 2006-06-16 16:46
by isotopp
theomega wrote:ich bin gerade am überlegen ob mein neuer Server ein AMD Athlon 64 3700+ oder einen AMD Athlon 64 X2 4200+ Dual Core enthalten soll. RAM-Ausstattung wäre beides mal 2GB.
Einsatzzweck der Sache: Datenbank-Server mit hauptsächlich InnoDB-Tabellen.

Meine Frage:
Kann X2 bei einem puren Datenbank-Server genutzt werden bzw ist das sinvoll?
MySQL ist eine Single Process-Multiple Threads Architektur. Es wird das von der libc ausgegebene Threadmodell verwendet. Auf meinem System (keine statisch gelinkte libc):

Code: Select all

kris@linux:~> ldd /usr/local/mysql-max-5.0.22-linux-i686-glibc23/bin/mysqld| egrep "(libc.|libpthread)"
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x4003e000)
        libc.so.6 => /lib/tls/libc.so.6 (0x400c4000)
kris@linux:~> getconf GNU_LIBPTHREAD_VERSION
NPTL 2.3.5
Dieses Threadmodell verwendet Kernelfunktionen für Threads die über mehrere CPUs verteilt werden können.

InnoDB verwendet intern mehrere Threads, dazu kommen die von Deinen Connections aufgemachten und mit SHOW PROCESSLIST sichtbaren Threads.

Code: Select all

linux:/export/data/rootforum # ./start
linux:/export/data/rootforum # Starting mysqld daemon with databases from /export/data/rootforum/data

linux:/export/data/rootforum # mysql-3340
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1 to server version: 5.0.18-max-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

root@localhost [(none)]> show engine innodb statusG
...
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (write thread)
...
Alle diese Threads können über die vorhandenen CPUs verteilt werden und dort Dinge tun.

Eine einzelne Query nutzt bis einschließlich MySQL 5.0 in den weitaus meisten Fällen nur eine CPU.

Ein Slave-Server, der keine weiteren Reads bekommt, sondern nur repliziert ("Backup-Slave") kann im Prinzip nur eine CPU nutzen.


Als Daumenregel kann man sich merken, daß es nicht sinnvoll ist, mehr CPUs zu haben als Dinge, die man in Bewegung halten will. Ein Quad-Dualcore Opteron mit 2 Platten wartet halt schneller auf Disk-I/O.

Als Daumenregel kann man sich auch merken, daß ein Datenbankserver in der Regel zunächst einmal nicht an CPU-Überlastung stirbt, sondern daran, daß die Platten überlastet sind, weil er zu viele Daten lesen oder schreiben muß.

Ram ist für die meisten Leute ein besserer Invest als CPUs. Mehr Platten (nicht größere Platten) sind ebenfalls für die meisten Leute ein besserer Invest als CPU (aber viel schlechter als RAM in allen read-lastigen Fällen).

Es ist natürlich trivial, ein pathologisches Gegenbeispiel zu konstruieren, aber für die weitaus meisten in der freien Wildbahn vorkommenden Anwendungen hält die Daumenregel ganz gut.

Frage

Posted: 2006-11-28 11:28
by neodg
Habe 2 Dualcore Master-Slave Server mit je 2 GB Ram.

Beide neu aufgesetzt (Debian 4.0) und mysql 5.0.27 drauf.

Master-Slave läuft ohne Probleme.

Aber... bei jedem Server werden alle mysql-Prozesse über nur einen Systemprozess abgearbeitet, sprich ein show processlist zeigt immer nur eine Zeile was der mysql tut. Das war vor dem neu aufsetzen anders, da waren mal locker 500 mysql Prozesse und da war die Performance auch viel viel besser.

Im php der Client Server sind die max connections,... alle auf -1, also unbegrenzt.

Frage, wo ist das vorgegeben das der nur einen Prozess haben darf und nicht wie zuvor zB 1000 oder so...

Help!

Re: Frage

Posted: 2006-12-03 12:27
by isotopp
neodg wrote:Aber... bei jedem Server werden alle mysql-Prozesse über nur einen Systemprozess abgearbeitet, sprich ein show processlist zeigt immer nur eine Zeile was der mysql tut. Das war vor dem neu aufsetzen anders, da waren mal locker 500 mysql Prozesse und da war die Performance auch viel viel besser.

Im php der Client Server sind die max connections,... alle auf -1, also unbegrenzt.

Frage, wo ist das vorgegeben das der nur einen Prozess haben darf und nicht wie zuvor zB 1000 oder so...
SHOW PROCESSLIST zeigt Dir die Connections, also die Anzahl der Threads, die arbeiten (ohne die systeminternen Threads). Wenn da nur eine Zeile kommt, dann nutzt Du auch nur einen Thread.

"ps axuwww| grep mysql[d]" zeigt Dir die Prozesse, wenn NPTL verwendet wird (MySQL nutzt immer nur einen Prozeß). "ps axuwww -L | grep mysql[d]" zeigt Dir die Threads in diesem Prozeß. Mit Linuxthreads statt NPTL zeigt Dir "ps axuwww| grep mysql[d]" die Threads als Prozesse an.