DualCore Server + MySQL

MySQL, PostgreSQL, SQLite
theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

DualCore Server + MySQL

Post by theomega » 2006-06-13 18:58

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

User avatar
Joe User
Project Manager
Project Manager
Posts: 11139
Joined: 2003-02-27 01:00
Location: Hamburg

Re: DualCore Server + MySQL

Post by Joe User » 2006-06-13 19:41

Nimm den Dual-Core und ein 32bit OS.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Re: DualCore Server + MySQL

Post by theomega » 2006-06-13 20:40

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

User avatar
Joe User
Project Manager
Project Manager
Posts: 11139
Joined: 2003-02-27 01:00
Location: Hamburg

Re: DualCore Server + MySQL

Post by Joe User » 2006-06-13 21:03

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.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

theomega
Userprojekt
Userprojekt
Posts: 696
Joined: 2003-01-27 14:36

Re: DualCore Server + MySQL

Post by theomega » 2006-06-14 00:08

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

knebb
Posts: 92
Joined: 2006-05-30 11:16
Location: M-V

Re: DualCore Server + MySQL

Post by knebb » 2006-06-15 10:47

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

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: DualCore Server + MySQL

Post by isotopp » 2006-06-16 16:46

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.

neodg
Posts: 38
Joined: 2005-10-19 08:50

Frage

Post by neodg » 2006-11-28 11:28

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!

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Frage

Post by isotopp » 2006-12-03 12:27

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.