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.