postgresql - 如何可靠地对 postgres 数据库进行内存约束

标签 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 = (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/

相关文章:

caching - L1 和 L2 缓存的行大小

SQL 与 NOSQL : Which to use for this schema?

postgresql - SQLite 到 PostgreSQL 仅数据传输(以维护 alembic 功能)

sql - 查询没有结果数据的目的地 - PostgreSQL

c - 堆管理器的空闲列表存储在进程的地址空间中的什么位置?

c - 有什么方法可以测试询问进程是否分配了地址

sql - 在postgres中将日期字段转换为多个字段的最快方法

postgresql - 列出 PostgreSQL 中具有不同所有者的所有表的约束

linux - 与 I/O 地址端口相比,设备 mmap 如何工作?

c++ - 如果类有析构函数,堆数组会分配 4 个额外字节