Wie würden Sie überprüfen, ob Ihre Postgresql-DB-Instanz mehr RAM-Speicher benötigt, um ihre aktuellen Arbeitsdaten zu verarbeiten?
database
performance
postgresql
memory
SDReyes
quelle
quelle
Antworten:
Wenn Sie nur unter Linux arbeiten, sollte Ihr physischer Gesamtspeicher größer sein als Ihre Datenbankgröße auf der Festplatte, um E / A zu minimieren. Schließlich befindet sich die gesamte Datenbank im Lesecache des Betriebssystems, und die E / A können nur Änderungen an der Festplatte vornehmen. Ich bevorzuge es, die DB-Größe durch Ausführen von "du -shc $ PGDATA / base" zu ermitteln - diese Methode fasst alle Datenbanken zu einer einzigen Zahl zusammen. Solange Sie größer sind, sollte es in Ordnung sein.
Darüber hinaus können Sie die Cache-Trefferquote von Heap- und Indexblockabrufen anzeigen. Diese messen die Trefferquote in den gemeinsam genutzten Puffern von PostgreSQL. Die Zahlen können etwas irreführend sein - auch wenn es sich möglicherweise um einen Fehler im Cache für gemeinsam genutzte Puffer handelt, kann es dennoch zu einem Treffer im Lese-Cache des Betriebssystems kommen. Trotzdem sind Treffer in gemeinsam genutzten Puffern immer noch günstiger als Treffer im Lesecache des Betriebssystems (die wiederum um einige Größenordnungen günstiger sind, als wenn sie auf die Festplatte zurückkehren müssen).
Um die Trefferquote der gemeinsam genutzten Puffer anzuzeigen, verwende ich diese Abfrage:
Dies gibt Ihnen die 25 schlimmsten Straftäter, bei denen der Puffercache für alle Tabellen fehlt, bei denen mindestens ein Block von "Festplatte" abgerufen werden musste (dies kann entweder der Betriebssystem-Lese-Cache oder die tatsächliche Festplatten-E / A sein). Sie können den Wert in der WHERE-Klausel erhöhen oder eine weitere Bedingung für heap_blks_hit hinzufügen, um selten verwendete Tabellen herauszufiltern.
Dieselbe grundlegende Abfrage kann verwendet werden, um die Gesamtindex-Trefferquote pro Tabelle zu überprüfen, indem die Zeichenfolge "heap" global durch "idx" ersetzt wird. Schauen Sie sich pg_statio_user_indexes an, um eine Aufschlüsselung nach Index zu erhalten.
Ein kurzer Hinweis zu gemeinsam genutzten Puffern: Eine gute Faustregel für Linux ist, den Konfigurationsparameter shared_buffers auf 1/4 des Arbeitsspeichers, jedoch nicht mehr als 8 GB festzulegen . Dies ist keine feste Regel, sondern ein guter Ausgangspunkt für die Optimierung eines Servers. Wenn Ihre Datenbank nur 4 GB groß ist und Sie einen 32-GB-Server haben, sind 8 GB gemeinsam genutzte Puffer tatsächlich zu viel des Guten. Sie sollten dies auf 5 oder 6 GB einstellen können und dennoch Platz für zukünftiges Wachstum haben.
quelle
Ich habe diese SQL erstellt, um das Verhältnis von Tabellen zu Festplattentreffern anzuzeigen:
quelle
Es funktioniert auch, wie in Heroku doc gesagt:
quelle