更改max_connections或shared_buffers后Postgresql不会重新启动

问题描述:

我已经在我的postgres.config上测试过pgtune,所以我知道我可以在那里更改,但是当我尝试更改max_connections或shared_buffers时,我无法重新启动postgres。我只是得到一个错误,但日志中没有指定错误。 (不知道在哪里这些日志去,但他们不是在正规pg_log DIR)更改max_connections或shared_buffers后Postgresql不会重新启动

我的设置是:

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

IM在512的Linode它只能运行PostgreSQL的。如果我将shared_buffers超过24MB或max_connections超过120,我无法重新启动postgres。

我在Xen的的Linode实例运行在Ubuntu 12.04.2 LTS:

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

任何人都知道的Postgres它的自我判断24MB和120间的连接是最大的系统?

+0

你在什么操作系统上? – 2013-04-11 09:24:48

+0

Ubuntu 12.04.2 LTS(GNU/Linux 3.8.4-x86_64-linode31 x86_64) – 2013-04-11 10:23:59

这听起来像您可能超过了共享内存的极低默认限制。请参阅operating system resource limits。对于Linux,请参阅kernel.shmmax

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

+0

只需浏览文档,但如果我了解它的要点,我需要更改我的服务器设置? – 2013-04-11 12:09:35

+0

@ Garreth00假设我的*猜测是什么导致PostgreSQL启动是正确的,是的。您需要检查日志以获取更多信息;如果它不在PostgreSQL日志本身中,它可能在'daemon.log'中。无论如何,你如何停止/启动PostgreSQL? – 2013-04-11 23:16:19

+0

我同意@CraigRinger。我的经验是虚拟机(linode是虚拟机?)和共享内存不能很好地混合。可能共享内存以某种方式被固定到物理内存中,并且虚拟机的资源紧张。恕我直言,你应该增加estimated_cache_size来代替,并保持共享mem至少(高速缓存目录,存储会话数据+ semafores等)。 – wildplasser 2013-04-11 23:29:02