【问题标题】:Postgresql does not restart after changing max_connections or shared_buffers更改 max_connections 或 shared_buffers 后 Postgresql 不会重新启动
【发布时间】:2013-04-12 07:41:40
【问题描述】:

我已经在我的 postgres.config 上测试了 pgtune,所以我知道我可以在那里更改什么,但是当我尝试更改 max_connections 或 shared_buffers 时,我无法重新启动 postgres。我只是收到一个错误,但日志中没有任何内容指定错误。 (不确定这些日志的去向,但它们不在常规的 pg_log 目录中。)

我的设置是:

shared_buffers = 24MB  # (pgtune wizard 2013-04-11 = 120MB)
max_connections = 120  # (pgtune wizard 2013-04-11 = 200)

我在一个只运行 postgresql 的 512 linode 上。如果我将 shared_buffers 更改为超过 24MB 或将 max_connections 更改为超过 120,我将无法重新启动 postgres。

我正在使用 Ubuntu 12.04.2 LTS 的 Linode xen 实例上运行:

Ubuntu 12.04.2 LTS (GNU/Linux 3.8.4-x86_64-linode31 x86_64)

有人知道 postgres 是否可以自行确定我的系统的最大连接数为 24MB 和 120?

【问题讨论】:

  • 你使用的是什么操作系统?
  • Ubuntu 12.04.2 LTS (GNU/Linux 3.8.4-x86_64-linode31 x86_64)

标签: postgresql postgresql-9.1


【解决方案1】:

听起来您可能超出了共享内存的一个非常低的默认限制。

手册中对此进行了介绍 - 请参阅 operating system resource limits。对于 Linux,请参阅 kernel.shmmax

在旁注中,增加max_connections 通常是错误的答案。大多数 PostgreSQL 实例在活动连接数量相对较少的情况下工作得最好。通常最好使用连接池来排队工作;您将以更低的资源使用获得更好的整体吞吐量。如果您的应用程序没有内置连接池,您可以使用 PgBouncer 作为外部连接池。

【讨论】:

  • 刚刚浏览了文档,但如果我掌握了要点,我需要更改我的服务器设置吗?
  • @Garreth00 假设我的 猜测 是什么导致 PostgreSQL 启动是正确的,是的。您需要检查您的日志以获取更多信息;如果它不在 PostgreSQL 日志本身中,它可能在 daemon.log 中。无论如何,你是如何停止/启动 PostgreSQL 的?
  • 我同意@CraigRinger。我的经验是虚拟机(linode 是虚拟机?)和共享内存不能很好地混合。可能共享内存以某种方式固定到物理内存中,并且虚拟机资源紧张。恕我直言,您应该增加estimated_cache_size,并将共享内存保持在最低限度(缓存目录、存储会话数据+semafores 等)。
  • @wildplasser 这不是我的经验;在 Amazon EC2 和 Linode 等 Xen VM 上,我没有遇到任何问题,您只需像任何其他 Linux 主机一样增加 kernel.shmmax
  • @CraigRinger:我感觉 OP 无法完全控制内核 shm 设置。虽然不确定 shm 是否被固定(这会使实例交换一个非常昂贵的过程)我同意你关于 max_connections 的看法;组合爆炸潜伏在黑暗中的某个地方。 l'enfer, c'est les autres ... 和所有这些东西
猜你喜欢
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 2015-01-04
  • 2021-12-18
相关资源
最近更新 更多