Beschleunigung kleiner Datenbanken unter Linux

ArticleCategory: [Choose a category for your article]

Applications

AuthorImage:[Here we need a little image form you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Mark Nielsen 

en to de Jens Link 

AboutTheAuthor:[A small biography about the author]

Der Autor arbeitet für The Computer Underground, Inc. als Linux-Profi, freut sich über alberne Dinge und denkt sich sinnlose Projekte aus. Warum? Weil Computer Spaß machen sollen. Mark arbeitet außerdem für ZING, www.genericbooks.com as freiwilliger Mitarbeiter um freie software und freie Literatur zu unterstützen.

Abstract:[Here you write a little summary]

Dieser Artikel beschreibt wie man einen PostgreSQL Datenbankserver mit Hilfe einer RAMDISK beschleunigt.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Einleitung

Also gut, was ist eine RAMDISK und wie können wir sie benutzen, um einen Datenbankserver wie PostgreSQL zu beschleunigen?

Eine RAMDISK ist eigentlich nichts anderes als ein Speicherbereich, den sie wie eine normale Festplatte benutzen können. Jedesmal wenn sie nun auf die RAMDISK zugreifen, greifen sie auf den Arbeitsspeicher ihres Computers und nicht auf die Festplatte zu. Dies hat Vor- und Nachteile. Der größte Vorteil ist, da sie auf das RAM des Computer zugreifen alles wesentlich schneller ist, da ja Speicherzugriffe wesentlich schneller als Festplattenzugriffe sind. Der große Nachteil ist allerdings, dass alle Änderungen an den Daten bei einem Neustart des Computers verloren gehen.

Für PostgreSQL bedeutet dies, das er schneller wird, wenn sie alle Daten in den Speicher laden.

Einrichten einer RAMDISK für /Test

Um eine RAMDISK im Verzeichnis /Test anzulegen gehen sie wie folgt vor:

mkdir -p /Test
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /Test
Wenn dies fehlschlägt, haben sie wahrscheinlich keine RAMDISK Unterstützung in ihren Kernel mit eingebunden. Aktivieren sie CONFIG_BLK_DEV_RAM in ihrer Kernel Konfiguration und übersetzen sie den Kernel neu.

Mit Hilfe der obigen Befehle wird eine knapp 4MB große RAMDISK angelegt. Wenn sie diese auf z.B. 50MB vergrößern wollen, lesen sie in den Ramdisk Artikel.

Einrichten einer RAMDISK für PostgreSQL

Im Idealfall haben sie zwei Datenbankserver, einen an dem sie Änderungen vornehmen, und einen zweiten der seine Daten auf der RAMDISK ablegt. Um dies zu erreichen, müssen sie die Befehle "pg_dumb" bzw. "pg_dumpall" verwenden.

Bemerkung:Ich gehe davon aus, das sie die RAMDISK Option in der lilo.conf größer eingestellt haben als ihren Datenbankserver. Wenn sie die ungefähre Größe ihrer Datenbank feststellen wollen benutzen sie den Befehl " /cd/var/lib/pgsql;du " .

Um ihre Datenbank, die in /var/lib/pgsql installiert ist in eine RAMDISK zu installieren, müssen sie wie folgt vorgehen:

### Stoppen des laufenden Datenbankservers
/etc/rc.d/init.d/postgres stop

### Umbenennen des aktuellen Verzeichnisses
mv /var/lib/pgsql /var/lib/pgsql_main

### Erstellen des Verzeichnisses für die RAMDISK
mkdir /var/lib/pgsql_memory

### Ändern des Besitzers des neuen Verzeichnisses auf postgres (oder wer
### auch immer der eigentliche Eigentümer auch ist)
chown postgres /var/lib/pgsql_memory

### Erstellen einer Verknüpfung auf /var/lib/pgsql
ln -s /var/lib/pgsql_memory /var/lib/pgsql

### Formatieren der RAMDISK
mkfs -t ext2 /dev/ram0

### Mounten der RAMDISK
mount /dev/ram0 /var/lib/pgsql_memory

### Kopieren aller Daten auf die RAMDISK
tar -C /var/lib/pgsql_main -cp . | tar -C /var/lib/pgsql_memory -xp

### Starten von PostgreSQL
/etc/rc.d/init.d/postgres start

Eine Bemerkung zur Geschwindigkeit

Ich habe versucht den Geschwindigkeitsunterschied mit und ohne RAMDISK zu testen. In einigen Fällen gibt es einen Geschwindigkeitszuwachs von bis zu 50% wenn posgress auf der RAMDISK liegt, in anderen Fällen nicht.

Bei meinen Tests fiel mir auf, dass wenn die Daten vom Betriebsystem gecached werden der Geschwindigkeitszuwachs nur zwischen 10 und 20% liegt. Wenn viele gleiche Daten in die Datenbank eingegeben werden ist der Geschwindigkeitszuwachs dramatisch.

Der große Vorteil dieses "Ramdisk Tricks" besteht darin, dass sie den Datenbankserver zwingen im Speicher zu bleiben und so Zugriffe auf ihre Festplatte vermeiden. Wenn sie die Ramdisk nicht benutzen, könnte es sein das ihr Datenbankserver ausgelagert wird, und wenn sie ihn später wieder benötigen, muß er erst von der Festplatte geladen werden.

Anmerkungen

  1. Unter Linux wird eine Datei, die gelesen wurde solange im Speicher gehalten bis der Speicher für etwas anderes gebraucht wird. Die Datei wird also gecached. Dies sieht zwar nach einer Lösung aus, allerdings habe ich die Erfahrung gemacht, das jedesmal wenn ich auf meinen Datenbankserver zugreife die Festplatte aktiv wird. Die Nutzung einer RAMDISK zwingt den Datenbank Server Arbeitspeicher zu benutzen. Wenn sie den Datenbankserver häufig benutzen, würde ich ihn in den Arbeitsspeicher legen.
  2. Der große Vorteil eine RAMDISK für die Datenbank zu benutzen ist ganz einfach die hohe Geschwindigkeit. Die eignet sich hervorragend für Read Only Datenbanken.
  3. Der Nachteil besteht darin, das man wissen muß wie man die ganze Sache pflegt. Wenn sie Änderungen vornehmen, vergewissern sie sich, dass sie eine Sicherung der Änderungen gemacht haben.

References

  1. Wie man eine Ramdisk für Linux nutzt , von Mark Nielsen
  2. PostgreSQL Homepage