MySQL komplett in den Ram legen?

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
wecki
Posts: 101
Joined: 2005-01-27 08:55

MySQL komplett in den Ram legen?

Post by wecki »

Hallo,

ist es möglich mySQL komplett in den ram zu legen und somit die Performance für Abfragen etwas zu erhöhen?

Ich habe da etwas von RAM-Disk gehört, konnte aber keine informationen dazu finden.

Wie muss ich mir das dann vorstellen? Ich erstele quasi eine virtuelle Festplatte im RAM und installiere MySQL darauf?

Wie sieht es dann mit der datensicherheit aus? der rAM verliert seine daten je bei einem Reboot oder einem Stromausfall... gibt's da irgend eine Möglichkeit oder ein gutes HowTo?

Gruß
Wecki

phillux
Posts: 80
Joined: 2004-03-16 13:47
Location: Münster

Re: MySQL komplett in den Ram legen?

Post by phillux »

Es gibt ein Tabellenformat "Memory":
Hash based, stored in memory, useful for temporary tables

wecki
Posts: 101
Joined: 2005-01-27 08:55

Re: MySQL komplett in den Ram legen?

Post by wecki »

Leider ist es keine temporäre Tabelle.

Es wäre eine ganze Datenbank welche mein Kunde im RAM haben möchte.

Ist dies überhaupt sinnvoll im Bezug auf Performance?

Was bewirkt dieses Format Memory und wo stelle ich das ein? :?:

phillux
Posts: 80
Joined: 2004-03-16 13:47
Location: Münster

Re: MySQL komplett in den Ram legen?

Post by phillux »

Infos hier:
http://dev.mysql.com/doc/refman/4.1/en/ ... ngine.html

Die Performance sollte schon deutlich besser sein, da die gesamte Tabelle ja im RAM vorgehalten wird.

andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen

Re: MySQL komplett in den Ram legen?

Post by andreask2 »

MySQL Manual wrote: As indicated by their name, MEMORY tables are stored in memory and use hash indexes by default. This makes them very fast, and very useful for creating temporary tables. However, when the server shuts down, all data stored in MEMORY tables is lost. The tables themselves continue to exist because their definitions are stored in .frm files on disk, but they are empty when the server restarts.
Datanbanken zu optimieren ist ein gut bezahlter Job wenn man das wirklich kann. Maßnahmen hängen sehr von dem aktuelle Fall ab.

Datenbanken einfach in den Arbeitsspeicher zu legen ist zwar in manchen Fällen durchaus sinnvoll, es ist aber meistens keine geeignete Maßnahme um eine Webanwendung mal eben ein bisschen schneller zu machen.

metrax
Posts: 194
Joined: 2003-02-22 22:51
Location: München / Berg-am-Laim

Re: MySQL komplett in den Ram legen?

Post by metrax »

Wegen der Ramdisk: einfach den Kernel mit der Option kompilieren und /dev/ram0 glaub heißt das device mounten. dorthin die daten verschieben. nicht vergessen ein ständiges backup der DB zu machen ... denn Ausfall (z.b. Strom weg) = Daten weg ...

golloza
Posts: 23
Joined: 2005-01-03 17:27

Re: MySQL komplett in den Ram legen?

Post by golloza »

Bei der MEMORY-Engine oder konventionellen Tabellen (MyISAM/InnoDB) auf einer RAM-Disk muss man natürlich selber dafür sorgen, dass das auf die Platte geschrieben wird, wenn da was schief läuft, hat man natürlich ein Problem.

Wie schon gesagt ist das auch keineswegs ein Allheilmittel. Wahrscheinlich will der Kunde ja nicht explizit, dass seine Tabellen im RAM liegen, sondern einfach bessere Performance, oder?
Wenn es hauptsächlich SELECT-Abfragen sind und oft die gleichen Zeilen angefordert werden, kann der Query Cache schon recht viel bewirken, ohne dass selten gebrauchte Daten Speicher belegen.

wecki
Posts: 101
Joined: 2005-01-27 08:55

Re: MySQL komplett in den Ram legen?

Post by wecki »

Der kunde möchte eine bessere performance. leider bringt aber ein Cachen in diesem fall nicht viel, da es sich um eine produktvergleichplatform handelt.

Hier ist die Warscheinlichkeit äußerst gering, das 2 mal die gleichen Produkte angefragt werden.

mattiass
Userprojekt
Userprojekt
Posts: 608
Joined: 2005-12-16 17:57

Re: MySQL komplett in den Ram legen?

Post by mattiass »

wecki wrote:Der kunde möchte eine bessere performance. leider bringt aber ein Cachen in diesem fall nicht viel, da es sich um eine produktvergleichplatform handelt.

Hier ist die Warscheinlichkeit äußerst gering, das 2 mal die gleichen Produkte angefragt werden.
Existieren brauchbare INDEXes? Lieber einen INDEX zuviel als einen zuwenig. Damit ist oft eine Beschleunigung um Faktor 100 drin.

Viele Grüße,
Mattias

metrax
Posts: 194
Joined: 2003-02-22 22:51
Location: München / Berg-am-Laim

Re: MySQL komplett in den Ram legen?

Post by metrax »

MattiasS wrote: Lieber einen INDEX zuviel als einen zuwenig.
Zuviele INDEXe verderben aber auch gern mal den Brei!

mattiass
Userprojekt
Userprojekt
Posts: 608
Joined: 2005-12-16 17:57

Re: MySQL komplett in den Ram legen?

Post by mattiass »

Metrax wrote: Zuviele INDEXe verderben aber auch gern mal den Brei!
Nunja, auf jeder Spalte einen Index unterzubringen ist Overkill und Verschwendung von Plattenspeicher, aber ein zwei INDEXes auf den großen Tabellen wirken manchmal Wunder.

Und wenn ein INDEX wider erwarten nix gebracht hat, kann man ihn ja auch wieder entfernen.

Bevor ich damit anfinge, Tabellen ins RAM zu legen, würde ich damit hantieren.

Bei Tabellen, auf die primär lesend zugegriffen wird und genügend RAM kann es auch schon etwas bringen, ganze Tabellen in den Dateisystemcache des Kernels zu legen, wozu man einfach

Code: Select all

cat dateiname > /dev/null
gelegentlich ausführen muß.

Viele Grüße,
Mattias