Postgresql 如何可靠地约束postgres数据库的内存

Postgresql 如何可靠地约束postgres数据库的内存,postgresql,memory-management,Postgresql,Memory Management,我在一台非常小的机器上运行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 = (200

我在一台非常小的机器上运行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
对我来说至关重要的是,为了确保博士后的稳定运作,会话甚至邮政局长都不会因为内存限制而取消。在内存不足的情况下,postgres应该使用临时文件而不是内存

在某些情况下,我仍然会出现内存不足的错误。(例如,当我在表格中插入一个大的插入项时。)


我需要如何设置所有参数以确保postgres不会尝试获取超过可用内存的内存。

您可以参考本官方文档,以深入研究postgresql server的内存配置-

它对每个内存参数都有所有限制和适当的建议值,可以使用服务器配置属性(如CPU的#、RAM容量等)设置这些参数


否则,请使用此在线工具尝试不同的配置,并确保服务器不需要比可用内存更多的内存-

我会将work_mem设置得更低(在我的Raspberry3(1GB ram)上为4M),对于SSD(Pi:1.1),随机页面成本也更低。此外,还可以监视运行进程的RSS。(和减法(部分)是的,关于如何调整你的postgres系统有几个详细的说明。我提出的问题与推荐的模糊性有关。e、 g.有这样的语句“…有效缓存大小应设置为磁盘缓存可用内存的估计值…”。这是否意味着查询执行器将尝试使用此参数获取内存,如果失败,则会话将被取消?或者,如果我有n次合并联接,我在一个会话中使用n次work\u mem。在这种情况下,我如何对内存进行严格限制?没有任何规定“限制内存使用量超过此阈值”。因此,您的任务是创建一个位于内存中的配置。理想情况下应该避免n次合并联接,因为postgresql擅长同时执行多个精简查询(因为每个查询都适合work_mem)。调整RDBMS真的很棘手,你需要经常监视你的使用情况,然后调整配置。谢谢你的评论。我想我只能“调整并尝试”。不过,我希望文档中有更多关于每个设置的内存使用效果的直接信息。