MySQL und 16 CPUs

MySQL, PostgreSQL, SQLite
knebb
Posts: 92
Joined: 2006-05-30 11:16
Location: M-V

MySQL und 16 CPUs

Post by knebb » 2006-07-14 23:23

Yohoo!

Wir haben hier einen Tyan VX50 Server im Einsatz. Der besteht aus zwei Mainboard mit jeweils vier CPU-Sockeln für DualCoreOpterons. Bisher lief er mit 4 Stück 875er (=8 Kerne) reibungslos mit SuSE Enterprise 9 und MySQL 4.1.x

Jetzt wollten wir noch ein wenig mehr Dampf haben und haben weitere 4 Opterons mit jeweils 2x1GB RAM dazu geholt und eingebaut.

Das Teil läuft gut, /proc/cpuinfo zeigt auch brav 16 CPUs an, "top" sieht cool aus 8)
Aber wehe, man schaltet MySQL dazu- dann geht das System unter Last auf 50% Systemlast an CPU-Zeit und ist langsamer als mit 8 Kernen.

Hat jemand eine Idee, was das sein könnte? Mag MySQL keine 16 CPUs? Woran kann es noch liegen?

Grüße

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

Re: MySQL und 16 CPUs

Post by isotopp » 2006-07-15 10:02

knebb wrote:Aber wehe, man schaltet MySQL dazu- dann geht das System unter Last auf 50% Systemlast an CPU-Zeit und ist langsamer als mit 8 Kernen.

Hat jemand eine Idee, was das sein könnte? Mag MySQL keine 16 CPUs? Woran kann es noch liegen?
Interne Locks im MySQL 4.1 Prozess. Es wird mit neueren Versionen von MySQL besser, aber grundsätzlich skaliert sich MySQL horizontal (mehr Rechner) besser als vertikal (größere Rechner). Scale out, not up!

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

Re: MySQL und 16 CPUs

Post by knebb » 2006-07-15 11:40

isotopp wrote:
knebb wrote:Aber wehe, man schaltet MySQL dazu- dann geht das System unter Last auf 50% Systemlast an CPU-Zeit und ist langsamer als mit 8 Kernen.
Interne Locks im MySQL 4.1 Prozess. Es wird mit neueren Versionen von MySQL besser, aber grundsätzlich skaliert sich MySQL horizontal (mehr Rechner) besser als vertikal (größere Rechner). Scale out, not up!
Das würde dazu passen, wenn die Last mit zusätzlichen CPUs annähernd linear ansteigt.
Schalte ich nur eine CPU (also insgesamt 10 statt 16 bzw. 8) hinzu, kommt das gleiche Bild. Sobald Last auf MySQL liegt, geht die Sys-CPU-Anteil massiv nach oben und das ganze MySQL wird langsam. :evil:

oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

Re: MySQL und 16 CPUs

Post by oxygen » 2006-07-15 12:03

ist vielleicht der Interconnect zwischen den Mainboards ein bissel schwach und bremst das ganze aus, sobald das 2. Mainboard aktiv ist?

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

Re: MySQL und 16 CPUs

Post by knebb » 2006-07-15 12:14

oxygen wrote:ist vielleicht der Interconnect zwischen den Mainboards ein bissel schwach und bremst das ganze aus, sobald das 2. Mainboard aktiv ist?
Das ist ein Tyan VX50. Die sind speziell dafür gebaut und werden auch so ausgeliefert. Das würde mich doch ziemlich wundern, wenn das hardwaremäßig nicht passen würde :o
Die Boards sind das Tyan S4881 und das Huckepackboard M4881 (glaube ich).

Werde aber auch Tyan nochmal antickern.

Grüße

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

Re: MySQL und 16 CPUs

Post by captaincrunch » 2006-07-15 13:01

Was an isotopps Aussage war jetzt eigentlich so unklar?
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

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

Re: MySQL und 16 CPUs

Post by knebb » 2006-07-15 13:08

CaptainCrunch wrote:Was an isotopps Aussage war jetzt eigentlich so unklar?
Nichts. Es war vollkommen klar, daß die Antwort (MySQL skaliert horizontal besser als vertikal) nicht mit dem Problem zu tun hat (16 CPUs langsamer als 8 ).

Danke für den Hinweis.

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

Re: MySQL und 16 CPUs

Post by Joe User » 2006-07-15 20:23

knebb wrote:
CaptainCrunch wrote:Was an isotopps Aussage war jetzt eigentlich so unklar?
Nichts. Es war vollkommen klar, daß die Antwort (MySQL skaliert horizontal besser als vertikal) nicht mit dem Problem zu tun hat (16 CPUs langsamer als 8 ).

Danke für den Hinweis.
Du möchtest isotopps Antwort so oft durchlesen bis Du sie verstanden hast...

Hint: isotopp weiss sehr genau, wovon er schreib...
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.

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

Re: MySQL und 16 CPUs

Post by isotopp » 2006-07-15 20:29

knebb wrote:Nichts. Es war vollkommen klar, daß die Antwort (MySQL skaliert horizontal besser als vertikal) nicht mit dem Problem zu tun hat (16 CPUs langsamer als 8 ).
Dies ist nicht die Antwort, sondern der Lösungsvorschlag.

Die Antwort steht davor ("Interne Locks im MySQL-Server", und zwar speziell in Innobase. MyISAM hat mit Parallelität sowieso schon viel früher Probleme).

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

Re: MySQL und 16 CPUs

Post by knebb » 2006-07-15 20:34

Joe User wrote: Du möchtest isotopps Antwort so oft durchlesen bis Du sie verstanden hast...
Ok, habe ich erneut versucht. Dann verstehe ich da wohl etwas anderes darunter.
Ich verstehe das folgende:
1.
MySQL 4.1 hat Lockingprobleme, wenn es auf mehreren CPUs läuft. Eine Grenze ist nicht angegeben/ bekannt. Gibt es eine solche Grenze? Ist diese etwa 8 CPUs?
2.
Es ist grundsätzlich BESSER, in die Breite zu skalieren. Daraus schließe ich, daß ein Zuwachs von 100% CPUs lange nicht 100% MySQL-Power erwarten läßt. Das war mir auch klar. Es erklärt aber nicht, warum das System LANGSAMER wird!
3. Lese ich darauf KEIN "No-Go", sondern nur den Hinweis, daß es anders besser WÄRE.

Aber wie gesagt, vielleicht bin ich wirklich zu doof.
Hint: isotopp weiss sehr genau, wovon er schreib...
Das weiß ich schon...

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

Re: MySQL und 16 CPUs

Post by isotopp » 2006-07-16 11:18

knebb wrote:MySQL 4.1 hat Lockingprobleme, wenn es auf mehreren CPUs läuft. Eine Grenze ist nicht angegeben/ bekannt. Gibt es eine solche Grenze? Ist diese etwa 8 CPUs?
Du kannst auch einmal mit innodb_thread_concurrency experimentieren (in der Annahme, daß Du innodb einsetzt). In vielen Fällen funktioniert es besser, wenn man innodb_thread_concurrency auf 4 setzt, als wenn man es auf größere Werte setzt.
Es ist grundsätzlich BESSER, in die Breite zu skalieren. Daraus schließe ich, daß ein Zuwachs von 100% CPUs lange nicht 100% MySQL-Power erwarten läßt.
Das ist nicht nur bei MySQL, sondern bei jedem System so. In der Regel wächst Deine Systemleistung bei einer Verdoppelung der CPUs nur um einen kleineren Anteil. Als Faustregel gilt: man erreicht die ökonomische Grenze der vertikalen Skalierung, wenn die Leistung bei 100% mehr CPUs nur um 66% wächst.
Das war mir auch klar. Es erklärt aber nicht, warum das System LANGSAMER wird!
Du kannst jedes System mit Lock Waits zum Totalstillstand unter Last bringen.

Genauer: Jedes asynchrone System kann durch Einfügen von Waits zu einem synchronem System umgebaut werden, daher ist jedes synchrone System immer langsamer als das äquivalente asynchrone System. Vertikale Skalierung baut in der Regel synchrone Systeme, horizontale Skalierung baut in der Regel (Ausnahme: MySQL Cluster) baut in der Regel asynchrone Systeme.

Interesting Read: http://radar.oreilly.com/archives/2006/ ... _1_se.html und folgende Artikel.

In dem Artikel da oben such mal nach "All hail", dann bekommst Du die betreffenden Quotes zum Thema, die ich voll unterschreibe
Web 2.0 applications will require more horsepower with less money than One Database or his big brother One Cluster ('All Hail The Central Cluster') will offer. (After all, a 64-way Mysql Cluster installation is just the budget-friendly version of a Sun E-10000.)
Deine Anwendung ist vielleicht kleiner als 2nd Life, aber das Problem existiert offensichtlich auch schon auf Deiner Ebene. 16way-Maschinen sind aber keine Lösung, so verlockend sie scheinen mögen.

Horizontales Wachstum ist teurer und aufwendiger als vertikales Wachstum ("einfach eine größere Kiste kaufen und neu deployen"), weil es mehr Hirnschmalz und eine Architektur mit "Hacks" erfordert.

Z.B. war bei web.de die Umstellung der Mailer auf asynchrone Anfragen an die Middleware sehr ekelig: Zwar ist irgendwann die Zustellzeit für eine Mail im Mittel auf 1/12tel gefallen (von 250ms auf unter 20ms), aber das hat an gewissen Stellen sechs mal mehr Code erfordert, und asynchrone Corba-Calls sind kein Zuckerschlecken (http://kris.koehntopp.de/artikel/linuxtag/ hat leider die konkreten Beispiele aus dem gesprochenen Text nicht in den Slides).

Der Punkt ist aber, daß das die _einzige_ Methode war, das schneller und größer zu bekommen, und zwar indem man Abhängigkeiten relaxed hat und Waits eliminiert hat.

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

Re: MySQL und 16 CPUs

Post by isotopp » 2006-07-21 08:36

knebb wrote:Hat jemand eine Idee, was das sein könnte? Mag MySQL keine 16 CPUs? Woran kann es noch liegen?
http://developers.sun.com/solaris/artic ... _tune.html

Trifft auch für Deine Karre in weiten Teilen zu.