sql >> Database >  >> RDS >> PostgreSQL

FOUT:onvoldoende geheugen op machine met 32GB RAM en zonder wisselbestand

Als ik de uitvoer van je top correct lees, wordt deze niet genomen op een moment dat je geen geheugen meer hebt.

De eigenlijke fout lijkt in orde - het vraagt ​​niet om een ​​enorme hoeveelheid geheugen, dus vermoedelijk had de machine op dat moment onvoldoende geheugen.

Laten we even naar je instellingen kijken:

max_connections = 1000                  # (change requires restart)
work_mem = 40MB                         # min 64kB

Dus - u bent van mening dat u 1000 gelijktijdige query's kunt ondersteunen, elk met bijvoorbeeld 10 + 40 MB (sommige gebruiken misschien veelvouden van 40 MB, maar laten we redelijk zijn). Dus - dit suggereert voor mij dat uw machine> 500 kernen heeft en 100 GB RAM heeft. Dat is niet het geval.

Dus - neem je aantal cores en verdubbel het - dat is een redelijke waarde voor het maximale aantal verbindingen. Dat zal u één vraag op elke kern toestaan ​​terwijl een andere op I/O wacht. Plaats dan indien nodig een verbindingspooler voor de DB (pgbouncer / Java's verbindingspooling).

Dan zou je zelfs kunnen overwegen om work_mem te verhogen als dat nodig is.

Oh - volkomen redelijk om te draaien zonder swap ingeschakeld. Als je eenmaal begint met swappen, zit je sowieso in een wereld van pijn wat betreft databasegebruik.

Bewerken:uitbreiden op work_mem vs shared

Raadpleeg bij twijfel altijd de documentatie .

De shared_buffers waarde wordt, zoals de naam al doet vermoeden, gedeeld tussen backends. De work_mem is niet alleen per backend, het is eigenlijk per soort. Dus - één zoekopdracht kan drie of vier keer zoveel gebruiken als het sorteert op drie subquery's.



  1. Hoe MySQL te profileren

  2. Ongeldig argument opgegeven voor foreach() in Codeigniter

  3. MYSQL Selecteren uit tabellen op basis van meerdere rijen

  4. Kan geen verbinding maken met MySQL - Glassfish en Hibernate