我在一台非常小的机器上运行 postgres 10.4,在 Debian 上有严格的内存限制(例如 200MB)。在我的情况下必须禁用系统交换空间,但 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
对我来说至关重要的是, session 甚至 postmaster 永远不会因为内存限制而被取消,以确保 postgres 的稳定运行。在内存不足的情况下,postgres 应该使用临时文件而不是内存。
在某些情况下,我仍然会遇到内存不足的错误。 (例如,当我在表格中插入大量内容时。)
我需要如何设置所有参数以保证 postgres 不会尝试获取超过可用内存的内存。
最佳答案
深入学习postgresql server的内存配置可以引用这篇官方文档-https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
它具有每个内存参数的所有限制和适当的建议值,可以使用服务器配置属性(如 CPU 数量、RAM 容量等)设置这些参数。
否则,使用此在线工具尝试不同的配置并确保服务器不需要比可用内存更多的内存 - https://pgtune.leopard.in.ua/#/
关于postgresql - 如何可靠地对 postgres 数据库进行内存约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52566373/