1

我遇到的问题是我的 PostgreSQL 实例在我的应用程序运行后的某个时候经常停止工作。通过重新启动 PostgreSQL windows 服务,我可以让它再次工作,但我需要知道是什么让我的 postgres 实例停止工作。

通过查看 postgres 日志,我收到此错误(以及其他错误):

"FATAL:  could not reattach to shared memory (key=348, addr=01E70000): 487
2012-04-25 11:05:24 PDT WARNING:  worker took too long to start; cancelled"

这是我正在处理的场景。我正在使用在 PostgreSQL (8.3) 数据库上进行一些处理的 WCF 服务。每 10 秒就有 2 台“客户端”机器使用此 Web 服务。

从客户端应用程序中,我正在初始化 Web 服务,例如

RemoteServiceClient service = new RemoteServiceClient();

在 Web 服务方面,在每次初始化时,我都会创建一个新的 postgres 连接实例。这里我没有打开连接,只是初始化:

public class Service : IService
{
    NpgsqlConnection connection = null;

    /// <summary>
    /// Default constructor for remote service
    /// </summary>
    public Service()
    {
        connection = new NpgsqlConnection(Utils.DBConnectionString);
    }
}

在我的 Web 服务的功能中,我根据需要打开和关闭连接,这样我就不会在运行中留下打开的连接。通过查看机器使用 Web 服务时的常见活动,我注意到只有大约 3-4 个连接(当没有数据库活动发生时为空闲)。我检查了 postgres 默认设置,“max_connections”设置为 100。

我真的很难解决这个问题,任何帮助将不胜感激!

谢谢!

4

1 回答 1

3

版本 8.3.8(发布日期:2009-09-09)中有一个针对此问题的错误修复:

修复 Windows 共享内存分配代码(Tsutomu Yamada,Magnus)

此错误导致经常报告的“无法重新附加到共享内存”错误消息。

使用检查您的版本SELECT version();

于 2012-04-26T05:59:23.503 回答