2010-05-04 8 views
7

Ich suche PostgreSQL im RAM zur Leistungssteigerung zu betreiben. Die Datenbank ist nicht mehr als 1GB und sollte nicht mehr als 5GB werden. Ist es das wert? Gibt es irgendwelche Benchmarks? Ist es fehlerhaft?Wie viel schneller ist eine Datenbank im RAM?

Meine zweite große Sorge ist: wie einfach es ist, Dinge zu sichern, wenn es rein in RAM läuft ist das nur wie RAM verwendet als Tier-1 HD, oder ist es viel komplizierter

+0

Sind die Daten (meistens) schreibgeschützt oder schreibgeschützt? –

+0

@codeka Über 50/50 – orokusaki

Antwort

4

Es kann sich lohnen, wenn Ihre Datenbank E/A-gebunden ist. Wenn es CPU-gebunden ist, wird ein RAM-Laufwerk keinen Unterschied machen.

Aber zuerst einmal sollten Sie sicherstellen, dass Ihre Datenbank richtig abgestimmt ist, können Sie riesige Leistungsgewinne auf diese Weise erhalten, ohne irgendwelche Garantien zu verlieren. Sogar eine RAM-basierte Datenbank funktioniert schlecht, wenn sie nicht richtig eingestellt ist. Siehe PostgreSQL wiki on this, hauptsächlich shared_buffers, effective_cache_size, checkpoint_ *, default_statistics_target

Zweitens, wenn Sie Datenträger-Puffer synchronisieren vermeiden wollen auf jeden begehen (wie codeka in seinem Kommentar erklärt), deaktivieren Sie die synchronous_commit Konfigurationsoption. Wenn die Stromversorgung Ihres Computers unterbrochen wird, gehen einige aktuelle Transaktionen verloren, die Datenbank bleibt jedoch zu 100% konsistent. In diesem Modus wird RAM verwendet, um alle Schreibvorgänge, einschließlich Schreibvorgänge im Transaktionsprotokoll, zu puffern. Mit sehr seltenen Checkpoints, großen shared_buffers und wal_buffers kann es tatsächlich Geschwindigkeiten nahe denen eines RAM-Laufwerks erreichen.

Auch Hardware kann einen großen Unterschied machen. 15.000 RPM-Festplatten können in der Praxis dreimal so schnell sein wie billige Laufwerke für Datenbank-Workloads. RAID-Controller mit batteriegepuffertem Cache machen ebenfalls einen wesentlichen Unterschied.

Wenn das immer noch nicht genug ist, dann kann es sinnvoll sein, in flüchtigen Speicher zu konvertieren.

+0

@intgr Danke für die tolle Info. – orokusaki

1

Eigentlich ...? Solange Sie genügend Arbeitsspeicher zur Verfügung haben, läuft Ihre Datenbank bereits vollständig im Arbeitsspeicher Ihr Dateisystem wird alle Daten vollständig zwischenspeichern, so dass es keinen großen Unterschied macht

B ut ... es gibt natürlich immer ein bisschen Overhead, also kannst du immer noch versuchen, alles von einem Ramdrive zu starten.

Wie für die Sicherungen, das ist wie jede andere Datenbank. Sie können die normalen Postgres-Dump-Dienstprogramme verwenden, um das System zu sichern. Oder noch besser, lassen Sie es als Backup auf einen anderen Server replizieren.

+3

Eine Datenbank auf der Festplatte muss, auch wenn alle Seiten im Speicher sind, Schreibvorgänge in die Protokolldatei synchronisieren, um die ACID-Eigenschaften beizubehalten. Eine In-RAM-Datenbank wäre also eigentlich ein bisschen schneller, weil das nicht nötig wäre. Das gilt natürlich nicht, wenn die Datenbank meist nur lesbar ist. –

+0

@codeka In meinem Fall werde ich fast so viele Schreibvorgänge (mit vielen Transaktionen) machen, wie ich Lesevorgänge machen werde. – orokusaki

+0

@Dean Harding: bei den meisten Datenbankservern konfigurierbar. Schreibvorgänge müssen nicht synchron sein. Mit Postgres zum Beispiel können Sie komplett konfigurieren, wann Sie schreiben (Intervall, Bytes, etc ..). – Wolph

4

Die ganze Sache darüber, ob Sie Ihre Datenbank im Speicher halten müssen, hängt von der Größe und der Leistung ab und davon, wie robust sie mit Schreibvorgängen sein soll. Ich gehe davon aus, dass Sie in Ihre Datenbank schreiben und dass Sie die Daten im Falle eines Fehlers persistieren möchten.

Persönlich würde ich mich nicht um diese Optimierung kümmern, bis ich auf Leistungsprobleme stieß. Es scheint mir nur riskant.

Wenn Sie viele Lesevorgänge ausführen und nur sehr wenige Schreibvorgänge ausführen, kann ein Cache Ihren Zweck erfüllen. Viele ORMs verfügen über einen oder mehrere Caching-Mechanismen.

Vom Gesichtspunkt der Leistung, Clustering über ein Netzwerk zu einem anderen DBMS, die das Schreiben von Festplatten tut, scheint viel ineffizienter als nur ein normales DBMS und es so viel wie möglich im RAM wie Sie zu halten wollen.

1

5 bis 40 mal schneller als festplattenbasiertes DBMS. Sehen Sie sich Gartners Magic Quadrant für Operational DBMS 2013 an. Gartner zeigt, wer stark ist und, was noch wichtiger ist, notiert schwere Vorsicht ... Bugs. .Fehler ...Mangel an Unterstützung und schwierig zu verwenden von Anbietern.

+0

Stimme mit Golferchung zu. Geschwindigkeit ist ausgezeichnet, aber seien Sie vorsichtig mit Verkäufern. Nur wenige haben pure Haltbarkeit und Konsistenz. Andere haben eine schlüssige Konsistenz. – Savino

Verwandte Themen