postgresql - 在 PostgreSQL 中增加共享缓冲区的缺点是什么
问题描述
我注意到shared_buffer
在查询 PostgreSQL 时未加载数据时性能显着下降,差异可能接近 100 倍。所以在优化查询的过程中,我想知道是否有办法通过增加shared_buffer
.
然后我开始研究shared_buffer
PostgreSQL。我发现推荐值是25%
操作系统内存,PostgreSQL 将利用操作系统缓存来加速查询。但是从我自己的数据库中看到的情况来看,从磁盘读取与从磁盘读取shared_buffer
有很大的不同,所以我最想从中查询shared_buffer
。
shared_buffer
所以我想知道,如果我在 PostgreSQL 中增加 会有什么缺点?如果我只shared_buffer
在我的只读实例中增加怎么办?
解决方案
增加缓冲区高速缓存的一个缺点是双缓冲。当您需要将一个页面读入 shared_buffers 时,它可能首先需要驱逐一个现有页面为其腾出空间。但是随后操作系统缓存可能也需要从自身中逐出一个页面,以便为其从实际磁盘读取页面腾出空间。然后你最终会在两个地方都找到相同的页面,这会浪费缓存空间。因此,您更有可能需要从实际磁盘读取页面,而不是从操作系统缓存中读取页面,这要慢得多。从双缓冲的角度来看,您可能希望 shared_buffers 远小于系统 RAM 的一半(使用 OS 缓存作为主缓存)或远大于一半(使用 shared_buffers 作为主缓存)
另一个缺点是,如果它太大,您可能会开始出现内存不足错误或调用 OOM 杀手或以其他方式破坏系统的稳定性。
另一个问题是,在某些操作后,如 DROP TABLE、TRUNCATE 或在某些情况下结束 COPY,PostgreSQL 需要使大量缓冲区无效,并选择通过搜索整个缓冲区缓存来实现。如果你做了很多这些操作,那段时间真的可以加起来很大的缓冲区缓存设置。
推荐阅读
- regex - 使用正则表达式从 0 到 999 之间的数字中提取带有数字的字符串
- ios - 调整 UIImageView 的大小保持纵横比
- python - 我如何使用 Python 处理新加坡车牌的校验和
- python - 获取分层熊猫数据框中的先前值
- excel - VBA - 搜索列名,完全删除列
- java - 未找到休眠配置文件
- python - 使用请求包时的 Viusal Studio python 错误(错误:json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0))
- javascript - 如何在不使用 Jquery 的情况下将类添加到 DOM 元素 - Angular 6
- python - 如果满足条件,如何使用openpyxl python删除excel中的特定行
- r - 事件(AlerKey)的相关性基于节点(区域)上的时间(First_Occurred)。由于过去的事件,哪个事件更有可能发生?