sql >> Databasteknik >  >> RDS >> PostgreSQL

FEL:slut på minne på maskin med 32 GB RAM och utan växlingsfil

Om jag läser utdata från din topp korrekt, tas den inte vid en punkt när du har ont om minne.

Det faktiska felet verkar bra - det kräver inte en enorm mängd minne så förmodligen var maskinen slut på minne vid den tidpunkten.

Låt oss ta en snabb titt på dina inställningar:

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

Så - du är av den åsikten att du kan stödja 1000 samtidiga frågor var och en med säg 10 + 40 MB (vissa kanske använder multiplar av 40 MB men låt oss vara rimliga). Så - detta tyder för mig att din maskin har> 500 kärnor och säg 100 GB RAM. Så är inte fallet.

Så - ta ditt antal kärnor och dubbla det - det är ett rimligt värde för det maximala antalet anslutningar. Det tillåter dig en fråga på varje kärna medan en annan väntar på I/O. Placera sedan en anslutningspoolare framför DB om du behöver (pgbouncer / Javas anslutningspoolning).

Då kan du till och med överväga att öka work_mem om du behöver.

Åh - helt rimligt att köra utan swap aktiverat. När du väl börjar byta är du i en värld av smärta i alla fall när det gäller databasanvändning.

Redigera:expandera på work_mem vs shared

Om du är osäker, se alltid dokumentation .

shared_buffers värde delas, som namnet antyder, mellan backends. work_mem är inte bara per backend, det är faktiskt per sort. Så - en fråga kan använda tre eller fyra gånger så mycket om den sorterar på tre underfrågor.



  1. Problem med att skapa främmande nycklar i mySql

  2. Grunderna för att ställa in MySQL på dedikerade servrar

  3. mysql-transaktioner i asp.net?

  4. Lagrade procedurer en no-go i php/mysql-världen?