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.