Inzicht in gedeeld postgreSQL-geheugen
PostgreSQL maakt gebruik van geheugen dat kan worden geclassificeerd als:
- Lokaal geheugen - toegewezen aan elk proces
- Gedeeld geheugen - gebruikt door alle processen
Lokaal geheugen
Voor elk proces in PostgreSQL is geheugen vereist voor het verwerken van query's. Met de volgende serverparameters kunt u geheugengebruik definiëren:
work_mem definieert het geheugen dat is vereist voor het sorteren van tuples voor ORDER BY- en DISTINCT-bewerkingen. Deze parameter bepaalt de hoeveelheid geheugen die beschikbaar is voor interne sorteerbewerkingen en hashtabellen. Als u een grote hoeveelheid beschikbaar geheugen hebt en uw werkbelasting query's met complexe sortering heeft, kan het verhogen van deze parameterwaarde de prestaties verbeteren door grotere scans in het geheugen toe te staan voordat er naar de schijf wordt gemorst.
Een complexe query kan echter veel sorteer- en hashbewerkingen gelijktijdig uitvoeren. Elke bewerking gebruikt zoveel geheugen als deze waarde toestaat voordat deze begint met schrijven naar tijdelijke bestanden op basis van schijf. Op een bezet systeem is het totale geheugengebruik daarom vaak van een afzonderlijke work_mem parameter.
Als u deze waarde wilt afstemmen, gebruikt u Totaal RAM * 0,25 / max_connections als initiële waarde.
maintenance_work_mem is geheugen vereist voor vacuüm en opnieuw indexeren. Deze parameter bepaalt de hoeveelheid geheugen die beschikbaar is voor interne sorteerbewerkingen en hashtabellen. De standaardwaarde is 64 kB, maar het verhogen van deze waarde verbetert de prestaties voor vacuüm.
autovacuum_work_mem stelt het maximale geheugen in dat door elk autovacuum-proces moet worden gebruikt.
temp_buffers definieert geheugen voor het opslaan van tijdelijke tabellen. Met deze parameter wordt het maximum aantal tijdelijke buffers ingesteld dat door elke databasesessie wordt gebruikt.
effective_cache_size definieert de hoeveelheid beschikbaar geheugen voor schijfcache door het besturingssysteem en in de database. De PostgreSQL-queryplanner bepaalt of dit geheugen in ram-geheugen is opgelost. Indexscans worden waarschijnlijk gebruikt voor hogere waarden; anders worden sequentiële scans gebruikt als de waarde laag is.
Stel effective_cache_size in op 50% van het totale RAM-geheugen van de machine.
Gedeeld geheugen
Gedeeld geheugen wordt toegewezen bij het opstarten. Gedeeld geheugen wordt gebruikt voor:
shared_buffers definieert de gedeelde geheugenbuffers die door de server worden gebruikt. PostgreSQL laadt pagina's met tabellen en indexen van permanente opslag naar een gedeelde buffergroep en werkt er vervolgens in het geheugen aan. Deze gedeelde buffergroep is het belangrijkste onderdeel van het gedeelde geheugen dat door de server wordt gebruikt. De standaardwaarde is 128 MB (afhankelijk van de rekenlaag). Als u besluit meer geheugen toe te wijzen, moet u de server opnieuw opstarten.
wal_buffers definieert het aantal schijfpaginabuffers in het gedeelde geheugen voor het schrijven van logboekregistratie (WAL) voordat u deze naar permanente opslag schrijft.
Kortom, de belangrijke serverparameters met betrekking tot geheugen die u kunt afstemmen zijn:
- shared_buffers
- work_mem
- effective_cache_size