我在Debian上具有严格内存限制(例如200MB)的非常小的计算机上运行postgres 10.4。在我的情况下,必须禁用系统交换空间,但是SSD磁盘空间足够可用(例如> 500GB)。我正在使用瀑布方法按照以下逻辑将所有可用内存分配给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不会尝试获得比可用内存更多的内存。
答案 0 :(得分:1)
您可以参考此官方文档来深入研究Postgresql服务器的内存配置-https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
它具有每个内存参数的所有限制和正确建议的值,可以使用服务器配置属性(例如CPU数量,RAM容量等)来设置这些参数。
否则,请使用此在线工具尝试不同的配置,并确保服务器所需的内存不超过可用内存-https://pgtune.leopard.in.ua/#/