首页 > 解决方案 > postgresql 11中的复制槽内存不足错误

问题描述

问题显示在这里:https ://www.enterprisedb.com/postgres-tutorials/postgres-13-logicaldecodingworkmem-and-how-it-saves-your-server-going-out-memory

PostgreSQL 给我们的解决方案是使用logical_decoding_work_mem 配置参数。

我的问题是我使用 PostgreSQL 11 并且logical_decoding_work_mem 解决方案在此版本中不可用。

如何限制 PostgreSQL 11 中 walsender 的内存使用量?

标签: postgresql

解决方案


进入你的 postgresql.conf

在 postgresql.conf 中设置的这个参数的默认值是:

#shared_buffers = 128MB

您应该将其增加到服务器内存的 20%。

work_mem (integer) work_mem 参数基本上提供了内部排序操作和哈希表在写入临时磁盘文件之前要使用的内存量。排序操作用于 order by、distinct 和 merge join 操作。散列表用于散列连接和基于散列的聚合。

在 postgresql.conf 中设置的这个参数的默认值是:

#work_mem = 4MB

设置正确的 work_mem 参数值可以减少磁盘交换,从而加快查询速度。

我们可以使用下面的公式来计算数据库服务器的最佳 work_mem 值:

Total RAM * 0.25 / max_connections

max_connections 参数是 GUC 参数之一,用于指定与数据库服务器的最大并发连接数。默认情况下,它设置为 100 个连接。

我们也可以直接将 work_mem 分配给一个角色:

postgres=# alter user test set work_mem='4GB';

ALTER ROLE

维护工作内存(整数)

maintenance_work_mem 参数基本上提供了维护操作(如vacuum、create index 和alter table add foreign key 操作)使用的最大内存量。

在 中设置的该参数的默认值为postgresql.conf

#maintenance_work_mem = 64MB

建议将此值设置为高于 work_mem;这可以提高吸尘性能。一般来说应该是:

Total RAM * 0.05

有效缓存大小(整数)

Effective_cache_size 参数估计有多少内存可用于操作系统和数据库本身的磁盘缓存。PostgreSQL 查询计划器决定它是否固定在 RAM 中。索引扫描最有可能用于更高的值;否则,如果值较低,将使用顺序扫描。建议将 Effective_cache_size 设置为机器总 RAM 的 50%。


推荐阅读