/
Zurück zum Blog
EngineeringJune 9, 20262 min

Wie ich PostgreSQL schnell mache

PostgreSQL ist schnell. Wenn Leute sagen, es sei langsam, dann haben sie es meistens nie getunt. Ich habe das auf die harte Tour gelernt. Hier ist, was ich heute mache.

G
Giorgi Romanadze
Wie ich PostgreSQL schnell mache

Ich schaue zuerst auf die Indizes

Die meisten langsamen Abfragen sind aus einem Grund langsam. Postgres liest jede Zeile in der Tabelle, eine nach der anderen. Ich führe EXPLAIN (ANALYZE, BUFFERS) auf der langsamen Abfrage aus und suche nach einem sequenziellen Scan auf einer großen Tabelle. Dann füge ich den richtigen Index hinzu. Eine Abfrage, die vier Sekunden dauerte, fällt auf vier Millisekunden. Dieser eine Schritt löst mehr Probleme als alles andere.

Ich passe die Speichereinstellungen an

Die Standardkonfiguration ist für eine kleine Maschine gebaut. Fast niemand ändert sie. Auf einem echten Server passe ich vier Einstellungen an:

  • shared_buffers

  • effective_cache_size

  • work_mem

  • maintenance_work_mem

Diese vier bringen oft den größten Sprung bei der Geschwindigkeit. Die Standardwerte verschwenden den RAM, für den du schon bezahlt hast.

Ich halte Autovacuum zufrieden

Tote Zeilen sammeln sich mit der Zeit an. Die Statistiken werden alt. Der Planner trifft schlechte Entscheidungen. Die Leistung sinkt langsam, und eines Tages gerät jemand in Panik. Ich mache Autovacuum aggressiver bei den vielbeschäftigten Tabellen und halte die Statistiken frisch. Der Planner wählt dann von selbst gute Pläne.

Ich behebe das N+1 in der App

Manchmal ist die Datenbank in Ordnung und die App ist das Problem. Ein ORM feuert 500 kleine Abfragen ab, um eine Seite zu zeichnen. Keine Datenbankeinstellung rettet dich davor. Ich fasse die Lesevorgänge zusammen. Ich nutze Joins. Ich stelle PgBouncer davor, damit die App nicht mehr für jede Anfrage eine neue Verbindung bezahlt.

Ich messe, bevor ich rate

Ich schalte pg_stat_statements ein. Es zeigt mir, welche Abfragen die meiste Zeit fressen. So behebe ich das echte Problem, nicht das, das ich mir vorstelle. Der größte Teil der Last kommt von nur wenigen Abfragen. Ich finde sie und ich behebe sie.

Die einfache Wahrheit

PostgreSQL läuft weit auf einem guten Server, bevor du sharden oder migrieren musst. Leute wechseln zu früh zu einer neuen Datenbank. Sie geben Postgres die Schuld, bevor sie es konfigurieren.

Also bevor du dich von Postgres abwendest, probiere zuerst diese Liste aus. Meistens bleibst du.

Artikel teilen

Bereit für Cloudheed?

Stellen Sie Ihre PostgreSQL-Datenbank in unter 60 Sekunden bereit. Keine Kreditkarte erforderlich.