docker 中 postgres 数据库的 /dev/shm 大小建议

Vse*_*mov 8 postgresql docker

我们在 docker 容器中有 postgresql 11.7 数据库。

我们遇到了一个问题"pq: could not resize shared memory segment "/PostgreSQL.XXX" to XXX bytes: No space left on device"如下所述。

解决方案有所帮助,我们不再有问题了。但是我们应该为 Postgres 的 docker 容器的 shm_size 设置哪个大小呢?

有什么推荐吗?我们如何计算 shm_size 的“最佳大小”?

Lau*_*lbe 5

有两种情况需要使用共享内存:

  • 服务器启动时分配的共享内存。它由几个部分组成,但最大的部分是shared_buffers数据缓存。

    所以你必须有更多的共享内存。

  • 由并行查询分配的共享内存段,用于并行工作程序之间的通信。

    它们的大小取决于传输的数据,并且可以分配其中的几个,因此这是一种更难控制的资源。

在内存受限的系统上,我建议您禁用并行查询。它使查询速度更快,但每个查询使用更多资源,因此总体吞吐量不会提高。如果您想在单个查询上投入大量资源,那么这是很好的选择。

要禁用并行查询,请设置max_parallel_workers为 0。

  • 根据 https://postgrespro.com/list/thread-id/2448119 并观察 PostgreSQL Docker 映像的行为,我不相信“shared_buffers”是从 shm 分配的。我们正在运行 1GB 的共享缓冲区和 256MB 的 shm 大小,看起来没问题。 (2认同)