postgresql - postgresql 11中的复制槽内存不足错误
问题描述
PostgreSQL 给我们的解决方案是使用logical_decoding_work_mem 配置参数。
我的问题是我使用 PostgreSQL 11 并且logical_decoding_work_mem 解决方案在此版本中不可用。
如何限制 PostgreSQL 11 中 walsender 的内存使用量?
解决方案
进入你的 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%。
推荐阅读
- javascript - 如何从椭圆上的 2 个点在画布上绘制椭圆,其中长轴 (rx) 的斜率和短轴 (ry) 长度未知
- ruby-on-rails - 使用管理面板添加记录后,在数据库中记录列参数全部为零
- android - NavigationView 项目选择器不会突出显示启用的项目
- javascript - JavaScript 在文本区域的第一行识别向上箭头按下
- python-3.x - 从 {condition} 的 pandas 中删除组
- ios - 通过 StoryBoard 在滚动视图中平移大图像
- c++ - C++ 多正则表达式条件语法
- django - 我应该让 Django Allauth 保持原样还是按照我的建议进行更改
- spring - 如果容器中不存在依赖项的接口,带有@Autowired 的 bean 如何获取其依赖项
- php - 登录后的laravel第二个身份验证屏幕