DBAtlas · Atlas für Datenbankbetrieb

Speichereinstellungen prüfen (shared_buffers, work_mem, maintenance_work_mem)

PostgreSQLParameter

Befehl

SELECT name,
       current_setting(name) AS value,
       source,
       context
FROM pg_settings
WHERE name IN ('shared_buffers', 'effective_cache_size', 'work_mem', 'hash_mem_multiplier',
               'maintenance_work_mem', 'autovacuum_work_mem', 'max_connections',
               'max_parallel_workers_per_gather', 'huge_pages', 'temp_buffers', 'wal_buffers')
ORDER BY name;

-- Rough ceilings: work_mem x max_connections and the autovacuum memory ceiling
SELECT pg_size_pretty(pg_size_bytes(current_setting('work_mem'))
                      * current_setting('max_connections')::int) AS work_mem_x_max_connections,
       pg_size_pretty(pg_size_bytes(current_setting('maintenance_work_mem'))
                      * current_setting('autovacuum_max_workers')::int) AS autovacuum_mem_ceiling;

-- Trace of operations that did not fit in work_mem: temp files per database
SELECT datname, temp_files, pg_size_pretty(temp_bytes) AS temp_size, stats_reset
FROM pg_stat_database
WHERE datname IS NOT NULL
ORDER BY temp_bytes DESC;

Was es tut

Zeigt speicherbezogene Parameter mit Wert, Quelle (Standard/Konfigurationsdatei) und Änderungskontext (postmaster = Neustart); grobe Speicherobergrenzen für work_mem und Autovacuum; und das Temp-File-Volumen je Datenbank.

Wann einsetzen

Beim Aufbau eines neuen Servers, nach einer RAM-Erweiterung, nach einem Eingriff des OOM Killers oder bei starker Nutzung von Temp-Dateien.

Vorsicht

work_mem wird nicht je Verbindung, sondern je Sortier-/Hash-KNOTEN (bei Hashes mal hash_mem_multiplier) und für jeden parallelen Worker separat zugewiesen; eine komplexe Abfrage kann ein Mehrfaches von work_mem nutzen, das berechnete Produkt ist also eine grobe Warnung, keine Obergrenze. Typische Startwerte: shared_buffers ~25 % des RAM (Neustart erforderlich), effective_cache_size ~50-75 % (nur ein Hinweis für den Planner, reserviert nichts), maintenance_work_mem 512MB-2GB. Mit autovacuum_work_mem = -1 darf jeder Autovacuum-Worker maintenance_work_mem nutzen. Ist temp_bytes hoch, work_mem je Rolle oder Abfrage erhöhen, nicht global. Bei großen shared_buffers unter Linux huge_pages in Betracht ziehen.

In DBAtlas öffnen →

Verwandte Einträge