Я запускаю postgres 10.4 на очень маленькой машине со строгими ограничениями памяти (например, 200 МБ) в Debian.В моем случае пространство подкачки системы должно быть отключено, но места на диске SSD достаточно (например,> 500 ГБ).Я использую водопадный подход для распределения всей доступной памяти для различных целей в postgres, следуя этой логике:
The available memory is 200MB
---
max_connections = 10
max_worker_processes = 2
shared_buffers = 50MB
work_mem = (200MB - shared_buffers) * 0.8 / max_connections
maintenance_work_mem = (200MB - shared_buffers) * 0.1 / max_worker_processes
temp_buffers = (200MB - shared_buffers) * 0.05
wal_buffers = (200MB - shared_buffers) * 0.05
temp_file_limit = -1 (i.e. unlimited)
effective_cache_size = 200MB / 2
Для меня очень важно, чтобы сессии или даже postmaster никогда не отменялись из-за ограничений памяти наобеспечить стабильную работу postgres.В ситуациях с нехваткой памяти postgres должен работать с временными файлами, а не с памятью.
В некоторых ситуациях я все еще получаю ошибки памяти.(например, когда у меня большая вставка в таблицу.)
Как мне нужно установить все параметры, чтобы гарантировать, что postgres не будет пытаться получить больше памяти, чем доступно.