Kleine databases versnellen

ArticleCategory: [Choose a category for your article]

Applications

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

[Mark Nielsen]

TranslationInfo:[Author and translation history]

original in en Mark Nielsen 

en to nl Egon Willighagen

AboutTheAuthor:[A small biography about the author]

De auteur werkt bij The Computer Underground, Inc. en is Linux fan. Hij houdt ervan om gekke dingen met Linux te doen en rare projecten te verzinnen. En waarom? Met computers werken HOORT te gek te zijn. Ook werkt hij als vrijwilliger bij ZING, www.genericbooks.com om gratis en vrij beschikbare software en literatuur te promoten.

Abstract:[Here you write a little summary]

In dit artikel is te lezen hoe PostgreSQL databases te versnellen zijn door het gebruik van een RAMDISK.

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

[Illustration]

ArticleBody:[The article body]

Inleiding

OK, wat is een RAMDISK? En hoe kunnen we die gebruiken om database servers zoals PostgreSQL te versnellen?

Een ramdisk is eigenlijk gewoon intern geheugen dat zich voor doet als ware het een harde schijf. Telkens als je iets naar de ramdisk schrijft, wordt dit bewaard in het interne geheugen. Dit heeft voor- en nadelen. Het grote voordeel is dat opslag in het interne geheugen veel sneller is dan opslag op de harde schijf. Maar het nadeel is dat het interne geheugen bij het opnieuw opstarten van de computer gewist wordt, zodat veranderingen niet zonder meer bewaard kunnen worden.

Dit betekent, dat als de database gegevens enkel tijdelijk op een ramdisk gezet worden, dit de database server kan versnellen zonder dat we de veranderingen verliezen.

Een ramdisk maken

Voor het opzetten van een standaard ramdisk in de directory /mnt/ramdisk, typt u het volgende:

mkdir -p /mnt/ramdisk
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /mnt/ramdisk
De grootte van de ramdisk kan (en moet vaak) aangepast worden aan uw eigen wensen. Dit kan als volgt.
  1. Bepaal hoe groot uw ramdisk moet zijn. In dit voorbeeld gebruiken we 50Mb.
  2. Verander daarna de /etc/lilo.conf file. Lilo is een programma dat uw computer vertelt hoe het moet opstarten en past enkele zaken van uw linux systeem aan, zoals het aanmaken van een ramdisk. Voeg de regel "ramdisk=50000" toe aan /etc/lilo.conf zoals in het voorbeeld hieronder.
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    image=/boot/vmlinuz-2.2.5-15
            label=linux
            root=/dev/hda2
            read-only
            ramdisk=50000		
    		
  3. Typ nu "lilo" opdat de veranderingen doorgevoerd worden en herstart uw computer. Als de computer opnieuw is opgestart, typ dan opnieuw de volgende drie regels:
    mkdir -p /Test
    mkfs -t ext2 /dev/ram0
    mount /dev/ram0 /Test
    

    U kunt deze drie regels beter toevoegen aan /etc/rc.d/rc.local. Dan wordt de ramdisk elke keer aangemaakt als de computer opstart. (Dit geldt voor RedHat systemen. Het werkt waarschijnlijk ook op andere systemen maar niet op Debian).

Een ramdisk opzetten voor PostgreSQL

In het ideale geval heeft u twee database servers. Eentje om veranderingen in de database te maken en de andere die een kopie is op de ramdisk. Om deze kopie te maken gebruiken we de commando's "pg_dump" en "pg_dumpall".

NOOT: We gaan er vanaf nu vanuit dat de omvang van de ramdisk zoals u die in lilo.conf heeft opgegeven, groter is dan de grootte van de database. U kunt de grootte opvragen met het commando "cd /var/lib/pgsql; du ".

Hierna kunt u de huidige postgresql server die geïnstalleerd is in de directory in "/var/lib/pgsql", op de ramdisk installeren met de volgende commando's:

        ### Stop de huidige postgresql server
/etc/rc.d/init.d/postgres stop
        ### Hernoem de huidige installatie directory
mv /var/lib/pgsql /var/lib/pgsql_main
        ### Maak een directory waaronder uw ramdisk staat
mkdir -p /var/lib/pgsql_memory
 	### Wijzig de eigenaar van de nieuwe directory naar postgres
	### Of de eigenlijke eigenaar
chown postgres /var/lib/pgsql_memory
	### Maak een link van de originale directory naar de nieuwe dir
ln -s /var/lib/pgsql_memory /var/lib/pgsql

	### Formatteer de ramdisk
mkfs -t ext2 /dev/ram0
	### Verbindt de ramdisk met de nieuwe postgresql directory
mount /dev/ram0 /var/lib/pgsql_memory

	### Kopieer alles uit de echte postgresql directory naar de ramdisk
tar -C /var/lib/pgsql_main -cp . | tar -C /var/lib/pgsql_memory -xp
        ### Start de postgresql server opnieuw
/etc/rc.d/init.d/postgres start

Opmerkingen over de snelheid

Ik heb geprobeerd de snelheidswinst te bepalen door de database server op een ramdisk te plaatsen. Soms liep de winst op tot 50%, maar dit was niet altijd het geval.

Hierbij merkte ik op dat de winst slechts 10 to 20% bedraagt wanneer de data gecached is en dus al in het geheugen staat. Wanneer er veel data opgevraagd wordt, neemt de winst enorm toe.

Het grootste voordeel van het gebruik van een ramdisk, is dat het gebruik van de relatief trage harde schijf wordt vermeden. Zonder het gebruik van een ramdisk kan de database in de cache belanden maar er ook weer uit verwijderd worden. Als er daarna gegevens opgevraagd worden, moeten deze vanaf de harde schijf geladen worden.

Verdere opmerkingen

  1. Het Linux besturingssysteem bewaart een geladen bestand in het geheugen totdat dit geheugen voor iets anders nodig is: de harde schijf wordt gecached. Dit lijkt een oplossing, maar als iets uit mijn database wordt opgevraagd, hoor ik altijd de harde schijf bewegen.
    Het gebruik van een ramdisk zorgt ervoor dat de database altijd in het geheugen staat.
  2. Het voordeel is bovenal de snelheidswinst.
  3. Het nadeel is dat het onderhoud van de database complexer wordt. Zorg dat u de juiste database bijwerkt en maak regelmatig een backup.

Referenties

  1. Gebruik van een ramdisk onder Linux door Mark Nielsen.
  2. De PostgreSQL homepage: www.postgresql:org

mirror server hosted at Truenetwork, Russian Federation.